SlideShare a Scribd company logo
1 of 30
Download to read offline
Objets, patterns et génie logiciel
 en PHP




13/07/11     Objets et patterns en PHP   1
Qui suis-je ?
           Julien PAULI ; jpauli@php.net
             Architecte système et logiciel


             Expert spécialiste plateforme LAMP (PHP)

             Contributeur open source

             Consultant

             Co-Auteur (Eyrolles)                          https://github.com/jpauli



                                                           @julienpauli

13/07/11                       Objets et patterns en PHP                          2
Voyons voir ...
           Développement objet PHP
             Ou en est-on ?
             Historique PHP
             Différence avec d'autres langages


           Patterns et génie logiciel
             Rappels sur les principes SOLID
             Rappels sur les patterns


           Objets et patterns en PHP
             Modèle objet de PHP détaillé
             Quelques patterns en PHP

13/07/11                      Objets et patterns en PHP   3
PHP, rappelez moi ce que c'est ?
       Langage web interprété, crée en ~1998
           Langage procédural
           Syntaxe Inspirée de C
           Possède un modèle objet, inspiré de Java
           Ecrit en C (~800.000 lignes), Machine virtuelle
           Extensible
           Performant
           Simple et efficace
           Massivement déployé
            ▪ Y compris chez les "gros"
                ‐ Facebook
                ‐ Yahoo!


13/07/11                        Objets et patterns en PHP    4
PHP où en est-on ?
           2009 : PHP 5.3
             Enrichissement du modèle objet (namespaces)
             Performances du moteur accrues (~+15%)
             Meilleure gestion de la mémoire
             Fonctions anonymes
             Prévention de l'utilisation de fonctions dépréciées
             Pilote MySQL natif (mysqlnd : licence PHP)
             FastCGI refondu (PHP FPM)




13/07/11                       Objets et patterns en PHP           5
PHP où va-t-on ?
           ~11/2010 : PHP 5.4
             Traits (pseudo héritage horizontal)
             Nettoyage d'anciennes fonctionnalités dépréciées
             Serveur web intégré
             Support dtrace
             Syntaxe améliorée




13/07/11                       Objets et patterns en PHP        6
PHP et OOP
           Pas un langage orienté objet
             Mais modèle objet présent
             Proche de celui de Java (pas d'héritage multiple)


           Quelques objets/interfaces natif
             Iterator / ArrayAccess / Traversable / JsonSerializable
             DateTime / DateTimeZone/ PDO / SimpleXml / Dom


           Des frameworks full OO
             ZendFramework
             Symfony
             CodeIgniter
             ...
13/07/11                       Objets et patterns en PHP               7
OOP PHP face à OOP Java
           Pas de typage des retours de méthodes
           Pas de déclaration des exceptions lancées
           Pas de typage fort des attributs
           Pas de finally (exceptions)
           Pas de typage dynamique (duck typing)
           Pas de visibilité "package"
           …

           PHP n'est pas Java
           Il s'inspire globalement de son modèle objet



13/07/11                        Objets et patterns en PHP   8
Modèle objet de PHP
           namespaces
           classes abstraites
           interfaces
           Héritage simple (non multiple)
           Pas de persistence
             Sérialization

       namespace JPDOResult;

       abstract class SavableObjects extends Objects implements SomeIface
       {
         public function save() { }
         abstract protected function load() { }
       }

13/07/11                        Objets et patterns en PHP                   9
Principes SOLID
           Règles régissant la conception orientée Objet

           Single Responsability

           Open/Close Principle


           Liskov substitution Principle

           Interface Seggregation

           Dependency Injection



13/07/11                      Objets et patterns en PHP    10
PHP et SOLID
      Liskov Subsitution
           Un objet utilisant A doit pouvoir utiliser un fils de A sans s'en rendre
           compte
           L'héritage doit être strict, le type conservé
                           class A
                           {
                              public function foo($b, $c) { }
                           }

                          class B extends A
                          {
                             public function foo($b, $c, $d) { }
                          }

  Strict standards: Declaration of B::foo() should be compatible with that of A::foo()
13/07/11                      Objets et patterns en PHP                                  11
PHP et SOLID
           Dependency Injection
             Un objet A ayant besoin de B ne doit pas chercher B lui-même, il
             doit le lui être injecté (agrégation)
                          class A
                          {
                             protected $b;

                              public function setB(B $b)
                              {
                                $this->b = $b
                              }

                              public function getB()
                              {
                                return $this->b;
                              }
                          }
13/07/11                      Objets et patterns en PHP                     12
PHP et SOLID
           Interface Seggregation
             Un objet A ne doit pas utiliser un objet B directement, mais une
             interface Ib de B

       class A                                        interface Ib
       {                                              {
          public function setB(Ib $b) { }                function someMethod() { }
       }                                              }


                           class B implements Ib
                           {
                              public function someMethod() { }
                           }



13/07/11                      Objets et patterns en PHP                              13
PHP Exceptions
           try { throw } catch () { }
           Pas de finally
           Pas d'interface Throwable

  try{
       $result = $db->getResult();
  }catch (BadArgumentException $e){
  // une erreur dans les arguments d'une fonction
  }catch (DatabaseException $e){
  // une erreur de base de données
  }catch (Exception $e){
  echo 'erreur !' . $e->getMessage();
  }



13/07/11                     Objets et patterns en PHP   14
PHP plein d'exceptions




13/07/11       Objets et patterns en PHP   15
Finalement, on a de quoi utiliser des patterns !
           Interfaces et classes abstraites
           Héritage
           Namespaces
           Visibilité, encapsulation

           PHP est tout à fait capable de supporter la plupart des patterns
           existants grâce à la fléxibilité de son modèle objet.

           PHP reste un langage pour le web
             Inutile de le "polluer" de fonctionnalités non adaptées à cet
             environnement



13/07/11                       Objets et patterns en PHP                      16
Design Patterns ?
           Solutions OO
             Remarquables
             Implémentant SOLID
             Répondent à des problèmes récurrents
             Modélisables avec UML
             Très connues des archi. logiciels
             Organisées par familles
              ▪ Créateurs, structuraux, comportementaux
             Souvent passer de l'un à l'autre c'est changer quelques lignes de
             code

             Permettent d'assurer la pérénité dans le code dans le temps


13/07/11                       Objets et patterns en PHP                         17
Singleton
           Attention à son utilisation anti-pattern...


  class Singleton
  {
     protected static $_instance;

      protected function __construct() { }        assert(Singleton::getInstance() ===
      protected function __clone() { }                   Singleton::getInstance());
      public static function getInstance() {
        if (!self::$_instance) {
            self::$_instance = new self;
        }
        return self::$_instance;
  }


13/07/11                       Objets et patterns en PHP                           18
Observateur / Sujet
           Un pattern très utile, pouvant être implémenté de plusieurs
           manières différentes




13/07/11                     Objets et patterns en PHP                   19
Observateur / Sujet codé
class SomeSubject implements Subject
{
   protected $observers;
   protected function __construct() {
     $this->observers = new SplObjectStorage();       class SomeObserver
   }                                                  implements Observer
   protected function attach(Observer $o) {           {
     $this->observers->attach($o);                       public function
   }                                                  update(Subject $s) {
   public function detach(Observer $o) {                   // let's do something here
     $this->observers->detach($o);                       }
   }                                                  }
   public function doSomething() {
     foreach ($this->observers as $o) {
        $o->update($this);
     }
   }
}
13/07/11                  Objets et patterns en PHP                               20
Observateur / Sujet concrêt
           Un pattern très utile, pouvant être implémenté de plusieurs
           manières différentes




13/07/11                     Objets et patterns en PHP                   21
Décorateur
           Permet de résoudre la problématique de l'héritage multiple
                                                       class Stylo {
                                                          public function ecrire($what) {
                                                            return "Le stylo écrit $what";
                                                          }
                                                       }
class StyloGras extends Stylo {
   public function ecrire($what) {
     return "<b>" . parent::ecrire($what) . "</b>";
   }
}

                                       class StyloItalic extends Stylo {
                                          public function ecrire($what) {
                                            return "<i>" . parent::ecrire($what) ."</i>";
                                          }
                                       }
13/07/11                      Objets et patterns en PHP                                 22
Décorateur
           Implémentation PHP
                              interface Ecrivant {
                                 public function ecrire($what);
                              }

                  abstract class Decorator implements Ecrivant {
                    protected $_decorator;
                    public function __construct(Ecrivant $s) {
                       $this->_decorator = $s;
                    }
                  }
             class DecoratorItalic extends Decorator {
                public function ecrire($what) {
                  return "<i>" . $this->_decorator->ecrire($what) . "</i>";
                }
             }
13/07/11                        Objets et patterns en PHP                     23
Décorateur
           Passage d'un modèle vertical (héritage) à un modèle horizontal
           (agrégation)


            $obj = new DecoratorItalic(new DecoratorBold(new Stylo));
            echo $obj->ecrire("Voyez vous cela ?");




13/07/11                     Objets et patterns en PHP                      24
Itérateur
           Déjà présent dans PHP par défaut

           Redéfinit l'opérateur foreach
           Définit la manière dont PHP parcourt un objet
             $obj->rewind();
             while ($obj->valid()) {
               printf("%s : %s n", $obj->key(), $obj->current());
               $obj->next();
             }



             foreach ($obj as $k => $v) {
                printf("%s : %s n", $k, $v);
             }

13/07/11                        Objets et patterns en PHP            25
Encore des patterns !
           Proxy
           Poids plume
           Pont
           Adaptateur
           MVC
           Visiteur
           ...




13/07/11                 Objets et patterns en PHP   26
Où trouver des patterns ?
           Sur mon GitHub :)
             https://github.com/jpauli
             Ils sont là à titre éducatif


           Concrètement :
             Dans les frameworks hautement orientés objets
              ▪ ZendFramework
              ▪ Symfony



           On les trouve aussi dans beaucoup d'autres projets PHP
             Pour peu qu'ils soient un minimum réfléchis et pros



13/07/11                        Objets et patterns en PHP           27
Se documenter sur les patterns
           Les langages OO sont mis en avant
             C++ , Java
           Les exemples en PHP sont donc rares

           Il faut comprendre les langages OO
           pour faire du bon design applicatif en
           PHP




13/07/11                     Objets et patterns en PHP   28
Se documenter sur les patterns en PHP
           Lecture et analyse de codes existants
             https://github.com/symfony/symfony
             https://github.com/zendframework/zf2
             https://github.com/manuelpichler/phpmd


           Utilisation d'autres langages OO
             Java
             C++
             Ruby&Rails




13/07/11                     Objets et patterns en PHP   29
Merci !
           Questions ?




13/07/11                 Objets et patterns en PHP   30

More Related Content

What's hot

Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++Fabio Hernandez
 
Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++Fabio Hernandez
 
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++Fabio Hernandez
 
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++Fabio Hernandez
 
0 poo cpp
0 poo cpp0 poo cpp
0 poo cppenrif
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Aziz Darouichi
 
Programmation orientée objet avancée
Programmation orientée objet avancéeProgrammation orientée objet avancée
Programmation orientée objet avancéeMahfoud EL HOUDAIGUI
 
Partie 10: Classes Génériques — Programmation orientée objet en C++
Partie 10: Classes Génériques — Programmation orientée objet en C++Partie 10: Classes Génériques — Programmation orientée objet en C++
Partie 10: Classes Génériques — Programmation orientée objet en C++Fabio Hernandez
 
Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++Fabio Hernandez
 
Partie 5: Mémoire Dynamique — Programmation orientée objet en C++
Partie 5: Mémoire Dynamique — Programmation orientée objet en C++Partie 5: Mémoire Dynamique — Programmation orientée objet en C++
Partie 5: Mémoire Dynamique — Programmation orientée objet en C++Fabio Hernandez
 
Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++Fabio Hernandez
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Aziz Darouichi
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Aziz Darouichi
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfacesAziz Darouichi
 
Héritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLIHéritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLIJihenHedhli1
 
Eléments syntaxiques du langage java-Jihen HEDHLI
Eléments syntaxiques du langage java-Jihen HEDHLIEléments syntaxiques du langage java-Jihen HEDHLI
Eléments syntaxiques du langage java-Jihen HEDHLIJihenHedhli1
 
Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux javaInes Ouaz
 

What's hot (20)

Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++
 
Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++
 
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
 
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
 
0 poo cpp
0 poo cpp0 poo cpp
0 poo cpp
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
 
Programmation orientée objet avancée
Programmation orientée objet avancéeProgrammation orientée objet avancée
Programmation orientée objet avancée
 
Partie 10: Classes Génériques — Programmation orientée objet en C++
Partie 10: Classes Génériques — Programmation orientée objet en C++Partie 10: Classes Génériques — Programmation orientée objet en C++
Partie 10: Classes Génériques — Programmation orientée objet en C++
 
Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++
 
Partie 5: Mémoire Dynamique — Programmation orientée objet en C++
Partie 5: Mémoire Dynamique — Programmation orientée objet en C++Partie 5: Mémoire Dynamique — Programmation orientée objet en C++
Partie 5: Mémoire Dynamique — Programmation orientée objet en C++
 
Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Polymorphisme
PolymorphismePolymorphisme
Polymorphisme
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfaces
 
Héritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLIHéritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLI
 
Eléments syntaxiques du langage java-Jihen HEDHLI
Eléments syntaxiques du langage java-Jihen HEDHLIEléments syntaxiques du langage java-Jihen HEDHLI
Eléments syntaxiques du langage java-Jihen HEDHLI
 
Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux java
 

Viewers also liked

Presentation BTS Assurance
Presentation BTS AssurancePresentation BTS Assurance
Presentation BTS Assurancejulien.veron1
 
Presentation Sur L'assurance
Presentation Sur L'assurancePresentation Sur L'assurance
Presentation Sur L'assuranceTimaL
 
De la Securité Informatique a l’Identite Numerique 2.0
De la Securité Informatique a l’Identite Numerique 2.0De la Securité Informatique a l’Identite Numerique 2.0
De la Securité Informatique a l’Identite Numerique 2.0Eric Herschkorn
 
Slide l'assurance la gestion des produit assurance
Slide l'assurance la gestion des produit assuranceSlide l'assurance la gestion des produit assurance
Slide l'assurance la gestion des produit assuranceMhaidi Marouane
 
Présentation assurances
Présentation assurancesPrésentation assurances
Présentation assurancesSamuelFontenit
 
Audit de sécurité informatique
Audit de sécurité informatiqueAudit de sécurité informatique
Audit de sécurité informatiqueMohamed Ali Hadhri
 
Genie logiciel eseo-v1.1-1spp
Genie logiciel eseo-v1.1-1sppGenie logiciel eseo-v1.1-1spp
Genie logiciel eseo-v1.1-1sppLaurent Guérin
 
Marketing des compagnies d'assurance
Marketing des compagnies d'assuranceMarketing des compagnies d'assurance
Marketing des compagnies d'assuranceBadr Hakam
 
Presentation powerpoint des métiers de l'assurance
Presentation powerpoint des métiers de l'assurancePresentation powerpoint des métiers de l'assurance
Presentation powerpoint des métiers de l'assuranceCaptaintonip
 
IntroduccióN a las Comunicaciones de Marketing
IntroduccióN a las Comunicaciones de MarketingIntroduccióN a las Comunicaciones de Marketing
IntroduccióN a las Comunicaciones de MarketingRodrigo Cisternas
 
C:\fakepath\aboga
C:\fakepath\abogaC:\fakepath\aboga
C:\fakepath\abogareyna edith
 
Les risques environnementaux et sociaux de la construction d’une ville durab...
Les risques environnementaux et sociaux de la  construction d’une ville durab...Les risques environnementaux et sociaux de la  construction d’une ville durab...
Les risques environnementaux et sociaux de la construction d’une ville durab...CITIZEN ACT
 
Trabajo En Equipo
Trabajo En EquipoTrabajo En Equipo
Trabajo En Equipoguest537f2b
 
Les bonnes pratiques PLM chez BOLLHOFF OTALU
Les bonnes pratiques PLM chez BOLLHOFF OTALULes bonnes pratiques PLM chez BOLLHOFF OTALU
Les bonnes pratiques PLM chez BOLLHOFF OTALUEntreprises & Numérique
 
A la Recherche de la Terre Promise
A la Recherche de la Terre PromiseA la Recherche de la Terre Promise
A la Recherche de la Terre PromiseEytin Eytiwon
 
Mémoire - Politique de veille Internet pour groupe Industriel
Mémoire  - Politique de veille Internet pour groupe IndustrielMémoire  - Politique de veille Internet pour groupe Industriel
Mémoire - Politique de veille Internet pour groupe IndustrielJulie Depoisier
 
Le Community Manager est-il l'enfant du web 2.0 ?
Le Community Manager est-il l'enfant du web 2.0 ?  Le Community Manager est-il l'enfant du web 2.0 ?
Le Community Manager est-il l'enfant du web 2.0 ? Ronan Boussicaud
 

Viewers also liked (20)

Presentation BTS Assurance
Presentation BTS AssurancePresentation BTS Assurance
Presentation BTS Assurance
 
Presentation Sur L'assurance
Presentation Sur L'assurancePresentation Sur L'assurance
Presentation Sur L'assurance
 
De la Securité Informatique a l’Identite Numerique 2.0
De la Securité Informatique a l’Identite Numerique 2.0De la Securité Informatique a l’Identite Numerique 2.0
De la Securité Informatique a l’Identite Numerique 2.0
 
Slide l'assurance la gestion des produit assurance
Slide l'assurance la gestion des produit assuranceSlide l'assurance la gestion des produit assurance
Slide l'assurance la gestion des produit assurance
 
Présentation assurances
Présentation assurancesPrésentation assurances
Présentation assurances
 
Audit de sécurité informatique
Audit de sécurité informatiqueAudit de sécurité informatique
Audit de sécurité informatique
 
Genie logiciel eseo-v1.1-1spp
Genie logiciel eseo-v1.1-1sppGenie logiciel eseo-v1.1-1spp
Genie logiciel eseo-v1.1-1spp
 
Marketing des compagnies d'assurance
Marketing des compagnies d'assuranceMarketing des compagnies d'assurance
Marketing des compagnies d'assurance
 
Presentation powerpoint des métiers de l'assurance
Presentation powerpoint des métiers de l'assurancePresentation powerpoint des métiers de l'assurance
Presentation powerpoint des métiers de l'assurance
 
IntroduccióN a las Comunicaciones de Marketing
IntroduccióN a las Comunicaciones de MarketingIntroduccióN a las Comunicaciones de Marketing
IntroduccióN a las Comunicaciones de Marketing
 
C:\fakepath\aboga
C:\fakepath\abogaC:\fakepath\aboga
C:\fakepath\aboga
 
Les risques environnementaux et sociaux de la construction d’une ville durab...
Les risques environnementaux et sociaux de la  construction d’une ville durab...Les risques environnementaux et sociaux de la  construction d’une ville durab...
Les risques environnementaux et sociaux de la construction d’une ville durab...
 
Trabajo En Equipo
Trabajo En EquipoTrabajo En Equipo
Trabajo En Equipo
 
Rapport AFEP-MEDEF 2011
Rapport AFEP-MEDEF 2011 Rapport AFEP-MEDEF 2011
Rapport AFEP-MEDEF 2011
 
Bluetooth Marketing
Bluetooth MarketingBluetooth Marketing
Bluetooth Marketing
 
Les bonnes pratiques PLM chez BOLLHOFF OTALU
Les bonnes pratiques PLM chez BOLLHOFF OTALULes bonnes pratiques PLM chez BOLLHOFF OTALU
Les bonnes pratiques PLM chez BOLLHOFF OTALU
 
A la Recherche de la Terre Promise
A la Recherche de la Terre PromiseA la Recherche de la Terre Promise
A la Recherche de la Terre Promise
 
Présentation - Métropolis - 2011
Présentation - Métropolis - 2011Présentation - Métropolis - 2011
Présentation - Métropolis - 2011
 
Mémoire - Politique de veille Internet pour groupe Industriel
Mémoire  - Politique de veille Internet pour groupe IndustrielMémoire  - Politique de veille Internet pour groupe Industriel
Mémoire - Politique de veille Internet pour groupe Industriel
 
Le Community Manager est-il l'enfant du web 2.0 ?
Le Community Manager est-il l'enfant du web 2.0 ?  Le Community Manager est-il l'enfant du web 2.0 ?
Le Community Manager est-il l'enfant du web 2.0 ?
 

Similar to Objets patterns et genie logiciel , par Julien Pauli

Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5julien pauli
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPkemenaran
 
Presentation hibernate nfe103
Presentation hibernate nfe103Presentation hibernate nfe103
Presentation hibernate nfe103MRamo2s
 
POO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdfPOO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdfLarbaSAWADOGO2
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afupJulien Vinber
 
Introduction à la Programmation Orientée Objet- Jihen HEDHLI
Introduction à la Programmation Orientée Objet- Jihen HEDHLIIntroduction à la Programmation Orientée Objet- Jihen HEDHLI
Introduction à la Programmation Orientée Objet- Jihen HEDHLIJihenHedhli1
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Engineor
 

Similar to Objets patterns et genie logiciel , par Julien Pauli (20)

Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Polymorphisme
PolymorphismePolymorphisme
Polymorphisme
 
PHP5 et Zend Framework
PHP5 et Zend FrameworkPHP5 et Zend Framework
PHP5 et Zend Framework
 
cours6.pdf
cours6.pdfcours6.pdf
cours6.pdf
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
 
Java RMI
Java RMIJava RMI
Java RMI
 
python
pythonpython
python
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
Jpa(1)
Jpa(1)Jpa(1)
Jpa(1)
 
Presentation hibernate nfe103
Presentation hibernate nfe103Presentation hibernate nfe103
Presentation hibernate nfe103
 
POO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdfPOO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdf
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afup
 
cours1.ppt
cours1.pptcours1.ppt
cours1.ppt
 
cours1.ppt
cours1.pptcours1.ppt
cours1.ppt
 
cours2.ppt
cours2.pptcours2.ppt
cours2.ppt
 
Javavs net
Javavs netJavavs net
Javavs net
 
Introduction à la Programmation Orientée Objet- Jihen HEDHLI
Introduction à la Programmation Orientée Objet- Jihen HEDHLIIntroduction à la Programmation Orientée Objet- Jihen HEDHLI
Introduction à la Programmation Orientée Objet- Jihen HEDHLI
 
PHP_intro.pdf
PHP_intro.pdfPHP_intro.pdf
PHP_intro.pdf
 
4711538.pptx
4711538.pptx4711538.pptx
4711538.pptx
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
 

More from ALTER WAY

Drupagora 2019 : Drupal, accessibilité et RGAA
Drupagora 2019 : Drupal, accessibilité et RGAADrupagora 2019 : Drupal, accessibilité et RGAA
Drupagora 2019 : Drupal, accessibilité et RGAAALTER WAY
 
#sharingLille : L'Open Source pour une société numérique ouverte, transparent...
#sharingLille : L'Open Source pour une société numérique ouverte, transparent...#sharingLille : L'Open Source pour une société numérique ouverte, transparent...
#sharingLille : L'Open Source pour une société numérique ouverte, transparent...ALTER WAY
 
Flyer promotions Alter Way Formation Avril Mai 2015
Flyer promotions Alter Way Formation Avril Mai 2015Flyer promotions Alter Way Formation Avril Mai 2015
Flyer promotions Alter Way Formation Avril Mai 2015ALTER WAY
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ? Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ? ALTER WAY
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?ALTER WAY
 
Open World Forum 2014 : From ES6 to Javascript 2.0. What use today ? par Jon...
Open World Forum 2014  : From ES6 to Javascript 2.0. What use today ? par Jon...Open World Forum 2014  : From ES6 to Javascript 2.0. What use today ? par Jon...
Open World Forum 2014 : From ES6 to Javascript 2.0. What use today ? par Jon...ALTER WAY
 
Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent
Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent
Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent ALTER WAY
 
Séminaire Big Data Alter Way - Elasticsearch - octobre 2014
Séminaire Big Data Alter Way - Elasticsearch - octobre 2014Séminaire Big Data Alter Way - Elasticsearch - octobre 2014
Séminaire Big Data Alter Way - Elasticsearch - octobre 2014ALTER WAY
 
Meetup Drupal Paris : Connexion Drupal et Elasticsearch
Meetup Drupal Paris : Connexion Drupal et Elasticsearch Meetup Drupal Paris : Connexion Drupal et Elasticsearch
Meetup Drupal Paris : Connexion Drupal et Elasticsearch ALTER WAY
 
Solutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSA
Solutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSASolutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSA
Solutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSAALTER WAY
 
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...ALTER WAY
 
Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF
Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF
Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF ALTER WAY
 
Elasticsearch : petit déjeuner du 13 mars 2014
Elasticsearch : petit déjeuner du 13 mars 2014Elasticsearch : petit déjeuner du 13 mars 2014
Elasticsearch : petit déjeuner du 13 mars 2014ALTER WAY
 
Alter way-wordcamp-paris-2014
Alter way-wordcamp-paris-2014Alter way-wordcamp-paris-2014
Alter way-wordcamp-paris-2014ALTER WAY
 
Présentation Drupal - Global Training Days
Présentation Drupal - Global Training DaysPrésentation Drupal - Global Training Days
Présentation Drupal - Global Training DaysALTER WAY
 
OpenStack havana tour d'horizon
OpenStack havana tour d'horizonOpenStack havana tour d'horizon
OpenStack havana tour d'horizonALTER WAY
 
H2O, le Cloud par Alter Way
H2O, le Cloud par Alter WayH2O, le Cloud par Alter Way
H2O, le Cloud par Alter WayALTER WAY
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php ALTER WAY
 
Reprise sur incident , par Jean Marc Fontaine
Reprise sur incident , par Jean Marc FontaineReprise sur incident , par Jean Marc Fontaine
Reprise sur incident , par Jean Marc FontaineALTER WAY
 
Organiser efficacement son depot de code par Jean Marc Fontaine
Organiser efficacement son depot de code par Jean Marc FontaineOrganiser efficacement son depot de code par Jean Marc Fontaine
Organiser efficacement son depot de code par Jean Marc FontaineALTER WAY
 

More from ALTER WAY (20)

Drupagora 2019 : Drupal, accessibilité et RGAA
Drupagora 2019 : Drupal, accessibilité et RGAADrupagora 2019 : Drupal, accessibilité et RGAA
Drupagora 2019 : Drupal, accessibilité et RGAA
 
#sharingLille : L'Open Source pour une société numérique ouverte, transparent...
#sharingLille : L'Open Source pour une société numérique ouverte, transparent...#sharingLille : L'Open Source pour une société numérique ouverte, transparent...
#sharingLille : L'Open Source pour une société numérique ouverte, transparent...
 
Flyer promotions Alter Way Formation Avril Mai 2015
Flyer promotions Alter Way Formation Avril Mai 2015Flyer promotions Alter Way Formation Avril Mai 2015
Flyer promotions Alter Way Formation Avril Mai 2015
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ? Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
 
Open World Forum 2014 : From ES6 to Javascript 2.0. What use today ? par Jon...
Open World Forum 2014  : From ES6 to Javascript 2.0. What use today ? par Jon...Open World Forum 2014  : From ES6 to Javascript 2.0. What use today ? par Jon...
Open World Forum 2014 : From ES6 to Javascript 2.0. What use today ? par Jon...
 
Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent
Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent
Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent
 
Séminaire Big Data Alter Way - Elasticsearch - octobre 2014
Séminaire Big Data Alter Way - Elasticsearch - octobre 2014Séminaire Big Data Alter Way - Elasticsearch - octobre 2014
Séminaire Big Data Alter Way - Elasticsearch - octobre 2014
 
Meetup Drupal Paris : Connexion Drupal et Elasticsearch
Meetup Drupal Paris : Connexion Drupal et Elasticsearch Meetup Drupal Paris : Connexion Drupal et Elasticsearch
Meetup Drupal Paris : Connexion Drupal et Elasticsearch
 
Solutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSA
Solutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSASolutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSA
Solutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSA
 
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
 
Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF
Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF
Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF
 
Elasticsearch : petit déjeuner du 13 mars 2014
Elasticsearch : petit déjeuner du 13 mars 2014Elasticsearch : petit déjeuner du 13 mars 2014
Elasticsearch : petit déjeuner du 13 mars 2014
 
Alter way-wordcamp-paris-2014
Alter way-wordcamp-paris-2014Alter way-wordcamp-paris-2014
Alter way-wordcamp-paris-2014
 
Présentation Drupal - Global Training Days
Présentation Drupal - Global Training DaysPrésentation Drupal - Global Training Days
Présentation Drupal - Global Training Days
 
OpenStack havana tour d'horizon
OpenStack havana tour d'horizonOpenStack havana tour d'horizon
OpenStack havana tour d'horizon
 
H2O, le Cloud par Alter Way
H2O, le Cloud par Alter WayH2O, le Cloud par Alter Way
H2O, le Cloud par Alter Way
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
 
Reprise sur incident , par Jean Marc Fontaine
Reprise sur incident , par Jean Marc FontaineReprise sur incident , par Jean Marc Fontaine
Reprise sur incident , par Jean Marc Fontaine
 
Organiser efficacement son depot de code par Jean Marc Fontaine
Organiser efficacement son depot de code par Jean Marc FontaineOrganiser efficacement son depot de code par Jean Marc Fontaine
Organiser efficacement son depot de code par Jean Marc Fontaine
 

Objets patterns et genie logiciel , par Julien Pauli

  • 1. Objets, patterns et génie logiciel en PHP 13/07/11 Objets et patterns en PHP 1
  • 2. Qui suis-je ? Julien PAULI ; jpauli@php.net Architecte système et logiciel Expert spécialiste plateforme LAMP (PHP) Contributeur open source Consultant Co-Auteur (Eyrolles) https://github.com/jpauli @julienpauli 13/07/11 Objets et patterns en PHP 2
  • 3. Voyons voir ... Développement objet PHP Ou en est-on ? Historique PHP Différence avec d'autres langages Patterns et génie logiciel Rappels sur les principes SOLID Rappels sur les patterns Objets et patterns en PHP Modèle objet de PHP détaillé Quelques patterns en PHP 13/07/11 Objets et patterns en PHP 3
  • 4. PHP, rappelez moi ce que c'est ? Langage web interprété, crée en ~1998 Langage procédural Syntaxe Inspirée de C Possède un modèle objet, inspiré de Java Ecrit en C (~800.000 lignes), Machine virtuelle Extensible Performant Simple et efficace Massivement déployé ▪ Y compris chez les "gros" ‐ Facebook ‐ Yahoo! 13/07/11 Objets et patterns en PHP 4
  • 5. PHP où en est-on ? 2009 : PHP 5.3 Enrichissement du modèle objet (namespaces) Performances du moteur accrues (~+15%) Meilleure gestion de la mémoire Fonctions anonymes Prévention de l'utilisation de fonctions dépréciées Pilote MySQL natif (mysqlnd : licence PHP) FastCGI refondu (PHP FPM) 13/07/11 Objets et patterns en PHP 5
  • 6. PHP où va-t-on ? ~11/2010 : PHP 5.4 Traits (pseudo héritage horizontal) Nettoyage d'anciennes fonctionnalités dépréciées Serveur web intégré Support dtrace Syntaxe améliorée 13/07/11 Objets et patterns en PHP 6
  • 7. PHP et OOP Pas un langage orienté objet Mais modèle objet présent Proche de celui de Java (pas d'héritage multiple) Quelques objets/interfaces natif Iterator / ArrayAccess / Traversable / JsonSerializable DateTime / DateTimeZone/ PDO / SimpleXml / Dom Des frameworks full OO ZendFramework Symfony CodeIgniter ... 13/07/11 Objets et patterns en PHP 7
  • 8. OOP PHP face à OOP Java Pas de typage des retours de méthodes Pas de déclaration des exceptions lancées Pas de typage fort des attributs Pas de finally (exceptions) Pas de typage dynamique (duck typing) Pas de visibilité "package" … PHP n'est pas Java Il s'inspire globalement de son modèle objet 13/07/11 Objets et patterns en PHP 8
  • 9. Modèle objet de PHP namespaces classes abstraites interfaces Héritage simple (non multiple) Pas de persistence Sérialization namespace JPDOResult; abstract class SavableObjects extends Objects implements SomeIface { public function save() { } abstract protected function load() { } } 13/07/11 Objets et patterns en PHP 9
  • 10. Principes SOLID Règles régissant la conception orientée Objet Single Responsability Open/Close Principle Liskov substitution Principle Interface Seggregation Dependency Injection 13/07/11 Objets et patterns en PHP 10
  • 11. PHP et SOLID Liskov Subsitution Un objet utilisant A doit pouvoir utiliser un fils de A sans s'en rendre compte L'héritage doit être strict, le type conservé class A { public function foo($b, $c) { } } class B extends A { public function foo($b, $c, $d) { } } Strict standards: Declaration of B::foo() should be compatible with that of A::foo() 13/07/11 Objets et patterns en PHP 11
  • 12. PHP et SOLID Dependency Injection Un objet A ayant besoin de B ne doit pas chercher B lui-même, il doit le lui être injecté (agrégation) class A { protected $b; public function setB(B $b) { $this->b = $b } public function getB() { return $this->b; } } 13/07/11 Objets et patterns en PHP 12
  • 13. PHP et SOLID Interface Seggregation Un objet A ne doit pas utiliser un objet B directement, mais une interface Ib de B class A interface Ib { { public function setB(Ib $b) { } function someMethod() { } } } class B implements Ib { public function someMethod() { } } 13/07/11 Objets et patterns en PHP 13
  • 14. PHP Exceptions try { throw } catch () { } Pas de finally Pas d'interface Throwable try{ $result = $db->getResult(); }catch (BadArgumentException $e){ // une erreur dans les arguments d'une fonction }catch (DatabaseException $e){ // une erreur de base de données }catch (Exception $e){ echo 'erreur !' . $e->getMessage(); } 13/07/11 Objets et patterns en PHP 14
  • 15. PHP plein d'exceptions 13/07/11 Objets et patterns en PHP 15
  • 16. Finalement, on a de quoi utiliser des patterns ! Interfaces et classes abstraites Héritage Namespaces Visibilité, encapsulation PHP est tout à fait capable de supporter la plupart des patterns existants grâce à la fléxibilité de son modèle objet. PHP reste un langage pour le web Inutile de le "polluer" de fonctionnalités non adaptées à cet environnement 13/07/11 Objets et patterns en PHP 16
  • 17. Design Patterns ? Solutions OO Remarquables Implémentant SOLID Répondent à des problèmes récurrents Modélisables avec UML Très connues des archi. logiciels Organisées par familles ▪ Créateurs, structuraux, comportementaux Souvent passer de l'un à l'autre c'est changer quelques lignes de code Permettent d'assurer la pérénité dans le code dans le temps 13/07/11 Objets et patterns en PHP 17
  • 18. Singleton Attention à son utilisation anti-pattern... class Singleton { protected static $_instance; protected function __construct() { } assert(Singleton::getInstance() === protected function __clone() { } Singleton::getInstance()); public static function getInstance() { if (!self::$_instance) { self::$_instance = new self; } return self::$_instance; } 13/07/11 Objets et patterns en PHP 18
  • 19. Observateur / Sujet Un pattern très utile, pouvant être implémenté de plusieurs manières différentes 13/07/11 Objets et patterns en PHP 19
  • 20. Observateur / Sujet codé class SomeSubject implements Subject { protected $observers; protected function __construct() { $this->observers = new SplObjectStorage(); class SomeObserver } implements Observer protected function attach(Observer $o) { { $this->observers->attach($o); public function } update(Subject $s) { public function detach(Observer $o) { // let's do something here $this->observers->detach($o); } } } public function doSomething() { foreach ($this->observers as $o) { $o->update($this); } } } 13/07/11 Objets et patterns en PHP 20
  • 21. Observateur / Sujet concrêt Un pattern très utile, pouvant être implémenté de plusieurs manières différentes 13/07/11 Objets et patterns en PHP 21
  • 22. Décorateur Permet de résoudre la problématique de l'héritage multiple class Stylo { public function ecrire($what) { return "Le stylo écrit $what"; } } class StyloGras extends Stylo { public function ecrire($what) { return "<b>" . parent::ecrire($what) . "</b>"; } } class StyloItalic extends Stylo { public function ecrire($what) { return "<i>" . parent::ecrire($what) ."</i>"; } } 13/07/11 Objets et patterns en PHP 22
  • 23. Décorateur Implémentation PHP interface Ecrivant { public function ecrire($what); } abstract class Decorator implements Ecrivant { protected $_decorator; public function __construct(Ecrivant $s) { $this->_decorator = $s; } } class DecoratorItalic extends Decorator { public function ecrire($what) { return "<i>" . $this->_decorator->ecrire($what) . "</i>"; } } 13/07/11 Objets et patterns en PHP 23
  • 24. Décorateur Passage d'un modèle vertical (héritage) à un modèle horizontal (agrégation) $obj = new DecoratorItalic(new DecoratorBold(new Stylo)); echo $obj->ecrire("Voyez vous cela ?"); 13/07/11 Objets et patterns en PHP 24
  • 25. Itérateur Déjà présent dans PHP par défaut Redéfinit l'opérateur foreach Définit la manière dont PHP parcourt un objet $obj->rewind(); while ($obj->valid()) { printf("%s : %s n", $obj->key(), $obj->current()); $obj->next(); } foreach ($obj as $k => $v) { printf("%s : %s n", $k, $v); } 13/07/11 Objets et patterns en PHP 25
  • 26. Encore des patterns ! Proxy Poids plume Pont Adaptateur MVC Visiteur ... 13/07/11 Objets et patterns en PHP 26
  • 27. Où trouver des patterns ? Sur mon GitHub :) https://github.com/jpauli Ils sont là à titre éducatif Concrètement : Dans les frameworks hautement orientés objets ▪ ZendFramework ▪ Symfony On les trouve aussi dans beaucoup d'autres projets PHP Pour peu qu'ils soient un minimum réfléchis et pros 13/07/11 Objets et patterns en PHP 27
  • 28. Se documenter sur les patterns Les langages OO sont mis en avant C++ , Java Les exemples en PHP sont donc rares Il faut comprendre les langages OO pour faire du bon design applicatif en PHP 13/07/11 Objets et patterns en PHP 28
  • 29. Se documenter sur les patterns en PHP Lecture et analyse de codes existants https://github.com/symfony/symfony https://github.com/zendframework/zf2 https://github.com/manuelpichler/phpmd Utilisation d'autres langages OO Java C++ Ruby&Rails 13/07/11 Objets et patterns en PHP 29
  • 30. Merci ! Questions ? 13/07/11 Objets et patterns en PHP 30