page de garde introduction aux design patterns isia, mars 2003 yannis.bres@sophia.inria.fr

Post on 03-Apr-2015

108 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Page de garde

Introduction aux Design Patterns

ISIA, Mars 2003

Yannis.BRES@sophia.inria.fr

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

top related