Programmation Orientée Objet et les Traits en PHP 5.4

4,149 views
4,036 views

Published on

Présentation pour l'AFUP des Traits sous PHP 5.4

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,149
On SlideShare
0
From Embeds
0
Number of Embeds
1,439
Actions
Shares
0
Downloads
86
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Programmation Orientée Objet et les Traits en PHP 5.4

  1. 1. Programmation orientée Objet Vers php 5.4
  2. 2. Réduire le couplageapplicatif grâce aux Traits
  3. 3. (mauvaise) définition scolaire de lobjet• Un objet est une représentation concrète dun concept abstrait
  4. 4. Une classe• Contient des attributs et des méthodes dont la portée peut être limitée• Un seul héritage pour n interfaces• Une méthode est identifiée par sa signature
  5. 5. La signature/*** description de la méthode** @access public* @param integer $nombre* @return string*/public function example($nombre) { return "une chaîne";}
  6. 6. Linterface• Permet de sassurer que les objets manipulés fonctionnent de la même manière => ContratPublic fonction utilise(interfaceStylo $stylo) {}
  7. 7. La Php Standard LibraryClass CountMe implements Countable { Public fonction count() { Return 5;• Ou SPL }• Permet dajouter des fonctionnalités à des objets}$object = new CountMe;• Exemple : linterface countableecho sizeof($object); // 5
  8. 8. FailUn objet cest pas ça !
  9. 9. Pas une représentation concrète• On na jamais vu un "lanceur de requête Sql" dans la vraie vie
  10. 10. Repenser la définition dun objet
  11. 11. Un objet est un comportement• Un objet est un comportement vis à vis de données • Lagrégat des comportements constitue une application
  12. 12. Lhéritage• Spécialisation dun comportement• Une classe fille peut réutiliser ou spécialiser le comportement de sa classe mère• Pas dhéritage multiple en PHP
  13. 13. Lhéritage échoue Pour 2 raisons
  14. 14. 1/ spécialiser nest pas décliner• Souvent on ne spécialise pas, on décline• Cest infini !
  15. 15. 2/ lhéritage "outil"• Lhéritage ne doit pas permettre de donner des outils Class Example extends Singleton {} => ça ne doit pas exister !!
  16. 16. Le couplage applicatif (petit détour)
  17. 17. Code spagethi• Dépendances fortes entre les composants• Tout est entremêlé• Maintenabilité faible
  18. 18. le couplage applicatif• Principe SOLID • Single Responsability • Open / closes • Liskov substitution Couplage faible • Interface segregation • Dépendency inversion
  19. 19. Horizontalité vs Verticalité• Un modèle vertical (type héritage mal conçu) nest pas maintenable• Penser horizontal : • Pattern Strategy • Injection de dépendance
  20. 20. Les Traits (pas trop tôt)
  21. 21. Blocs de comportement• Réutilisables • Modèle orienté collaborationClass Example { Use Trait1, Trait2;}
  22. 22. À lorigine : les mixins• Composants liés à la réutilisation plutôt quà linstanciation• Sont mélangés au code (mixed-in)• Injectés dans le code au moment de lhéritage• Conflits entre les mixins
  23. 23. Les Traits• Réutilisation de fonctionnalités au niveau des classes• Lensemble des méthodes dun Trait constituent son comportement• Sans État
  24. 24. Gestion des conflits• Pas de priorité impliciteClass Example { Use Trait1, Trait2 { Trait2::myMethod as m; • Résolution explicite Trait1::any insteadof Trait2 des conflits }}
  25. 25. Traits composites• Un Trait peut être composé dautres Traits• On parle alors de Traits composites
  26. 26. Trait Singleton { /**     /**     * Constructor      * Prevents cloning     */      * @throws Exception    protected function __construct() {}      */     /**     public function __clone() {     * Get singleton instance         throw new Exception(Cloning of this object isnt     * @return static authorized);     */     }     public static function getInstance() {     /**        static $instance = null;      * Prevents deserialization        if (is_null($instance)) {      * @throws Exception            $instance = new static;      */        }     public function __wakeup() {        return $instance;         throw new Exception("Cannot deserialize instance of Singleton pattern in" . get_called_class());    }     }  }
  27. 27. class Example extends MaClasseMetier {    use Singleton;}$oExample = Example::getInstance();var_dump($oExample === Example::getInstance());// true$oExample = new Example;// Fatal error: Call to protected Example::__construct() from invalidcontext
  28. 28. Et cest pas plus lent11501145114011351130 heritage 1 trait 4 traits
  29. 29. Liens et ressources
  30. 30. Sur le netRFC des traits : https://wiki.php.net/rfc/horizontalreuseRecherches dAlexandre Bergel : http://bergel.eu
  31. 31. Questions

×