SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Programmation orientée Objet
          Vers php 5.4
Réduire le couplage
applicatif grâce aux Traits
(mauvaise) définition scolaire de l'objet




• Un objet est une
 représentation concrète d'un
 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
• Une méthode est identifiée par sa signature
La signature
/**

* description de la méthode

*

* @access public

* @param integer $nombre

* @return string

*/

public function example($nombre) {

    return "une chaîne";

}
L'interface
• Permet de s'assurer que les objets manipulés
    fonctionnent de la même manière

                              => Contrat




Public fonction utilise(interfaceStylo $stylo) {

}
La Php Standard Library
Class CountMe implements Countable {

  Public fonction count() { 

       Return 5;
• Ou SPL
  }

• Permet d'ajouter des fonctionnalités à des objets
}

$object = new CountMe;
• Exemple : l'interface countable
echo sizeof($object); // 5
Fail
Un objet c'est pas ça !
Pas une représentation concrète




• On n'a jamais vu un "lanceur de requête Sql" dans la
 vraie vie
Repenser la définition d'un objet
Un objet est un comportement


• Un objet est un comportement vis à vis de
 données 

• L'agrégat des comportements constitue une
 application
L'héritage
• Spécialisation d'un
 comportement

• Une classe fille peut
 réutiliser ou spécialiser le
 comportement de sa
 classe mère

• Pas d'héritage multiple en
 PHP
L'héritage échoue
    Pour 2 raisons
1/ spécialiser n'est pas décliner



• Souvent on ne spécialise
  pas, on décline

• C'est infini !
2/ l'héritage "outil"
• L'héritage ne doit pas permettre de donner des outils

             Class Example extends Singleton {}

              => ça ne doit pas exister !!
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
     Couplage faible
     • Interface segregation
     • Dépendency inversion
Horizontalité vs Verticalité
• Un modèle vertical (type héritage mal conçu) n'est
 pas maintenable

• Penser horizontal :
         • Pattern Strategy
         • Injection de dépendance
Les Traits
 (pas trop tôt)
Blocs de comportement
• Réutilisables 
• Modèle orienté collaboration

Class Example {

    Use Trait1, Trait2;

}
À l'origine : les mixins

• Composants liés à la réutilisation plutôt qu'à
 l'instanciation

• Sont mélangés au code (mixed-in)
• Injectés dans le code au moment de l'héritage
• Conflits entre les mixins
Les Traits

• Réutilisation de fonctionnalités au niveau des
 classes

• L'ensemble des méthodes d'un Trait constituent son
 comportement

• Sans État
Gestion des conflits
• Pas de priorité implicite
Class Example {

    Use Trait1, Trait2 {

         Trait2::myMethod as m;
         • Résolution explicite
         Trait1::any insteadof Trait2
    des conflits
    }

}
Traits composites



• Un Trait peut être composé d'autres Traits
• On parle alors de Traits composites
Trait Singleton {
                                              
     /**
                                                  /**
     * Constructor
                                                   * Prevents cloning
     */
                                                   * @throws Exception
    protected function __construct() {}
                                                   */
     /**
                                                  public function __clone() {
     * Get singleton instance
                                                      throw new Exception('Cloning of this object isn't
     * @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());
    }
                                                  }
 
                                              }
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 invalid
context
Et c'est pas plus lent
1150


1145


1140


1135


1130
        heritage   1 trait   4 traits
Liens et ressources
Sur le net
RFC des traits : https://wiki.php.net/rfc/horizontalreuse

Recherches d'Alexandre Bergel : http://bergel.eu
Questions

Mais conteúdo relacionado

Mais procurados

PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POO
mazenovi
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
Jean-Pierre Vincent
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
Fredy Fadel
 

Mais procurados (20)

Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
 
Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POO
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
 
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 
Cours php
Cours phpCours php
Cours php
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partie
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de base
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partie
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objets
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 

Destaque

Louaize bc higher education in lebanon french
Louaize bc higher education in lebanon frenchLouaize bc higher education in lebanon french
Louaize bc higher education in lebanon french
IAU_Past_Conferences
 
projet sparte alexandre atlan
projet sparte alexandre atlanprojet sparte alexandre atlan
projet sparte alexandre atlan
climberboy1999
 
Louaize bc notre dame de louaize introduction vf w
Louaize bc notre dame de louaize introduction vf wLouaize bc notre dame de louaize introduction vf w
Louaize bc notre dame de louaize introduction vf w
IAU_Past_Conferences
 
L'ordre du jour de l'AG Dexia
L'ordre du jour de l'AG DexiaL'ordre du jour de l'AG Dexia
L'ordre du jour de l'AG Dexia
lesoirbe
 
French Right of REVOLUTION & Political CORRUPTION
French   Right of REVOLUTION & Political CORRUPTIONFrench   Right of REVOLUTION & Political CORRUPTION
French Right of REVOLUTION & Political CORRUPTION
VogelDenise
 
présidentielle : les votes en Belgique
présidentielle : les votes en Belgiqueprésidentielle : les votes en Belgique
présidentielle : les votes en Belgique
lesoirbe
 
Louaize bc notre dame de louaize introduction vf
Louaize bc notre dame de louaize introduction vfLouaize bc notre dame de louaize introduction vf
Louaize bc notre dame de louaize introduction vf
IAU_Past_Conferences
 
DoYouSEO Camp mtl #2
DoYouSEO Camp mtl #2DoYouSEO Camp mtl #2
DoYouSEO Camp mtl #2
DoYouSEO
 
Conférence Nationale sur le projet de Document de Politique Linguistique du M...
Conférence Nationale sur le projet de Document de Politique Linguistique du M...Conférence Nationale sur le projet de Document de Politique Linguistique du M...
Conférence Nationale sur le projet de Document de Politique Linguistique du M...
Boukary Konate
 
Qinghai tibet al.ppt
Qinghai tibet al.pptQinghai tibet al.ppt
Qinghai tibet al.ppt
mouniert
 

Destaque (20)

Outils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderneOutils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderne
 
Louaize bc higher education in lebanon french
Louaize bc higher education in lebanon frenchLouaize bc higher education in lebanon french
Louaize bc higher education in lebanon french
 
projet sparte alexandre atlan
projet sparte alexandre atlanprojet sparte alexandre atlan
projet sparte alexandre atlan
 
Intervention Guides Viatao - Festival Icare2011
Intervention Guides Viatao - Festival Icare2011Intervention Guides Viatao - Festival Icare2011
Intervention Guides Viatao - Festival Icare2011
 
FRANCE
FRANCEFRANCE
FRANCE
 
Juridica dévoile sa nouvelle stratégie aux Journées du Courtage
Juridica dévoile sa nouvelle stratégie aux Journées du CourtageJuridica dévoile sa nouvelle stratégie aux Journées du Courtage
Juridica dévoile sa nouvelle stratégie aux Journées du Courtage
 
Louaize bc notre dame de louaize introduction vf w
Louaize bc notre dame de louaize introduction vf wLouaize bc notre dame de louaize introduction vf w
Louaize bc notre dame de louaize introduction vf w
 
Trame globale session pro intro et intervenants - Festival Icare2011
Trame globale session pro intro et intervenants - Festival Icare2011Trame globale session pro intro et intervenants - Festival Icare2011
Trame globale session pro intro et intervenants - Festival Icare2011
 
Yves Beauchamp
Yves BeauchampYves Beauchamp
Yves Beauchamp
 
L'ordre du jour de l'AG Dexia
L'ordre du jour de l'AG DexiaL'ordre du jour de l'AG Dexia
L'ordre du jour de l'AG Dexia
 
Advertisement notes
Advertisement notesAdvertisement notes
Advertisement notes
 
French Right of REVOLUTION & Political CORRUPTION
French   Right of REVOLUTION & Political CORRUPTIONFrench   Right of REVOLUTION & Political CORRUPTION
French Right of REVOLUTION & Political CORRUPTION
 
Conf epsylon
Conf epsylonConf epsylon
Conf epsylon
 
Expert folder Juin FR
Expert folder Juin FRExpert folder Juin FR
Expert folder Juin FR
 
présidentielle : les votes en Belgique
présidentielle : les votes en Belgiqueprésidentielle : les votes en Belgique
présidentielle : les votes en Belgique
 
9782212127829
97822121278299782212127829
9782212127829
 
Louaize bc notre dame de louaize introduction vf
Louaize bc notre dame de louaize introduction vfLouaize bc notre dame de louaize introduction vf
Louaize bc notre dame de louaize introduction vf
 
DoYouSEO Camp mtl #2
DoYouSEO Camp mtl #2DoYouSEO Camp mtl #2
DoYouSEO Camp mtl #2
 
Conférence Nationale sur le projet de Document de Politique Linguistique du M...
Conférence Nationale sur le projet de Document de Politique Linguistique du M...Conférence Nationale sur le projet de Document de Politique Linguistique du M...
Conférence Nationale sur le projet de Document de Politique Linguistique du M...
 
Qinghai tibet al.ppt
Qinghai tibet al.pptQinghai tibet al.ppt
Qinghai tibet al.ppt
 

Semelhante a Programmation Orientée Objet et les Traits en PHP 5.4

Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
julien pauli
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APP
frwebhelp
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratique
Frederic Hardy
 
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxfdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
TarikElMahtouchi1
 

Semelhante a Programmation Orientée Objet et les Traits en PHP 5.4 (20)

POO
POOPOO
POO
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
jpa.pdf
jpa.pdfjpa.pdf
jpa.pdf
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Memo java
Memo javaMemo java
Memo java
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APP
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
Clonage d'objets
Clonage d'objetsClonage d'objets
Clonage d'objets
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratique
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxfdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
 
Introduction à JPA (Java Persistence API )
Introduction à JPA  (Java Persistence API )Introduction à JPA  (Java Persistence API )
Introduction à JPA (Java Persistence API )
 
test doc
test doctest doc
test doc
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 

Programmation Orientée Objet et les Traits en PHP 5.4

  • 3. (mauvaise) définition scolaire de l'objet • Un objet est une représentation concrète d'un concept abstrait
  • 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. La signature /** * description de la méthode * * @access public * @param integer $nombre * @return string */ public function example($nombre) { return "une chaîne"; }
  • 6. L'interface • Permet de s'assurer que les objets manipulés fonctionnent de la même manière => Contrat Public fonction utilise(interfaceStylo $stylo) { }
  • 7. La Php Standard Library Class CountMe implements Countable { Public fonction count() { Return 5; • Ou SPL } • Permet d'ajouter des fonctionnalités à des objets } $object = new CountMe; • Exemple : l'interface countable echo sizeof($object); // 5
  • 9. Pas une représentation concrète • On n'a jamais vu un "lanceur de requête Sql" dans la vraie vie
  • 11. Un objet est un comportement • Un objet est un comportement vis à vis de données • L'agrégat des comportements constitue une application
  • 12. L'héritage • Spécialisation d'un comportement • Une classe fille peut réutiliser ou spécialiser le comportement de sa classe mère • Pas d'héritage multiple en PHP
  • 13. L'héritage échoue Pour 2 raisons
  • 14. 1/ spécialiser n'est pas décliner • Souvent on ne spécialise pas, on décline • C'est infini !
  • 15. 2/ l'héritage "outil" • L'héritage ne doit pas permettre de donner des outils Class Example extends Singleton {} => ça ne doit pas exister !!
  • 16. Le couplage applicatif (petit détour)
  • 17. Code spagethi • Dépendances fortes entre les composants • Tout est entremêlé • Maintenabilité faible
  • 18. le couplage applicatif • Principe SOLID • Single Responsability • Open / closes • Liskov substitution Couplage faible • Interface segregation • Dépendency inversion
  • 19. Horizontalité vs Verticalité • Un modèle vertical (type héritage mal conçu) n'est pas maintenable • Penser horizontal : • Pattern Strategy • Injection de dépendance
  • 20. Les Traits (pas trop tôt)
  • 21. Blocs de comportement • Réutilisables • Modèle orienté collaboration Class Example { Use Trait1, Trait2; }
  • 22. À l'origine : les mixins • Composants liés à la réutilisation plutôt qu'à l'instanciation • Sont mélangés au code (mixed-in) • Injectés dans le code au moment de l'héritage • Conflits entre les mixins
  • 23. Les Traits • Réutilisation de fonctionnalités au niveau des classes • L'ensemble des méthodes d'un Trait constituent son comportement • Sans État
  • 24. Gestion des conflits • Pas de priorité implicite Class Example { Use Trait1, Trait2 { Trait2::myMethod as m; • Résolution explicite Trait1::any insteadof Trait2 des conflits } }
  • 25. Traits composites • Un Trait peut être composé d'autres Traits • On parle alors de Traits composites
  • 26. Trait Singleton { /**     /**      * Constructor      * Prevents cloning      */      * @throws Exception     protected function __construct() {}      */      /**     public function __clone() {      * Get singleton instance         throw new Exception('Cloning of this object isn't      * @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. 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 invalid context
  • 28. Et c'est pas plus lent 1150 1145 1140 1135 1130 heritage 1 trait 4 traits
  • 30. Sur le net RFC des traits : https://wiki.php.net/rfc/horizontalreuse Recherches d'Alexandre Bergel : http://bergel.eu