page de garde introduction aux design patterns isia, mars 2003 [email protected]
TRANSCRIPT
Page de garde
Introduction aux Design Patterns
ISIA, Mars 2003
http://www.yannis.bres.name
Modélisation d’objets
Modélisation d’objets
Limiter les dépendances entre objets
Des objectifs parfois antagonistes :
Encapsuler des données sans en empêcher l’accès
Simplicité d’utilisation
Trouver le bon niveau de granularité des objets
Concevoir des objets polyvalents, flexibles, réutilisables
Implémentation performante
…
Modélisation d’applications
Modélisation d’applications
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
Un Design Pattern
Description de la solution proposée
Nom
Exposé du problème
Exemple d’implémentation
Confrontation avec d’autres Design Patterns
Contexte de mise en œuvre, contraintes limitantes
Conseils d’implémentation
Relative standardisation du nommage des Design Patterns
Modèles parfois (souvent ?) triviaux
Principales classes de Design Patterns
Principales classes de Design Patterns
Composition de groupes d’objets
Patterns de création
Création d’objets sans instanciation directe d’une classe
Patterns de composition
Patterns comportementaux
Modélisation des communications inter-objets et du flot de données
Les Design Patterns
Les Design Patterns
PurposeCreational Structural Behavioral
Scope
ClassFactory Method Adapter Interpreter
Template Method
Object
Abstract FactoryBuilderPrototypeSingleton
AdapterBridgeCompositeDecoratorFacadeProxy
Chain of ResponsibilityCommandIteratorMediatorMementoFlyweightObserverStateStrategyVisitor
Abstract Factory
Abstract Factory
Objectif : obtenir des instances de classes implémentant des interfaces connues, mais en ignorant le type réel de la classe obtenueExemple : une application gérant des documents polymorphes générateur de compo-sants graphiques supportant une multitude de look-and-feels
Prototype
Prototype
Objectif : obtenir une instance d’un objet à partir d’une autre instance
Exemple : drag-and-drop de composants inconnus avec touche Ctrl enfoncée
Singleton
Singleton
Objectif : s’assurer qu’une seule instance d’un type spécifique existe dans le système et fournir l’accès à cet objetExemple : un spooler d’impression
Adapter / Wrapper
Adapter / Wrapper
Objectif : obtenir un objet qui permet d’en utiliser un autre en conformité avec une certaine interfaceExemple : mise en "conformité" de composants d’origines diverses
Proxy / Surrogate
Proxy / Surrogate
Objectif : obtenir un objet qui agit comme intermédiaire dans la communication avec un autre objet (un "passeur d’ordre")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 d’une image à la fin d’un document, …) ; un objet qui transforme une collection en lecture-seule ; …
Composite
Composite
Objectif : manipuler indifférement des objets atomiques ou des agrégats d’objets
Exemple : une application manipulant des formes graphiques et des compositions de ces formes
Facade
Facade
Objectif : fournir une interface simplifiée et limitée à un système complexe
Exemple : donner accès à des passes spécifiques d’un compilateur
Command
Command
Objectif : réifier une commande en un objet embarquant d’éventuels paramètres
Exemple : uniformiser les différentes méthodes de commande d’un système et gérer l’undo et le redo
Iterator
Iterator
Objectif : permettre d’itérer de manière générique sur les éléments d’une collection, quelle que soit la nature des éléments ou de la collectionExemple : trop naze, on le fait tous les jours
Observer / Listener
Observer / Listener
Objectif : permettre à un objet d’informer d’autres objets qu’il ne connaît pas de l’évolution de son état interneExemple : un bouton à la suite d’un click
Strategy / Policy
Strategy / Policy
Objectif : utiliser de manière non spécifique une collection d’algorithme proches
Exemple : algorithmes de tris de collections de données
State
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)
Visitor
Visitor
Objectif : découpler une structure des opérations sur cette structure
Exemple : analyses/transformations d’arbres de syntaxe abstraite dans un compilateur
Conclusions
Conclusions
Des solutions-recettes adaptables pour des problèmes récurrents
Des propositions de bases pour l’élaboration de solutions plus complexesModèles parfois (souvent ?) triviaux