SlideShare a Scribd company logo
Please, feel free to interrupt me at any time.
Do you use: Multiple Inheritance? Mixins?
Traits A Language Feature for PHP? Stefan Marr PHP Unconference Hamburg 26-27 April 2008
Agenda Introduction to Traits Traits Applied Traits for PHP: Trait versus Graft Roundup and Conclusion
Which problem is to be solved? Single inheritance Simple but not  expressive enough Leads to Code duplication Inappropriate  hierarchies
Traits Set of methods Possibly composed of other Traits Composition is unordered Composition operations Sum Exclusion Aliasing Can be flattened away
Whiteboard
TRAITS APPLIED Case Studies Illustrating Benefits of Traits
Use Case for Traits in a PHP Library ezcReflection enhances PHP Reflection API Adds XDoclet like annotations for PHP Enhances type hinting using PHPDoc type annotations Illustrates solution for code duplication problems
Refactoring ezcReflection with Traits original with Traits green parts are extracted to the Traits on the right-hand side, and will be removed from the classes
Case Study: java.io [6] Mature code base, in wide use java.io Library from Java 1.4.2 79 classes, 25000 lines of code Results 12 classes changed 30 duplicated methods removed 14 Traits introduces
from [6]
Case Study: Smalltalk Collection Classes [10] Problem: code reuse vs. conceptual categorization Unnecessary inheritance Code duplication Methods to high in hierarchy Conceptual shortcomings Results for core collection classes 23 classes changed,  12% less code, 19.4% less methods
Case Study: Smalltalk Collection Classes [10] Lessons Learned Traits simplify refactoring Very fine-grained traits Tools are important Traits enable to defer design of class hierarchy Improvements Uniformity, understandability, reuse
Check for Limitations Code duplication Inappropriate hierarchies Diamond problem Fragile hierarchies Lack of composition control     
TRAITS FOR PHP Trait versus Graft
What is a Graft? Stateful, non-breakable entity of reuse Derived from the Traits notion Proposed with RFC: Non Breakable Traits for PHP Why Graft? From  The Grafter's Handbook  by R.J. Garner
A Comparison Traits Purpose, reuse of behavior Features Stateless Flattenable Explicit conflict resolution Highly composable Notion Language-base Copy and Paste Grafts Purpose, reuse of modules smaller then classes Features Stateful Hides complexity Conflict avoidiance Strong encapsulation Notion Delegation with self-impersonation
Traits Syntax and Semantics trait  A { public function  small() { echo  'a' ; } public function  big()  { echo  'A' ; } abstract public function  doBFoo(); public function  doAFoo() { echo  'AFoo uses BFoo: ' ; $this ->doBFoo(); } } trait  B { public function s mall() { echo  'b' ; } public function  big()  { echo  'B' ; } public function  doBFoo() { echo  'B-FOO' ; } } class  Talker { use  A, B { B::small  instead  A::small,  A::big  instead  B::big, B::big  as  talk } } $talker  =  new  Talker(); $talker ->small();  // b  $talker ->big();  // A $talker ->talk();  // B $talker ->doAFoo();  // AFoo uses   // BFoo: B-FOO $talker ->doBFoo();  // B-FOO
Grafts Syntax and Semantics graft  Counter { private  $cnt = 0 ; public function  inc() { $this ->cnt++; } public function  reset() { $this ->cnt = -1; $this ->inc(); } } graft  DB { private  $db; public function  connect() { $this ->db = new FooDB( 'param' ); } public function  reset() { $this ->db->flush(); $this ->db = null; } public function  doFoo(){echo  'foo' ;} } class  MyPage { include  Counter { public  incCnt()  as  inc(); public  resetCnt()  as  reset(); } include  DB { public  connect(); public  reset(); } public function  inc() { /* next page */ } } $page  =  new  MyPage(); $page ->connect(); $page ->incCnt();  //($Countercnt == 1) $page ->resetCnt();  // $Countercnt = 0; $page ->inc();  // goto next page $page ->doFoo();  // FATAL ERROR
My Mental Image Traits Grafts
ROUNDUP AND CONCLUSION Trait Support, Discussion, Resume
Environments Supporting Traits Squeak: In standard distribution since 3.9 [11] Trait named: #TDrawing uses: {} draw ˆself drawOn: World canvas in: bounds bounds self requirement Object subclass: #Circle instanceVariableNames: ’’ traits: { TDrawing } ...
Environments Supporting Traits Scala: static-typed language running on JVM [7] trait  TDrawing { def  draw() : Any =  drawOn(World.canvas(), bounds) def  bounds() : Any } class  Circle  extends  TDrawing { ... }
Environments Supporting Traits Perl6: Flavor of Traits with states called Roles [12] role  TDrawing { method  draw() {    return  drawOn(World.canvas(),   bounds); } } class  Circle  does  TDrawing { ... }
Environments Supporting Traits Approaches for plain Java Using AspectJ [2] Utilizing an Eclipse Plugin [8]
Environments Supporting Traits Approaches for plain Java Using AspectJ [2] Utilizing an Eclipse Plugin [8]
Environments Supporting Traits C#: Prototype Implementation for Rotor [9] trait  TDrawing { public  Object draw() {    return  drawOn(World.canvas(),   this .bounds); } requires  {  public  Object bounds();  } } class  Circle { uses  { TDrawing } ... }
Resume Traits are a appropriate language construct to: Achive conceptual consistent class hierarchies Avoid code duplication Enhance class compositon capabilites Available for different languages Two different flavors proposed for PHP
Request for Comments Traits for PHP Version:  1.5 Date:  2008-03-06 Author:  Stefan Marr Wiki: http://wiki.php.net/rfc/traits reST: http://www.stefan-marr.de/rfc-traits-for-php.txt HTML: http://www.stefan-marr.de/artikel/rfc-traits-for-php.html Non Breakable Traits for PHP Version:  1.0 Date:  2008-02-29 Author:  Joshua Thompson Wiki:  http://wiki.php.net/rfc/nonbreakabletraits
Basic Literature Main Article about Traits  [3] S. DUCASSE, O. NIERSTRASZ, N. SCHÄRLI, R. WUYTS, AND A. P. BLACK,  Traits: A Mechanism for Fine-Grained Reuse , ACM Trans. Program. Lang. Syst., 28 (2006), pp. 331–388. Traits Extensions [1] A. BERGEL, S. DUCASSE, O. NIERSTRASZ, AND R. WUYTS,  Stateful Traits and their Formalization , Journal of Computer Languages, Systems and Structures, 34 (2007), pp. 83–108. [4] S. DUCASSE, R. WUYTS, A. BERGEL, AND O. NIERSTRASZ,  User-Changeable Visibility: Resolving Unanticipated Name Clashes in Traits , SIGPLAN Not., 42 (2007), pp. 171–190.
Literature [1] A. BERGEL, S. DUCASSE, O. NIERSTRASZ, AND R. WUYTS,  Stateful Traits and their Formalization , Journal of Computer Languages, Systems and Structures, 34 (2007), pp. 83–108. [2] S. DENIER,  Traits Programming with AspectJ , RSTI - L'objet, 11 (2005), pp. 69–86. [3] S. DUCASSE, O. NIERSTRASZ, N. SCHÄRLI, R. WUYTS, AND A. P. BLACK,  Traits: A Mechanism for Fine-Grained Reuse , ACM Trans. Program. Lang. Syst., 28 (2006), pp. 331–388. [4] S. DUCASSE, R. WUYTS, A. BERGEL, AND O. NIERSTRASZ,  User-Changeable Visibility: Resolving Unanticipated Name Clashes in Traits , SIGPLAN Not., 42 (2007), pp. 171–190. [5] S. MARR AND F. MENGE,  ezcReflection , SVN Repository, eZ Components, January 2008. http://svn.ez.no/svn/ezcomponents/experimental/Reflection. [6] E. R. MURPHY-HILL, P. J. QUITSLUND, AND A. P. BLACK,  Removing Duplication from java.io: a Case Study using Traits , in OOPSLA '05: Companion to the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, New York, NY, USA, 2005, ACM, pp. 282–291.
Literature [7] PROGRAMMING METHODS LABORATORY,  Traits for Scala , Programming Language, Ecole Polytechnique Fédérale de Lausanne, 2006. http://www.scala-lang.org/intro/traits.html. [8] P. J. QUITSLUND, E. R. MURPHY-HILL, AND A. P. BLACK,  Supporting Java traits in Eclipse , in eclipse '04: Proceedings of the 2004 OOPSLA workshop on eclipse technology eXchange, New York, NY, USA, 2004, ACM, pp. 37–41. [9] S. REICHHART,  Traits in C# .  Video of Talk at Microsoft Research, September 2005. [10] N. SCHÄRLI,  Traits — Composing Classes from Behavioral Building Blocks , PhD thesis, University of Berne, Feb. 2005. [11] SOFTWARE COMPOSITION GROUP,  Traits for Squeak , Smalltalk VM, University of Berne, December 2006. http://www.iam.unibe.ch/ scg/Research/Traits/index.html. [12] L. WALL,  Apocalypse 12: Class Composition with Roles , tech. report, The Perl Foundation, 2004. http://www.perl.com/pub/a/2004/04/16/a12.html?page=11.
Any questions? Discussion What du you think? Traits vs. Grafts
TRAITS ENHANCED User-Changeable Visibility and Stateful Traits
User-Changeable Visibility Add flexibility to conflict handling Introduces “Trait private” methods Methods visibility changeable on composition
Stateless Traits Problem: stateless Traits are incomplete, not self-contained units of reuse Required state accessors bloat the interfaces Encapsulation is violated by public accessors Reuse, composition is hampered State access introduces fragility
Stateless Traits
Stateful Traits Solution requirements: Preserver faltening property Minimal and general approach Language independed Solution State is private to the Traits scope Client can request access under new private name Client can merge state
Stateful Traits

More Related Content

PPT
Object Oriented Technologies
PPTX
Object Oriented Technologies
PPT
Adapt OWL as a Modular Ontology Language
PPT
Polymorphism
PPTX
R and Python, A Code Demo
PDF
Turbo prolog 2.0 basics
PDF
TI1220 Lecture 14: Domain-Specific Languages
PDF
A Field Guide to DSL Design in Scala
Object Oriented Technologies
Object Oriented Technologies
Adapt OWL as a Modular Ontology Language
Polymorphism
R and Python, A Code Demo
Turbo prolog 2.0 basics
TI1220 Lecture 14: Domain-Specific Languages
A Field Guide to DSL Design in Scala

What's hot (20)

PPT
Andy On Closures
PDF
Domain specific languages and Scala
PDF
Metaprograms and metadata (as part of the the PTT lecture)
PPT
Representing and Reasoning with Modular Ontologies
PPT
3. Data types and Variables
PPT
Integration of Domain-Specific and Domain-Independent Ontologies for Colonosc...
PDF
Dart workshop
PDF
Object Oriented Programming Concepts
PPT
Chapter1pp
PDF
Reviewing OOP Design patterns
PPT
C++ OOP Implementation
PPT
Chado introduction
PPT
Chado-XML
PPT
Chado for evolutionary biology
PPTX
Creating Domain Specific Languages in F#
PDF
Little languages
PDF
Object Oriented Programming using C++ Part I
PPTX
Basics of oops concept
PDF
Implementing Higher-Kinded Types in Dotty
PDF
Transformer Seq2Sqe Models: Concepts, Trends & Limitations (DLI)
Andy On Closures
Domain specific languages and Scala
Metaprograms and metadata (as part of the the PTT lecture)
Representing and Reasoning with Modular Ontologies
3. Data types and Variables
Integration of Domain-Specific and Domain-Independent Ontologies for Colonosc...
Dart workshop
Object Oriented Programming Concepts
Chapter1pp
Reviewing OOP Design patterns
C++ OOP Implementation
Chado introduction
Chado-XML
Chado for evolutionary biology
Creating Domain Specific Languages in F#
Little languages
Object Oriented Programming using C++ Part I
Basics of oops concept
Implementing Higher-Kinded Types in Dotty
Transformer Seq2Sqe Models: Concepts, Trends & Limitations (DLI)
Ad

Similar to Traits: A New Language Feature for PHP? (20)

KEY
Traits composition
PPTX
Php traits
DOCX
Using traits in PHP
PDF
Stateful traits in Pharo
PDF
Object Features
PPTX
PHP Traits
PDF
Objects, Testing, and Responsibility
PDF
Advanced PHP Simplified - Sunshine PHP 2018
PDF
Demystifying Object-Oriented Programming - PHP UK Conference 2017
PDF
Designing with Groovy Traits - Gr8Conf India
PDF
Obect-Oriented Collaboration
PDF
Pharo: a reflective language A first systematic analysis of reflective APIs
PPT
Traits inscala
PPT
Traits in scala
PDF
Demystifying Object-Oriented Programming #phpbnl18
PDF
TI1220 Lecture 8: Traits & Type Parameterization
ODP
PHP Barcelona 2010 - Architecture and testability
PDF
When & Why: Interfaces, abstract classes, traits
PDF
Demystifying Object-Oriented Programming - Midwest PHP
Traits composition
Php traits
Using traits in PHP
Stateful traits in Pharo
Object Features
PHP Traits
Objects, Testing, and Responsibility
Advanced PHP Simplified - Sunshine PHP 2018
Demystifying Object-Oriented Programming - PHP UK Conference 2017
Designing with Groovy Traits - Gr8Conf India
Obect-Oriented Collaboration
Pharo: a reflective language A first systematic analysis of reflective APIs
Traits inscala
Traits in scala
Demystifying Object-Oriented Programming #phpbnl18
TI1220 Lecture 8: Traits & Type Parameterization
PHP Barcelona 2010 - Architecture and testability
When & Why: Interfaces, abstract classes, traits
Demystifying Object-Oriented Programming - Midwest PHP
Ad

More from Stefan Marr (20)

PPTX
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
PPTX
Seminar on Parallel and Concurrent Programming
PPTX
Optimizing Communicating Event-Loop Languages with Truffle
PPTX
Tracing versus Partial Evaluation: Which Meta-Compilation Approach is Better ...
PPTX
Why Is Concurrent Programming Hard? And What Can We Do about It?
PPTX
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
PPTX
Building High-Performance Language Implementations With Low Effort
PPTX
Cloud PARTE: Elastic Complex Event Processing based on Mobile Actors
PPTX
Supporting Concurrency Abstractions in High-level Language Virtual Machines
PDF
Identifying A Unifying Mechanism for the Implementation of Concurrency Abstra...
PDF
Sly and the RoarVM: Parallel Programming with Smalltalk
PDF
Which Problems Does a Multi-Language Virtual Machine Need to Solve in the Mul...
PDF
Sly and the RoarVM: Exploring the Manycore Future of Programming
PDF
PHP.next: Traits
PDF
The Price of the Free Lunch: Programming in the Multicore Era
PDF
Locality and Encapsulation: A Foundation for Concurrency Support in Multi-Lan...
PPTX
Insertion Tree Phasers: Efficient and Scalable Barrier Synchronization for Fi...
PPTX
Encapsulation and Locality: A Foundation for Concurrency Support in Multi-Lan...
PPTX
Intermediate Language Design of High-level Language VMs: Towards Comprehensiv...
PPTX
Virtual Machine Support for Many-Core Architectures: Decoupling Abstract from...
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
Seminar on Parallel and Concurrent Programming
Optimizing Communicating Event-Loop Languages with Truffle
Tracing versus Partial Evaluation: Which Meta-Compilation Approach is Better ...
Why Is Concurrent Programming Hard? And What Can We Do about It?
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
Building High-Performance Language Implementations With Low Effort
Cloud PARTE: Elastic Complex Event Processing based on Mobile Actors
Supporting Concurrency Abstractions in High-level Language Virtual Machines
Identifying A Unifying Mechanism for the Implementation of Concurrency Abstra...
Sly and the RoarVM: Parallel Programming with Smalltalk
Which Problems Does a Multi-Language Virtual Machine Need to Solve in the Mul...
Sly and the RoarVM: Exploring the Manycore Future of Programming
PHP.next: Traits
The Price of the Free Lunch: Programming in the Multicore Era
Locality and Encapsulation: A Foundation for Concurrency Support in Multi-Lan...
Insertion Tree Phasers: Efficient and Scalable Barrier Synchronization for Fi...
Encapsulation and Locality: A Foundation for Concurrency Support in Multi-Lan...
Intermediate Language Design of High-level Language VMs: Towards Comprehensiv...
Virtual Machine Support for Many-Core Architectures: Decoupling Abstract from...

Recently uploaded (20)

PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Empathic Computing: Creating Shared Understanding
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
cuic standard and advanced reporting.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Encapsulation theory and applications.pdf
PPT
Teaching material agriculture food technology
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Empathic Computing: Creating Shared Understanding
NewMind AI Weekly Chronicles - August'25-Week II
20250228 LYD VKU AI Blended-Learning.pptx
MIND Revenue Release Quarter 2 2025 Press Release
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
gpt5_lecture_notes_comprehensive_20250812015547.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Mobile App Security Testing_ A Comprehensive Guide.pdf
cuic standard and advanced reporting.pdf
Chapter 3 Spatial Domain Image Processing.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
MYSQL Presentation for SQL database connectivity
Dropbox Q2 2025 Financial Results & Investor Presentation
Spectral efficient network and resource selection model in 5G networks
Assigned Numbers - 2025 - Bluetooth® Document
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Encapsulation theory and applications.pdf
Teaching material agriculture food technology
Build a system with the filesystem maintained by OSTree @ COSCUP 2025

Traits: A New Language Feature for PHP?

  • 1. Please, feel free to interrupt me at any time.
  • 2. Do you use: Multiple Inheritance? Mixins?
  • 3. Traits A Language Feature for PHP? Stefan Marr PHP Unconference Hamburg 26-27 April 2008
  • 4. Agenda Introduction to Traits Traits Applied Traits for PHP: Trait versus Graft Roundup and Conclusion
  • 5. Which problem is to be solved? Single inheritance Simple but not expressive enough Leads to Code duplication Inappropriate hierarchies
  • 6. Traits Set of methods Possibly composed of other Traits Composition is unordered Composition operations Sum Exclusion Aliasing Can be flattened away
  • 8. TRAITS APPLIED Case Studies Illustrating Benefits of Traits
  • 9. Use Case for Traits in a PHP Library ezcReflection enhances PHP Reflection API Adds XDoclet like annotations for PHP Enhances type hinting using PHPDoc type annotations Illustrates solution for code duplication problems
  • 10. Refactoring ezcReflection with Traits original with Traits green parts are extracted to the Traits on the right-hand side, and will be removed from the classes
  • 11. Case Study: java.io [6] Mature code base, in wide use java.io Library from Java 1.4.2 79 classes, 25000 lines of code Results 12 classes changed 30 duplicated methods removed 14 Traits introduces
  • 13. Case Study: Smalltalk Collection Classes [10] Problem: code reuse vs. conceptual categorization Unnecessary inheritance Code duplication Methods to high in hierarchy Conceptual shortcomings Results for core collection classes 23 classes changed, 12% less code, 19.4% less methods
  • 14. Case Study: Smalltalk Collection Classes [10] Lessons Learned Traits simplify refactoring Very fine-grained traits Tools are important Traits enable to defer design of class hierarchy Improvements Uniformity, understandability, reuse
  • 15. Check for Limitations Code duplication Inappropriate hierarchies Diamond problem Fragile hierarchies Lack of composition control     
  • 16. TRAITS FOR PHP Trait versus Graft
  • 17. What is a Graft? Stateful, non-breakable entity of reuse Derived from the Traits notion Proposed with RFC: Non Breakable Traits for PHP Why Graft? From The Grafter's Handbook by R.J. Garner
  • 18. A Comparison Traits Purpose, reuse of behavior Features Stateless Flattenable Explicit conflict resolution Highly composable Notion Language-base Copy and Paste Grafts Purpose, reuse of modules smaller then classes Features Stateful Hides complexity Conflict avoidiance Strong encapsulation Notion Delegation with self-impersonation
  • 19. Traits Syntax and Semantics trait A { public function small() { echo 'a' ; } public function big() { echo 'A' ; } abstract public function doBFoo(); public function doAFoo() { echo 'AFoo uses BFoo: ' ; $this ->doBFoo(); } } trait B { public function s mall() { echo 'b' ; } public function big() { echo 'B' ; } public function doBFoo() { echo 'B-FOO' ; } } class Talker { use A, B { B::small instead A::small, A::big instead B::big, B::big as talk } } $talker = new Talker(); $talker ->small(); // b $talker ->big(); // A $talker ->talk(); // B $talker ->doAFoo(); // AFoo uses // BFoo: B-FOO $talker ->doBFoo(); // B-FOO
  • 20. Grafts Syntax and Semantics graft Counter { private $cnt = 0 ; public function inc() { $this ->cnt++; } public function reset() { $this ->cnt = -1; $this ->inc(); } } graft DB { private $db; public function connect() { $this ->db = new FooDB( 'param' ); } public function reset() { $this ->db->flush(); $this ->db = null; } public function doFoo(){echo 'foo' ;} } class MyPage { include Counter { public incCnt() as inc(); public resetCnt() as reset(); } include DB { public connect(); public reset(); } public function inc() { /* next page */ } } $page = new MyPage(); $page ->connect(); $page ->incCnt(); //($Countercnt == 1) $page ->resetCnt(); // $Countercnt = 0; $page ->inc(); // goto next page $page ->doFoo(); // FATAL ERROR
  • 21. My Mental Image Traits Grafts
  • 22. ROUNDUP AND CONCLUSION Trait Support, Discussion, Resume
  • 23. Environments Supporting Traits Squeak: In standard distribution since 3.9 [11] Trait named: #TDrawing uses: {} draw ˆself drawOn: World canvas in: bounds bounds self requirement Object subclass: #Circle instanceVariableNames: ’’ traits: { TDrawing } ...
  • 24. Environments Supporting Traits Scala: static-typed language running on JVM [7] trait TDrawing { def draw() : Any = drawOn(World.canvas(), bounds) def bounds() : Any } class Circle extends TDrawing { ... }
  • 25. Environments Supporting Traits Perl6: Flavor of Traits with states called Roles [12] role TDrawing { method draw() { return drawOn(World.canvas(), bounds); } } class Circle does TDrawing { ... }
  • 26. Environments Supporting Traits Approaches for plain Java Using AspectJ [2] Utilizing an Eclipse Plugin [8]
  • 27. Environments Supporting Traits Approaches for plain Java Using AspectJ [2] Utilizing an Eclipse Plugin [8]
  • 28. Environments Supporting Traits C#: Prototype Implementation for Rotor [9] trait TDrawing { public Object draw() { return drawOn(World.canvas(), this .bounds); } requires { public Object bounds(); } } class Circle { uses { TDrawing } ... }
  • 29. Resume Traits are a appropriate language construct to: Achive conceptual consistent class hierarchies Avoid code duplication Enhance class compositon capabilites Available for different languages Two different flavors proposed for PHP
  • 30. Request for Comments Traits for PHP Version: 1.5 Date: 2008-03-06 Author: Stefan Marr Wiki: http://wiki.php.net/rfc/traits reST: http://www.stefan-marr.de/rfc-traits-for-php.txt HTML: http://www.stefan-marr.de/artikel/rfc-traits-for-php.html Non Breakable Traits for PHP Version: 1.0 Date: 2008-02-29 Author: Joshua Thompson Wiki: http://wiki.php.net/rfc/nonbreakabletraits
  • 31. Basic Literature Main Article about Traits [3] S. DUCASSE, O. NIERSTRASZ, N. SCHÄRLI, R. WUYTS, AND A. P. BLACK, Traits: A Mechanism for Fine-Grained Reuse , ACM Trans. Program. Lang. Syst., 28 (2006), pp. 331–388. Traits Extensions [1] A. BERGEL, S. DUCASSE, O. NIERSTRASZ, AND R. WUYTS, Stateful Traits and their Formalization , Journal of Computer Languages, Systems and Structures, 34 (2007), pp. 83–108. [4] S. DUCASSE, R. WUYTS, A. BERGEL, AND O. NIERSTRASZ, User-Changeable Visibility: Resolving Unanticipated Name Clashes in Traits , SIGPLAN Not., 42 (2007), pp. 171–190.
  • 32. Literature [1] A. BERGEL, S. DUCASSE, O. NIERSTRASZ, AND R. WUYTS, Stateful Traits and their Formalization , Journal of Computer Languages, Systems and Structures, 34 (2007), pp. 83–108. [2] S. DENIER, Traits Programming with AspectJ , RSTI - L'objet, 11 (2005), pp. 69–86. [3] S. DUCASSE, O. NIERSTRASZ, N. SCHÄRLI, R. WUYTS, AND A. P. BLACK, Traits: A Mechanism for Fine-Grained Reuse , ACM Trans. Program. Lang. Syst., 28 (2006), pp. 331–388. [4] S. DUCASSE, R. WUYTS, A. BERGEL, AND O. NIERSTRASZ, User-Changeable Visibility: Resolving Unanticipated Name Clashes in Traits , SIGPLAN Not., 42 (2007), pp. 171–190. [5] S. MARR AND F. MENGE, ezcReflection , SVN Repository, eZ Components, January 2008. http://svn.ez.no/svn/ezcomponents/experimental/Reflection. [6] E. R. MURPHY-HILL, P. J. QUITSLUND, AND A. P. BLACK, Removing Duplication from java.io: a Case Study using Traits , in OOPSLA '05: Companion to the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, New York, NY, USA, 2005, ACM, pp. 282–291.
  • 33. Literature [7] PROGRAMMING METHODS LABORATORY, Traits for Scala , Programming Language, Ecole Polytechnique Fédérale de Lausanne, 2006. http://www.scala-lang.org/intro/traits.html. [8] P. J. QUITSLUND, E. R. MURPHY-HILL, AND A. P. BLACK, Supporting Java traits in Eclipse , in eclipse '04: Proceedings of the 2004 OOPSLA workshop on eclipse technology eXchange, New York, NY, USA, 2004, ACM, pp. 37–41. [9] S. REICHHART, Traits in C# . Video of Talk at Microsoft Research, September 2005. [10] N. SCHÄRLI, Traits — Composing Classes from Behavioral Building Blocks , PhD thesis, University of Berne, Feb. 2005. [11] SOFTWARE COMPOSITION GROUP, Traits for Squeak , Smalltalk VM, University of Berne, December 2006. http://www.iam.unibe.ch/ scg/Research/Traits/index.html. [12] L. WALL, Apocalypse 12: Class Composition with Roles , tech. report, The Perl Foundation, 2004. http://www.perl.com/pub/a/2004/04/16/a12.html?page=11.
  • 34. Any questions? Discussion What du you think? Traits vs. Grafts
  • 35. TRAITS ENHANCED User-Changeable Visibility and Stateful Traits
  • 36. User-Changeable Visibility Add flexibility to conflict handling Introduces “Trait private” methods Methods visibility changeable on composition
  • 37. Stateless Traits Problem: stateless Traits are incomplete, not self-contained units of reuse Required state accessors bloat the interfaces Encapsulation is violated by public accessors Reuse, composition is hampered State access introduces fragility
  • 39. Stateful Traits Solution requirements: Preserver faltening property Minimal and general approach Language independed Solution State is private to the Traits scope Client can request access under new private name Client can merge state