Objets, patterns et génie logiciel en PHP13/07/11     Objets et patterns en PHP   1
Qui suis-je ?           Julien PAULI ; jpauli@php.net             Architecte système et logiciel             Expert spécia...
Voyons voir ...           Développement objet PHP             Ou en est-on ?             Historique PHP             Différ...
PHP, rappelez moi ce que cest ?       Langage web interprété, crée en ~1998           Langage procédural           Syntaxe...
PHP où en est-on ?           2009 : PHP 5.3             Enrichissement du modèle objet (namespaces)             Performanc...
PHP où va-t-on ?           ~11/2010 : PHP 5.4             Traits (pseudo héritage horizontal)             Nettoyage dancie...
PHP et OOP           Pas un langage orienté objet             Mais modèle objet présent             Proche de celui de Jav...
OOP PHP face à OOP Java           Pas de typage des retours de méthodes           Pas de déclaration des exceptions lancée...
Modèle objet de PHP           namespaces           classes abstraites           interfaces           Héritage simple (non ...
Principes SOLID           Règles régissant la conception orientée Objet           Single Responsability           Open/Clo...
PHP et SOLID      Liskov Subsitution           Un objet utilisant A doit pouvoir utiliser un fils de A sans sen rendre    ...
PHP et SOLID           Dependency Injection             Un objet A ayant besoin de B ne doit pas chercher B lui-même, il  ...
PHP et SOLID           Interface Seggregation             Un objet A ne doit pas utiliser un objet B directement, mais une...
PHP Exceptions           try { throw } catch () { }           Pas de finally           Pas dinterface Throwable  try{     ...
PHP plein dexceptions13/07/11       Objets et patterns en PHP   15
Finalement, on a de quoi utiliser des patterns !           Interfaces et classes abstraites           Héritage           N...
Design Patterns ?           Solutions OO             Remarquables             Implémentant SOLID             Répondent à d...
Singleton           Attention à son utilisation anti-pattern...  class Singleton  {     protected static $_instance;      ...
Observateur / Sujet           Un pattern très utile, pouvant être implémenté de plusieurs           manières différentes13...
Observateur / Sujet codéclass SomeSubject implements Subject{   protected $observers;   protected function __construct() {...
Observateur / Sujet concrêt           Un pattern très utile, pouvant être implémenté de plusieurs           manières diffé...
Décorateur           Permet de résoudre la problématique de lhéritage multiple                                            ...
Décorateur           Implémentation PHP                              interface Ecrivant {                                 ...
Décorateur           Passage dun modèle vertical (héritage) à un modèle horizontal           (agrégation)            $obj ...
Itérateur           Déjà présent dans PHP par défaut           Redéfinit lopérateur foreach           Définit la manière d...
Encore des patterns !           Proxy           Poids plume           Pont           Adaptateur           MVC           Vi...
Où trouver des patterns ?           Sur mon GitHub :)             https://github.com/jpauli             Ils sont là à titr...
Se documenter sur les patterns           Les langages OO sont mis en avant             C++ , Java           Les exemples e...
Se documenter sur les patterns en PHP           Lecture et analyse de codes existants             https://github.com/symfo...
Merci !           Questions ?13/07/11                 Objets et patterns en PHP   30
Prochain SlideShare
Chargement dans…5
×

Objets patterns et genie logiciel , par Julien Pauli

2 783 vues

Publié le

Lorsqu’on parle d’objet, de patterns ou de génie logiciel, PHP fait souvent sourire et Java vient tout de suite en tête. Cette session a pour but de prouver que PHP est mature pour supporter des projets d’envergure. Nous détaillerons techniquement le modèle objet de PHP, nous parlerons design patterns et génie logiciel, UML à l’appuie. Comment PHP a-t-il évolué sur ces points ? Comment fonctionne-t-il et quels sont les projets open sources basés sur PHP et orientés patterns ?

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

Aucun téléchargement
Vues
Nombre de vues
2 783
Sur SlideShare
0
Issues des intégrations
0
Intégrations
80
Actions
Partages
0
Téléchargements
51
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Objets patterns et genie logiciel , par Julien Pauli

  1. 1. Objets, patterns et génie logiciel en PHP13/07/11 Objets et patterns en PHP 1
  2. 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 @julienpauli13/07/11 Objets et patterns en PHP 2
  3. 3. Voyons voir ... Développement objet PHP Ou en est-on ? Historique PHP Différence avec dautres 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 PHP13/07/11 Objets et patterns en PHP 3
  4. 4. PHP, rappelez moi ce que cest ? 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. 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 lutilisation 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. 6. PHP où va-t-on ? ~11/2010 : PHP 5.4 Traits (pseudo héritage horizontal) Nettoyage danciennes fonctionnalités dépréciées Serveur web intégré Support dtrace Syntaxe améliorée13/07/11 Objets et patterns en PHP 6
  7. 7. PHP et OOP Pas un langage orienté objet Mais modèle objet présent Proche de celui de Java (pas dhé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. 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 nest pas Java Il sinspire globalement de son modèle objet13/07/11 Objets et patterns en PHP 8
  9. 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. 10. Principes SOLID Règles régissant la conception orientée Objet Single Responsability Open/Close Principle Liskov substitution Principle Interface Seggregation Dependency Injection13/07/11 Objets et patterns en PHP 10
  11. 11. PHP et SOLID Liskov Subsitution Un objet utilisant A doit pouvoir utiliser un fils de A sans sen rendre compte Lhé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. 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. 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. 14. PHP Exceptions try { throw } catch () { } Pas de finally Pas dinterface Throwable try{ $result = $db->getResult(); }catch (BadArgumentException $e){ // une erreur dans les arguments dune 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. 15. PHP plein dexceptions13/07/11 Objets et patterns en PHP 15
  16. 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 environnement13/07/11 Objets et patterns en PHP 16
  17. 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 lun à lautre cest changer quelques lignes de code Permettent dassurer la pérénité dans le code dans le temps13/07/11 Objets et patterns en PHP 17
  18. 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. 19. Observateur / Sujet Un pattern très utile, pouvant être implémenté de plusieurs manières différentes13/07/11 Objets et patterns en PHP 19
  20. 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) { // lets 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. 21. Observateur / Sujet concrêt Un pattern très utile, pouvant être implémenté de plusieurs manières différentes13/07/11 Objets et patterns en PHP 21
  22. 22. Décorateur Permet de résoudre la problématique de lhé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. 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. 24. Décorateur Passage dun 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. 25. Itérateur Déjà présent dans PHP par défaut Redéfinit lopé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. 26. Encore des patterns ! Proxy Poids plume Pont Adaptateur MVC Visiteur ...13/07/11 Objets et patterns en PHP 26
  27. 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 dautres projets PHP Pour peu quils soient un minimum réfléchis et pros13/07/11 Objets et patterns en PHP 27
  28. 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 PHP13/07/11 Objets et patterns en PHP 28
  29. 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 dautres langages OO Java C++ Ruby&Rails13/07/11 Objets et patterns en PHP 29
  30. 30. Merci ! Questions ?13/07/11 Objets et patterns en PHP 30

×