design patterns laurent henocque enseignant chercheur esil/info france
TRANSCRIPT
![Page 1: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/1.jpg)
Design Patterns
Laurent Henocquehttp://laurent.henocque.free.fr/
Enseignant Chercheur ESIL/INFO Francehttp://laurent.henocque.perso.esil.univmed.fr/
mis à jour en Octobre 2006
![Page 2: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/2.jpg)
Licence Creative Commons
Cette création est mise à disposition selon le Contrat Paternité-Partage des Conditions Initiales à l'Identique 2.0 France disponible en ligne
http://creativecommons.org/licenses/by-sa/2.0/fr/
ou par courrier postal à Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
![Page 3: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/3.jpg)
Préambule
• Ce support de cours présente de nombreux diagrammes, dont certains peuvent contenir des erreurs UML2
• Il n'est donc pas utilisable sans l'aide d'un enseignant
![Page 4: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/4.jpg)
Contexte
• De très nombreux projets logiciels font apparaître des éléments comparables– Réinventer les meilleures solutions connues dans
chaque nouveau projet est inutile, et risqué
• Analysis Patterns• Design Patterns• Frameworks• Workflow Patterns
![Page 5: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/5.jpg)
Pourquoi les Patterns
• La réussite prime sur la nouveauté
• Importance de la clarté de la documentation
• Validation qualitative des acquis et de la connaissance pratique
• Importance de la dimension humaine dans le développement logiciel
• Faciliter la réutilisation de savoir faire
![Page 6: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/6.jpg)
Sur la réutilisation
Les langages informatiques modernes orientés objet permettent la réutilisation
• par importation de classes
• par héritage : extension / spécialisation
• par l'inversion de contrôle (aspects)
![Page 7: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/7.jpg)
Les patterns c'est quoi?
Design Pattern
=
Schéma de conception réutilisable
=
Organisation et hiérarchie de plusieurs modèles de classes réutilisable par simple
implémentation, adaptation, extension
![Page 8: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/8.jpg)
Comment?
• Les Design Patterns sont présentés en utilisant la notation graphique standard UML
• Pour l'essentiel, seule la partie statique (diagrammes de classes) de UML est utilisée
![Page 9: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/9.jpg)
Diagrammes de Classes UML2 (éléments)
Classe_A Classe_B
Classe_C
Classe_Dattributs
fonctions
héritage
relation
agrégat / composition
dépendance
![Page 10: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/10.jpg)
Références
![Page 11: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/11.jpg)
Références Web
• http://patterndigest.com/
• http://norvig.com/design-patterns
• http://www.industriallogic.com/papers/index.html
• … google…
![Page 12: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/12.jpg)
Exemples Simples : Intuition
Quelques exemples de "proto" patterns, ou d'éléments de conception
réutilisables non officialisés
![Page 13: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/13.jpg)
La Liste• La liste (ce n'est pas un schéma, mais un
élément de conception orientée objet)
Ce modèle est largement criticable : quels sont ses défauts?
![Page 14: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/14.jpg)
Collection
• Gestion de collections via une classe
Ce modèle ne respecte pas les conventions UML: quels sont ses défauts?
![Page 15: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/15.jpg)
Attribut Relation
• Définir un rôle d'une relation (binaire) par un pointeur
![Page 16: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/16.jpg)
Maître / Esclave
• Déléguer la gestion d'une relation à une classe intermédiaire
![Page 17: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/17.jpg)
Objet Relation
• Modéliser une relation importante par un objet (on veut ignorer la façon dont la relation est gérée)
![Page 18: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/18.jpg)
Les 23 Patterns
![Page 19: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/19.jpg)
Types de Patterns
• Patterns structuraux– décrivent une organisation de classes dans l'optique
"structure de données"
• Patterns de création– décrivent des approches de création déléguée d'objets
• Patterns dynamiques– décrivent une organisation de classes gérant les aspects
dynamiques d'un système
![Page 20: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/20.jpg)
Présentation de Schémas Simples
• On débute par 7 schémas d'utilisation très répandue– Composite
– Iterator
– Command
– Adapter
– Singleton
– Factory Method
– Template Method
![Page 21: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/21.jpg)
Composite
• Composer des structures hiérarchiques
![Page 22: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/22.jpg)
Composite : exemples
• Toute structure de données récursive– container graphique– structure de document
(chapitre/section/paragraphe...)– container conceptuel (états composites dans
UML)
![Page 23: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/23.jpg)
Iterator• Parcourir des conteneurs en masquant
l'implantation
![Page 24: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/24.jpg)
Iterator
![Page 25: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/25.jpg)
Iterator : exemples
• Toute logique de parcours de container
• Exemples nombreux en Java
• On veut enlever des structures de données toute information relative à son parcours, et ainsi permettre de faire varier les modes de parcours
![Page 26: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/26.jpg)
Command
• Encapsuler une requête dans un objet
![Page 27: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/27.jpg)
Command : exemples
• Command remplace les pointeurs vers fonctions dans tous les langages objet évolués.
• Command interface l'appel d'une opération via une méthode virtuelle.
• Utilisé dans les interfaces homme machine pour attacher un comportement à un objet
![Page 28: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/28.jpg)
Function Object
• Encapsuler une fonction dans un objet (un autre nom pour "command")
FunctionObject-------------------execute(param)
ConcreteFunctionObject-------------------------------
state-------------------------------
execute(param)
![Page 29: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/29.jpg)
(Class) Adapter
• Convertir une interface par héritage multiple
![Page 30: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/30.jpg)
Adapter : exemples
• Toute situation où l'on veut réutiliser du code, mais pas son interface de programmation.
• Par exemple, un code ancien, ou tiers, ne respecte pas notre charte de présentation
![Page 31: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/31.jpg)
Object Adapter (Wrapper)
• Convertir une interface par composition
![Page 32: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/32.jpg)
Singleton
• Gérer une instance unique
![Page 33: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/33.jpg)
Singleton : exemples
• Singleton permet de gérer la création à la demande (lazy) d'un objet unique.
• L'objet est créé au premier accès de façon invisible
• Exemples : le spooler d'impressions, le système de fichiers dans un OS
![Page 34: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/34.jpg)
Factory Method
• Définir une interface de création, mais laisser les sous classes décider du type
![Page 35: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/35.jpg)
Factory Method : exemples
• C'est un fragment de Abstract Factory (voir plus loin)
• C'est un exemple de "Template Method" (voir ci après)
• Utile par exemple pour créer des itérateurs. Chaque classe d'une hiérarchie de containers implante sa version de "createIterator()", qui retourne un objet du type adéquat.
![Page 36: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/36.jpg)
Template Method• Prévoir un squelette de fonction, et
compléter par les sous classes
![Page 37: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/37.jpg)
Template method : exemple
• La logique de création et archivage par nécessité suivante peut être définie par une super classe, et ses détails implantés par des sous classes
Object get(String name){Object o=find(name); if (o) return o;if (!canCreate(name)) return null;o = create(name);addToContainer(o);return o;
}
![Page 38: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/38.jpg)
Autres Schémas de Création
Présentation quasi alphabétique
![Page 39: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/39.jpg)
Schémas de Création
• Abstract Factory : – interface de création de familles d'objets de type exact inconnu
• Builder : – séparer création et représentation
• Factory Method :– interface de création spécifiée par des sous classes
• Prototype– création par clonage
• Singleton– classe à instance unique
![Page 40: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/40.jpg)
Abstract Factory
• Interface de création de familles de produits
![Page 41: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/41.jpg)
Abstract Factory : exemples
• Permet de changer le look and feel d'une interface en changeant le type des objets créés en changeant simplement d'object factory
• Peut aussi servir pour changer globalement les types de containers utilisés par un programme (listes ou tableaux ou hashtables) par exemple
![Page 42: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/42.jpg)
Builder
• Séparer la construction d'un objet complexe de sa représentation
![Page 43: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/43.jpg)
Builder : exemples
• L'exemple type est celui d'un convertisseur "à la volée" de texte formaté.– vers un autre format
– vers des formats avec perte (html -> texte seul)
• Le principe est qu'à chaque rencontre d'une unité remarquable (balise, chaîne de caractères, texte libre...) le parseur invoque le convertisseur. En changeant ce dernier, on change le format de sortie.
![Page 44: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/44.jpg)
Prototype
• Créer des instances par clonage de prototypes
![Page 45: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/45.jpg)
Prototype : exemples
• C'est la base de la mise en œuvre du copier/coller dans les interfaces graphiques
![Page 46: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/46.jpg)
Autres Schémas Structuraux
Présentation alphabétique
![Page 47: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/47.jpg)
Schémas Structuraux
• Adapter– convertir une interface en une autre pour réutilisation
• Bridge– découpler une abstraction de son implantation
• Composite– structures arborescentes
• Decorator– attachement dynamique de fonctionnalités
• Façade– interface unique sur les interfaces d'un module
• Flyweight– objets ultra légers
• Proxy– représentant local d'un objet distant
![Page 48: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/48.jpg)
Bridge
• Découpler une abstraction de son implantation
![Page 49: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/49.jpg)
Bridge : exemples
• On se trouve dans le cas où l'on doit maintenir en même temps une hiérarchie d'abstractions et plusieurs hiérarchies d'implantation différentes : par exemple pour réaliser des interfaces graphiques portables
• On peut aussi vouloir cacher des interfaces de programmation (C++) : cas particulier type de la classe "Handle"
![Page 50: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/50.jpg)
Decorator
• Attacher des responsabilités dynamiquement
![Page 51: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/51.jpg)
Decorator : exemples
• On veut attacher dynamiquement des traitements effectués de manière récursive
• Exemple : dans les interfaces graphiques, l'affichage des "décorations" : barre de saisie, ascenseurs, transparence etc...
• Autre possibilité : pour la sérialisation : ajout de balises html/xml autour du source généré par exemple.
![Page 52: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/52.jpg)
Façade
• Interfacer un sous système par une classe façade
![Page 53: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/53.jpg)
Facade : exemples
• Votre compilateur C++ en ligne de commande favori : permet l'invocation d'une session complète, ou du préprocesseur seul, ou du linker...
![Page 54: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/54.jpg)
Flyweight
• Gérer des millions de pseudo objets associés à des données de base
![Page 55: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/55.jpg)
Flyweight exemples
• Dans un éditeur de textes, faire de chaque caractère un objet.
• Dans un afficheur de signaux radars, faire de chaque signal un objet.
![Page 56: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/56.jpg)
Proxy
• Définir un représentant local d'un objet accessible à distance
![Page 57: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/57.jpg)
Proxy : exemples
• interface des EJB
![Page 58: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/58.jpg)
Autres schémas dynamiques
Présentation alphabétique
![Page 59: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/59.jpg)
Schémas Dynamiques
• Chain of Responsibility– découpler l'objet responsable d'un traitement
• Command– objet fonction
• Interpreter– représentation de la sémantique d'une grammaire
• Iterator– accès séquentiel au contenu d'un container
• Mediator– modélisation de l'interaction d'objets
• Memento– support du undo
![Page 60: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/60.jpg)
Schémas Dynamiques
• Observer– gestion des notifications
• State– définir les états par des classes
• Strategy– définir des familles d'algorithmes interchangeables
• Template Method– définir le squelette d'un algorithme
• Visitor– permettre d'appliquer une opération aux éléments d'une structure
de données
![Page 61: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/61.jpg)
Chain of Responsibility
• Eviter de coupler le demandeur d'une requête et son récepteur
![Page 62: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/62.jpg)
exemples
• le système de prise en compte des événements dans le logiciel hypercard
• toute ihm ou l'on voudrait que par défaut un click s'il n'est pas traité par un bouton soit traité par un script d'un conteneur englobant, à un niveau quelconque
![Page 63: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/63.jpg)
Interpreter
• Explorer un arbre syntaxique
![Page 64: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/64.jpg)
Interpreter : exemples
• Utile pour la version "luxe" de "Builder". On a fait une analyse syntaxique, et on veut exploiter la structure de données hiérarchique qui a été construite pour:
• compiler
• traduire
• ...
![Page 65: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/65.jpg)
Mediator
• Alléger le coût d'une communication nxn par un médiateur
![Page 66: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/66.jpg)
Mediator
![Page 67: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/67.jpg)
Mediator : exemples
• Dans une interface graphique, gérer des dépendances complexes entre des composants de saisie/visualisation
![Page 68: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/68.jpg)
Memento
• Prévoir la restauration de l'état d'un objet (Undo)
![Page 69: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/69.jpg)
Observer
• Définir une relation entre objets pour que chaque mise à jour soit notifiée
![Page 70: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/70.jpg)
Observer : exemples
• Toujours dans une interface graphique par exemple, permettre la notification entre des vues multiples éditables ou non d'une même donnée.
• Par exemple feuille de calcul/diagrammes
![Page 71: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/71.jpg)
State
• Gérer les états par une hiérarchie de classes
![Page 72: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/72.jpg)
State : exemples
• La fonction "display" d'une icône représentant une connexion change selon l'état.
• Pour le code qui invoque display, il suffit de changer dynamiquement l'objet qui implémente l'état pour que cette particularité soit insensible
![Page 73: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/73.jpg)
Strategy
• Varier dynamiquement les algorithmes
![Page 74: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/74.jpg)
Strategy : exemples
• les tris ont des plages d'optimalité.
• On peut changer une foi pour toutes l'algo de tri attaché à un (itérateur de) vecteur par exemple, dès que le nombre de constituants dépasse 5
![Page 75: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/75.jpg)
Visitor
• Explorer une structure de données hiérarchique
![Page 76: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/76.jpg)
Visitor : exemples
• permettre l'appel d'une fonction sur des éléments d'une structure de données sans avoir à réécrire l'algo de parcours à chaque fois.
• la fonction "map" de LISP
![Page 77: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/77.jpg)
Autres Patterns Utiles
![Page 78: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/78.jpg)
Inversion de dépendance
• L'inversion de dépendance permet de rendre un code indépendant de ses conditions d'initialisation , et des API précises des ses données d'initialisation
• Utile dans les architectures multi couches• Exemple:
– le framework Spring:– http://www.theserverside.com/tt/articles/article.tss?
l=SpringFramework– le projet Pico (http://www.picocontainer.org/)– le projet Avalon
![Page 79: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/79.jpg)
Inversion de Dépendance par les setters
![Page 80: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/80.jpg)
Inversion de Dépendancepar les constructeurs
![Page 81: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/81.jpg)
Patterns Aggrégés
![Page 82: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/82.jpg)
Model View Controller
![Page 83: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/83.jpg)
Model View Controller
MVC peut être vu comme une combinaison de design patterns
• Les vues sont organisées selon Composite• Le lien entre vues et modèles est l' Observer. • Les contrôleurs sont des Strategy attachées aux vues.
MVC peut mettre en jeu encore d'autres patterns:
• Le modèle est souvent un Mediator• Les arbres de vues mettent en œuvre Decorator• On a souvent besoin d' Adapter pour convertir l'interface d'un Modèle
de façon à ce qu'elle soit adaptée aux vues.• Les vues créent les contrôleurs avec FactoryMethod.
![Page 84: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/84.jpg)
Document View Pattern
• Document View est une version simplifiée de MVC où la vue agit selon le pattern Observer, et est mise à jour en fonction de l'état du document
• (Mis en œuvre dans les MFC)
![Page 85: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/85.jpg)
GRASP
General Responsibility Assignment Software Patterns or Principles
![Page 86: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/86.jpg)
GRASP
• GRASP propose des guides généraux d'organisation des interfaces de programmation orientée par le concept de "responsabilité" attachée aux classes.
• Les "patterns" GRASP fournissent une canevas logique pour déployer des interfaces garantissant un niveau amélioré de réutilisabilité
![Page 87: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/87.jpg)
Information Expert
• Ce modèle représente le plus fondamental des allocations de responsabilité:
• La responsabilité doit être attachée à la classe la plus compétente (Information Expert)
![Page 88: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/88.jpg)
Creator
• La classe responsable de créer de nouvelles instances d'une classe C est celle qui:– agrège, contient, enregistre les instances de C– utilise les instances de C– possède l'information nécessaire pour créer les
C
![Page 89: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/89.jpg)
Controller
• La responsabilité de traiter les événements système est déléguée à une classe non membre de l'interface utilisateur qui représente le système entier ou un scénario de cas d'utilisation
• Un contrôleur de use case doit être capable de gérer la totalité des évènements possibles d'un cas d'utilisation.
• Un contrôleur peut gérer les évènements de plusieurs scénarios si nécessaire
![Page 90: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/90.jpg)
Low Coupling
• Le "couplage faible" renvoie aux aspects de l'organisation logicielle qui permettent:– de limiter les dépendances entre classes
– de réduire l'impact du changement sur les autres classes
– d'augmenter la réutilisabilité
• Les stratégies qui le permettent sont variées, mais reposent largement sur l'inversion de contrôle et les design patterns de séparation (bridge, builder, decorator, mediator etc...)
![Page 91: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/91.jpg)
High Cohesion
• La "cohésion forte" est une stratégie d'organisation des classes qui vise à associer au sein d'une même classe des services fortement voisins ou reliés
![Page 92: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/92.jpg)
Polymorphisme
• Quand des variations de fonctionnalités sont induites par le type des objets, la responsabilité de ces variations est données à des sous classes qui implantent le type, à une opération surchargée dans chaque cas par la méthode appropriée
![Page 93: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/93.jpg)
Pure Fabrication
• Une "Pure Fabrication" est une classe ne faisant pas partie des objets métier ou technique, mais introduite pour les seuls besoins de satisfaire "low coupling et/ou high cohesion" ou tout autre besoin dicté par les GRASP
![Page 94: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/94.jpg)
Indirection
• Utiliser un intermédiaire (pattern Mediator par exemple) pour satisfaire les impératifs de couplage faible
![Page 95: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/95.jpg)
Protected Variations
• Protéger un ensemble logiciel des variations d'un élément en groupant ses parties instables dans une interface, dont les implantations réalisent les variations
![Page 96: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/96.jpg)
Trois principes liés aux design et grasp patterns
![Page 97: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/97.jpg)
Single-Responsibility Principle
• Une classe doit n'avoir qu'une seule raison de changer.
• Ce principe est une lecture du principe de "cohésion forte". La classe ne doit offrir que des services fortement reliés– on ne combine pas rémanence et fonctionnalité par
exemple
• Ce principe contredit de facto l'usage de l'héritage pour extension
![Page 98: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/98.jpg)
Interface-Segregation Principle
• Un programme ne doit pas dépendre de méthodes qu'il n'utilise pas
• Principe également lié à la cohésion forte
• Conduit à la multiplication d'interfaces très spécifiques et petites.
![Page 99: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/99.jpg)
Open-Closed Principle
• Un code doit être "ouvert à l'extension, mais fermé à la modification".
• En d'autres termes, tout ajout de fonctionnalité ou évolution du logiciel doit se faire de façon incrémentale, sans modifier une ligne de source existante
• Une approche de ce principe se fait par les design patterns "template method" et "strategy
![Page 100: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/100.jpg)
Design Patterns J2EE
![Page 101: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/101.jpg)
Les Patterns J2EE
• Java a popularisé une liste de Patterns utilisés dans la mise en œuvre d'applications à base d'EJBChaque Pattern n'est pas une collaboration au sens propre, mais le nom d'une classe, dotée de fonctionnalités particulières, et qui entre dans des interactions spécifiques avec d'autres
![Page 102: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/102.jpg)
http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html
![Page 103: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/103.jpg)
http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html
![Page 104: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/104.jpg)
http://java.sun.com/blueprints/patterns/catalog.html
• Business Delegate Reduce coupling between Web and Enterprise JavaBeansTM tiers• Composite Entity Model a network of related business entities• Composite View Separately manage layout and content of multiple composed views• Data Access Object (DAO) Abstract and encapsulate data access mechanisms• Fast Lane Reader Improve read performance of tabular data• Front Controller Centralize application request processing• Intercepting Filter Pre- and post-process application requests• Model-View-Controller Decouple data, behavior, and presentation• Service Locator Simplify client access to enterprise business services• Session Facade Coordinate operations between multiple business objects in a workflow• Transfer Object Transfer business data between tiers• Value List Handler Efficiently iterate a virtual list• View Helper Simplify access to model state and data access logic
![Page 105: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/105.jpg)
Références
• Mastering EJB 3.0– http://www.theserverside.com/tt/books/wiley/
masteringEJB3/index.tss
• EJB Design Patterns– http://www.theserverside.com/tt/books/wiley/
EJBDesignPatterns/index.tss
• L'ensemble du site est utile:– http://www.theserverside.com/
![Page 106: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/106.jpg)
Conclusion
Les patterns fournissent un outil puissant
• de documentation de savoir-faire
• de nommage de concepts universellement utilisés
• de réutilisation pratique de modèles objet dans les projets
![Page 107: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/107.jpg)
Autres Pseudo Patterns référencés
![Page 108: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/108.jpg)
Casting Method
• Prédéfinir les casts
![Page 109: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/109.jpg)
Connected Group
• Gérer collectivement les connexions
![Page 110: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/110.jpg)
Double Checked Lockingclass Singleton {
public:
static Singleton * instance();
private:
static Singleton * self;
static SEMAPHORE key;
}
Singleton *
Singleton::instance() {
if (self == 0) {
if ( lock(key) >= 0 ) {
if (self == 0 ); //double-check!
self = new Singleton;
unlock (key);
} } }
![Page 111: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/111.jpg)
Flexible Service• Faire d'une fonction une classe, évaluée de
manière retardée
![Page 112: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/112.jpg)
Intelligent Children
• Eviter les down casts
![Page 113: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/113.jpg)
Is Kind Of
• Fournir des informations de type
![Page 114: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/114.jpg)
Multiton
class User {
public:
static const User * LogIn(const char * name,
const char * password);
protected:
virtual User * Lookup(const char *name);
private:
List<UserName> * _instances;
}
class UserName : public ListItem {
User* instance;
char* name;
}
![Page 115: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/115.jpg)
Mutual Friends
• Représenter une relation bidirectionnelle
![Page 116: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/116.jpg)
Named Object
![Page 117: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/117.jpg)
Null Object
• Représenter une relation partielle
![Page 118: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/118.jpg)
Objectifier• Permettre à un objet de faire varier
dynamiquement son comportement
![Page 119: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/119.jpg)
RTTIVisitor
• Obtenir un cast sûr au moyen du pattern visitor
![Page 120: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/120.jpg)
Sender Argument
• Permettre de s'identifier auprès d'autres objets par passage d'une référence
![Page 121: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/121.jpg)
Serializer• Ecrire les objets dans des flux de données
pour les reconstruire plus tard
![Page 122: Design Patterns Laurent Henocque Enseignant Chercheur ESIL/INFO France](https://reader031.vdocuments.site/reader031/viewer/2022013003/551d9d7e497959293b8b68da/html5/thumbnails/122.jpg)
Timed Relationship
• Représenter une relation qui varie au cours du temps