Programmation orientée Objet          Vers php 5.4
Réduire le couplageapplicatif grâce aux Traits
(mauvaise) définition scolaire de lobjet• Un objet est une représentation concrète dun concept abstrait
Une classe• Contient des attributs et des méthodes dont la portée peut être limitée• Un seul héritage pour n interfaces• U...
La signature/*** description de la méthode** @access public* @param integer $nombre* @return string*/public function examp...
Linterface• Permet de sassurer que les objets manipulés    fonctionnent de la même manière                              =>...
La Php Standard LibraryClass CountMe implements Countable {  Public fonction count() {        Return 5;• Ou SPL  }• Permet...
FailUn objet cest pas ça !
Pas une représentation concrète• On na jamais vu un "lanceur de requête Sql" dans la vraie vie
Repenser la définition dun objet
Un objet est un comportement• Un objet est un comportement vis à vis de données • Lagrégat des comportements constitue une...
Lhéritage• Spécialisation dun comportement• Une classe fille peut réutiliser ou spécialiser le comportement de sa classe mè...
Lhéritage échoue    Pour 2 raisons
1/ spécialiser nest pas décliner• Souvent on ne spécialise  pas, on décline• Cest infini !
2/ lhéritage "outil"• Lhéritage ne doit pas permettre de donner des outils             Class Example extends Singleton {} ...
Le couplage applicatif       (petit détour)
Code spagethi• Dépendances fortes entre les composants• Tout est entremêlé• Maintenabilité faible
le couplage applicatif• Principe SOLID     • Single Responsability     • Open / closes     • Liskov substitution     Coupl...
Horizontalité vs Verticalité• Un modèle vertical (type héritage mal conçu) nest pas maintenable• Penser horizontal :      ...
Les Traits (pas trop tôt)
Blocs de comportement• Réutilisables • Modèle orienté collaborationClass Example {    Use Trait1, Trait2;}
À lorigine : les mixins• Composants liés à la réutilisation plutôt quà linstanciation• Sont mélangés au code (mixed-in)• I...
Les Traits• Réutilisation de fonctionnalités au niveau des classes• Lensemble des méthodes dun Trait constituent son compo...
Gestion des conflits• Pas de priorité impliciteClass Example {    Use Trait1, Trait2 {         Trait2::myMethod as m;      ...
Traits composites• Un Trait peut être composé dautres Traits• On parle alors de Traits composites
Trait Singleton {                                                   /**                                                  /...
class Example extends MaClasseMetier {    use Singleton;}$oExample = Example::getInstance();var_dump($oExample === Example...
Et cest pas plus lent11501145114011351130        heritage   1 trait   4 traits
Liens et ressources
Sur le netRFC des traits : https://wiki.php.net/rfc/horizontalreuseRecherches dAlexandre Bergel : http://bergel.eu
Questions
Prochain SlideShare
Chargement dans…5
×

Programmation Orientée Objet et les Traits en PHP 5.4

4 195 vues

Publié le

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

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
4 195
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1 444
Actions
Partages
0
Téléchargements
86
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

×