Page de garde Introduction aux Design Patterns ISIA, Mars
Modélisation dobjets Limiter les dépendances entre objets Des objectifs parfois antagonistes : Encapsuler des données sans en empêcher laccès Simplicité dutilisation Trouver le bon niveau de granularité des objets Concevoir des objets polyvalents, flexibles, réutilisables Implémentation performante …
Modélisation dapplications Problèmes de conceptions récurrents : des Design Patterns Modéliser correctement une application : Processus complexe Design Patterns, Elements of Reusable Object-Oriented Software E. Gamma, R. Helm, R. Johnson, J. Vlissides - Addison Wesley Expertise acquise au fil des expériences Un (seminal) "livre de recettes" :
Un Design Pattern Description de la solution proposée Nom Exposé du problème Exemple dimplémentation Confrontation avec dautres Design Patterns Contexte de mise en œuvre, contraintes limitantes Conseils dimplémentation Relative standardisation du nommage des Design Patterns Modèles parfois (souvent ?) triviaux
Principales classes de Design Patterns Composition de groupes dobjets Patterns de création Création dobjets sans instanciation directe dune classe Patterns de composition Patterns comportementaux Modélisation des communications inter-objets et du flot de données
Les Design Patterns Purpose CreationalStructuralBehavioral Scope Class Factory MethodAdapterInterpreter Template Method Object Abstract Factory Builder Prototype Singleton Adapter Bridge Composite Decorator Facade Proxy Chain of Responsibility Command Iterator Mediator Memento Flyweight Observer State Strategy Visitor
Factory Method / Virtual Constructor
Abstract Factory Objectif : obtenir des instances de classes implémentant des interfaces connues, mais en ignorant le type réel de la classe obtenue Exemple : une application gérant des documents polymorphes générateur de compo- sants graphiques supportant une multitude de look-and-feels
Prototype Objectif : obtenir une instance dun objet à partir dune autre instance Exemple : drag-and-drop de composants inconnus avec touche Ctrl enfoncée
Singleton Objectif : sassurer quune seule instance dun type spécifique existe dans le système et fournir laccès à cet objet Exemple : un spooler dimpression
Adapter / Wrapper Objectif : obtenir un objet qui permet den utiliser un autre en conformité avec une certaine interface Exemple : mise en "conformité" de composants dorigines diverses
Proxy / Surrogate Objectif : obtenir un objet qui agit comme intermédiaire dans la communication avec un autre objet (un "passeur dordre") Exemples : un objet qui reporte les opérations coûteuses au moment où on utilise réellement les résultats de ces opérations (chargement dune image à la fin dun document, …) ; un objet qui transforme une collection en lecture-seule ; …
Composite Objectif : manipuler indifférement des objets atomiques ou des agrégats dobjets Exemple : une application manipulant des formes graphiques et des compositions de ces formes
Decorator Decorator / Wrapper Objectif : ajouter à des instances spécifiques des comportements spécifiques Exemple : bordure dun composant graphique
Facade Objectif : fournir une interface simplifiée et limitée à un système complexe Exemple : donner accès à des passes spécifiques dun compilateur
Chain of responsibility Objectif : Exemple :
Command Objectif : réifier une commande en un objet embarquant déventuels paramètres Exemple : uniformiser les différentes méthodes de commande dun système et gérer lundo et le redo
Interpreter Objectif : Exemple :
Iterator Objectif : permettre ditérer de manière générique sur les éléments dune collection, quelle que soit la nature des éléments ou de la collection Exemple : trop naze, on le fait tous les jours
Mediator Objectif : Exemple :
Memento Objectif : Exemple :
Observer / Listener Objectif : permettre à un objet dinformer dautres objets quil ne connaît pas de lévolution de son état interne Exemple : un bouton à la suite dun click
Strategy / Policy Objectif : utiliser de manière non spécifique une collection dalgorithme proches Exemple : algorithmes de tris de collections de données
State Objectif : un objet qui change de comportement en fonction de son état interne Exemple : une socket TCP (état non connectée, connectée, en attente de connection)
Template Method Objectif : Exemple :
Visitor Objectif : découpler une structure des opérations sur cette structure Exemple : analyses/transformations darbres de syntaxe abstraite dans un compilateur
Conclusions Des solutions-recettes adaptables pour des problèmes récurrents Des propositions de bases pour lélaboration de solutions plus complexes Modèles parfois (souvent ?) triviaux