Académique Documents
Professionnel Documents
Culture Documents
Examen ACSI
Amphi 022 : 13h30-15h00
Sommaire
Introduction
Design Patterns de cration
Design Patterns de structure
Design Patterns de comportement
Usage et synthse
Bibliographie
Introduction
Objectifs
Modularit
Facilit de gestion (technologie objet)
Cohsion
Degr avec lequel les tches ralises par un seul module
sont fonctionnellement relies
Une forte cohsion est une bonne qualit
Couplage
Degr dinteraction entre les modules dans le systme
Un couplage'lche est une bonne qualit
Rutilisabilit
Bibliothques, frameworks (cadres)
5
Couplage : exemple
void initArray(int[] iGradeArray, int nStudents) {
int i;
for (i = 0; i < nStudents; i++) {
iGradeArray[i] = 0;
}
}
Couplage faible
(et meilleure fiabilit)
au travers de lutilisation
de lattribut "length"
8
10
Dfinition : Pattern
Un patron dcrit la fois un problme qui se produit trs
frquemment dans lenvironnement et larchitecture de la
solution ce problme de telle faon que lon puisse utiliser
cette solution des milliers de fois sans jamais ladapter deux fois
de la mme manire.
C. Alexander
11
Appleton [Appleton97]
Une rgle tripartite exprimant une relation entre un certain contexte, un
certain problme qui apparat rptitivement dans ce contexte et une
certaine configuration logicielle qui permet la rsolution de ce problme
Aarsten [Aarsten96]
Un groupe dobjets cooprants lis par des relations et des rgles qui
expriment les liens entre un contexte, un problme de conception et sa
solution
Les patrons sont des composants logiques dcrits indpendamment dun langage
donn (solution exprime par des modles semi-formels)
12
13
Historique
OOPSLA 87
Beck et Cunnimghan
OOPSLA 91, OOPSLA 92
Gamma et al. (GoF)
PLoP 94
Montebello
EuroPLoP 96
Kloster
ChiliPLoP 98
Wickenburg
14
Catgories de Patterns
Architectural Patterns
schmas dorganisation structurelle de logiciels (pipes, filters, brokers,
blackboard, MVC, )
Design Patterns
caractristiques cls dune structure de conception commune plusieurs
applications,
Porte plus limite que les architectural patterns
Anti-patterns
mauvaise solution ou comment sortir d une mauvaise solution
Organizational patterns
Schmas dorganisation de tout ce qui entoure le dveloppement dun
logiciel (humains)
15
Structure
Description de la manire dont doivent tre connects des objets de
lapplication afin de rendre ces connections indpendantes des volutions
futures de lapplication
Dcouplage de linterface et de limplmentation de classes et dobjets
Comportement
Description de comportements dinteraction entre objets
Gestion des interactions dynamiques entre des classes et des objets
16
Porte dInstance
Focalisation sur les relations entre les objets
Rutilisation par composition
17
Classe
Cration
Structure
Comportement
Factory Method
Adapter
Interpreter
Template Method
Objet
Abstract Factory
Adapter
Chain of Responsibility
Builder
Bridge
Command
Prototype
Composite
Iterator
Singleton
Decorator
Mediator
Facade
Memento
Flyweight
Observer
Proxy
State
Strategy
Visitor
18
Problme
description des conditions d applications. Explication du problme et de
son contexte
Solution
description des lments (objets, relations, responsabilits, collaboration)
permettant de concevoir la solution au problme ; utilisation de
diagrammes de classes, de squences,
vision statique ET dynamique de la solution
Consquences
description des rsultats (effets induits) de l application du pattern sur le
systme (effets positifs ET ngatifs)
19
20
21
Exemple : Labyrinthe
Framework
Application
22
Exemple : Labyrinthe
class MazeGame {
void Play() {}
public Maze createMaze() {
Maze aMaze = new Maze();
Room r1 = new Room(1);
Room r2 = new Room(2);
Door theDoor = new Door(r1, r2);
aMaze.addRoom(r1);
aMaze.addRoom(r2);
r1.setSide(North, new Wall());
r1.setSide(East, theDoor);
r1.setSide(South, new Wall());
r1.setSide(West, new Wall());
r2.setSide(North, new Wall());
r2.setSide(East, new Wall());
r2.setSide(South, new Wall());
r2.setSide(West, theDoor);
return aMaze;
}
}
23
Consquences
+ Elimination du besoin de code spcifique lapplication dans
le code du framework (uniquement linterface du Product)
Multiplication du nombre de classes
24
FactoryIF declares
the factory method
which returns the
object of type Product
Factory overrides
the factory method to
return an instance of
a ConcreteProduct
25
Exemple : Labyrinthe
class MazeGame {
void Play() {}
Room r2 = makeRoom(2);
Door theDoor = makeDoor(r1, r2);
aMaze.addRoom(r1);
aMaze.addRoom(r2);
}
}
r1.setSide(North, makeWall());
r1.setSide(East, theDoor);
r1.setSide(South, makeWall());
r1.setSide(West, makeWall());
r2.setSide(North, makeWall());
r2.setSide(East, makeWall());
r2.setSide(South, makeWall());
r2.setSide(West, theDoor);
return aMaze;
}
}
26
Consquences
+ Sparation des classes concrtes, des classes clients
les noms des classes produits napparaissent pas dans le code client
Facilite lchange de familles de produits
Favorise la cohrence entre les produits
Exemple
java.awt.Toolkit
27
Exemple : Labyrinthe
class MazeGame {
void Play() {}
Room r2 = f.makeRoom(2);
Door theDoor = f.makeDoor(r1, r2);
aMaze.addRoom(r1);
aMaze.addRoom(r2);
}
}
r1.setSide(North, f.makeWall());
r1.setSide(East, theDoor);
r1.setSide(South, makeWall());
r1.setSide(West, makeWall());
r2.setSide(North, makeWall());
r2.setSide(East, makeWall());
r2.setSide(South, makeWall());
r2.setSide(West, theDoor);
return aMaze;
}
}
29
Application
30
Builder (1)
Problme
ce motif est intressant utiliser lorsque lalgorithme de cration dun objet
complexe doit tre indpendant des constituants de lobjet et de leurs
relations, ou lorsque diffrentes reprsentations de lobjet construit doivent
tre possibles
Consquences
+ Variation possible de la reprsentation interne dun produit
limplmentation des produits et de leurs composants est cache au Director
Ainsi la construction dun autre objet revient dfinir un nouveau Builder
31
Builder (2)
Builder (3)
33
Prototype (1)
Problme
Le systme doit tre indpendant de la manire dont ses
produits sont crs, composs et reprsents : les classes
instancier sont spcifies au moment de lexcution
La prsence de hirarchies de Factory similaires aux
hirarchies de produits doivent tre vites. Les
combinaisons dinstances sont en nombre limit
Consquences
mmes consquences que Factory et Builder
Exemple
java.lang.Cloneable
34
Prototype (2)
35
Singleton
Problme
avoir une seule instance dune classe et pouvoir
laccder et la manipuler facilement
Solution
une seule classe est ncessaire pour crire ce motif
Consquences
lunicit de linstance est compltement contrle par
la classe elle mme. Ce motif peut facilement tre
tendu pour permettre la cration dun nombre
donn dinstances
37
Singleton (2)
// Only one object of this class can be created
class Singleton {
private static Singleton instance = null;
private Singleton() {
...
}
public static Singleton getInstance() {
if (instance == null)
38
Rsum : DP de cration
Le Factory Pattern est utilis pour choisir et retourner une instance d une
classe parmi un nombre de classes similaires selon une donne fournie la
factory
Le Abstract Factory Pattern est utilis pour retourner un groupe de classes
Le Builder Pattern assemble un nombre dobjets pour construire un nouvel
objet, partir des donnes qui lui sont prsentes. Frquemment le choix des
objets assembler est ralis par le biais dune Factory
Le Prototype Pattern copie ou clone une classe existante plutt que de crer
une nouvelle instance lorsque cette opration est coteuse
Le Singleton Pattern est un pattern qui assure quil ny a quune et une seule
instance dun objet et quil est possible davoir un accs global cette instance
39
40
Adapter (1)
Problme
Utilisation dune classe existante dont linterface ne nous convient pas (
convertir linterface dune classe en une autre)
Utilisation de plusieurs sous-classes dont ladaptation des interfaces est
impossible par drivation ( Object Adapter)
Consquences
Adapter de classe
+ il nintroduit quune nouvelle classe, une indirection vers la classe adapte
nest pas ncessaire
MAIS il ne fonctionnera pas dans le cas o la classe adapte est racine dune
drivation
Adapter dobjet
+ il peut fonctionner avec plusieurs classes adaptes
MAIS il peut difficilement redfinir des comportements de la classe adapte
42
Adapter (2)
43
Adapter (3)
interface Stack {
void push(Object o);
Object pop();
Object top();
}
/* Liste doublement chane */
class DList {
public void insert (DNode pos, Object o) { ... }
public void remove (DNode pos) { ... }
public void insertHead (Object o) { ... }
public void insertTail (Object o) { ... }
public Object removeHead () { ... }
public Object removeTail () { ... }
public Object getHead () { ... }
public Object getTail () { ... }
}
44
Bridge (1)
Problme
ce motif est utiliser lorsque lon veut dcoupler
limplmentation de labstraction de telle sorte que
les deux puissent varier indpendamment
Consquences
+ interfaces et implmentations peuvent tre
couples/dcouples lors de lexcution
45
Bridge (2)
Bridge
Consquences
+ couplage rduit
+ flexibilit accrue pour lassignation de responsabilits
aux objets
MAIS la rception nest pas garantie
47
Handler
defines an interface for handling requests
(optional) implements the successor link
ConcreteHandler
handles requests it is responsible for
can access its successor
48
Composite (1)
Problme
tablir des structures arborescentes entre des objets et les traiter
uniformment
Consquences
+ hirarchies de classes dans lesquelles lajout de nouveaux composants
est simple
+ simplification du client qui na pas se proccuper de lobjet accd
MAIS il est difficile de restreindre et de vrifier le type des composants
Exemple
java.awt.Component
java.awt.Container
49
Composite (2)
Decorator (1)
Problme
on veut ajouter/supprimer des responsabilits aux
objets en cours de fonctionnement
lhritage est impossible cause du nombre de
combinaisons, ou cause de droits daccs
Consquences
+ plus de fexibilit que lhritage
+ rduction de la taille des classes du haut de la
hirarchie
MAIS beaucoup de petits objets
51
Decorator (2)
ConcreteComponent defines an
object to which additional
responsibilities can be attached
ConcreteDecorator adds
responsibilities to the component
52
Faade (1)
Problme
ce motif est utiliser pour faciliter laccs un grand
nombre de modules en fournissant une couche
interface
Consquences
+ facilite lutilisation de sous-systmes
+ favorise un couplage faible entre des classes et
lapplication
MAIS des fonctionnalits des classes interfaces
peuvent tre perdues selon la manire dont est
ralise la Faade
53
Faade (2)
Facade
knows which subsystem classes are
responsible for a request
delegates client requests to appropriate
subsystem objects
Subsystem classes
implement subsystem functionality
handle work assigned by the Faade object
have no knowledge of the faade; that is,
keep no references to it
54
Flyweight (1)
Problme
grand nombre dobjet
le cot du stockage est lev
lapplication ne dpend pas de lidentit des objets
Consquences
+ rduction du nombre dinstances
cot dexcution lev
plus dtats par objet
55
Flyweight (2)
56
Proxy (1)
diteur
Portion visible du document
Course
Objectiv es
Portion invisible
2-2
What Is Rose
CORBA?
2-4
IncludePath
2-5
Project
Properties
2-6
Assign class to
component
2-7
Where is the code
placed?
2-8
proxy
image stocke
dans une base de
donne
57
Proxy (2)
Problme
ce motif est utiliser pour agir par procuration pour
un objet afin de contrler les oprations qui lui sont
appliques
Masquer des problmes daccs (ex : fichier)
Diffrer lexcution doprations coteuses
Contrler les droits daccs
Consquences
+ ajout dun niveau dindirection lors de laccs dun
objet permettant de cacher le fait que lobjet est dans
un autre espace dadressage, nest pas cr,
58
Proxy (3)
59
60
Command (1)
Problme
on veut effectuer des requtes sur des objets sans
avoir connatre leur structure
Consquences
+ dcouplage entre lobjet qui appelle et celui qui
excute
+ lajout de nouvelles commandes est aise dans la
mesure o la modification de classes existantes nest
pas ncessaire
62
Command (2)
operation
request
63
Interpreter (1)
Problme
ce motif est utiliser lorsque lon veut reprsenter la
grammaire dun langage et linterprter, lorsque :
La grammaire est simple
lefficacit nest pas critique
Consquences
+ facilit de changer et dtendre la grammaire
+ limplmentation de la grammaire est simple
MAIS les grammaires complexes sont dures tenir jour
64
Interpreter (2)
NonTerminalExpression implements an
TerminalExpression implements an
interpreter
Iterator (1)
Problme
ce motif est utiliser pour parcourir une collection dlments
sans accder sa structure interne
Consquences
+ des variations dans le parcours dune collection sont
possibles,
+ simplification de linterface de la collection
+ plusieurs parcours simultans de la collection sont possibles
66
Iterator (2)
Iterator
defines an interface for accessing and
traversing elements
ConcreteIterator
implements the Iterator interface
keeps track of the current position in the
traversal of the aggregate
Aggregate
defines an interface for creating an Iterator
object
ConcreteAggregate
implements the Iterator creation interface to
return an instance of the proper
ConcreteIterator
67
Mediator (1)
Problme
Assurer linteraction entre diffrents objets en assurant leur indpendance :
Les interactions entre les objets sont bien dfinies mais conduisent des
interdpendances difficiles comprendre, ou
La rutilisation dun objet est difficile de part ses interactions avec plusieurs
objets
Consquences
+ limitation de la compartimentation : le mdiator contient le comportement
qui serait distribu sinon entre les diffrents objets, indpendance des
"Colleagues"
+ simplification des protocoles (many-to-many one-to-many)
+ abstraction des cooprations entre objets
MAIS centralisation du contrle, complexit possible du Mdiator
68
Mediator (2)
ConcreteMediator
implements cooperative behavior by
coordinating Colleague objects
knows and maintains its colleagues
Colleague classes
each Colleague class knows its Mediator
object
each colleague communicates with its
mediator whenever it would have otherwise
communicated with another colleague
69
Memento (1)
Problme
on veut sauvegarder ltat ou une partie de ltat dun
objet
sans violer le principe dencapsulation
Consquences
+ garder les limites de lencapsulation
peut-tre coteux en mmoire et en excution
70
Memento (2)
Memento
stores internal state of the Originator object
protects against access by objects other
than the originator
Originator creates a memento containing
a snapshot of its current internal state
Caretaker
is responsible for the mementos
safekeeping
never operates on or examines the contents
of a memento
71
Observer (1)
Problme
on veut assurer la cohrence entre des classes cooprant
entre elles tout en maintenant leur indpendance
Consquences
+ couplage abstrait entre un sujet et un observeur, support pour
la communication par diffusion,
MAIS des mises jour inattendues peuvent survenir, avec
des cots importants.
Exemple
java.util.Observable
java.util.Observer
72
Observer (2)
Observer (3)
import java.util.Observable;
...
public class EventSource extends Observable implements Runnable {
public void run() {
try {
final InputStreamReader isr = new InputStreamReader(System.in);
final BufferedReader br = new BufferedReader(isr);
while (true) {
final String response = br.readLine();
setChanged();
import java.util.Observable;
notifyObservers(response);
import java.util.Observer;
}
} catch (IOException e) {
public class ResponseHandler implements Observer {
e.printStackTrace();
private String resp;
}
}
public void update(Observable obj, Object arg) {
}
if (arg instanceof String) {
resp = (String) arg;
System.out.println("\nReceived Response: "
+ resp);
public class myapp {
}
public static void main(String args[]) {
}
System.out.println("Enter Text >");
}
// cration dun metteur - lit dans stdin
EventSource evSrc = new EventSource();
// cration dun observer
ResponseHandler respHandler = new ResponseHandler();
// inscrire lobserveur chez lmetteur
evSrc.addObserver(respHandler);
// excution du programme
evSrc.run();
}
}
74
State (1)
Problme
ce motif est utiliser lorsque lon veut quun objet
change de comportement lorsque son tat interne
change
Consquences
+ possibilit dajouter ou de retirer des tats et des
transitions de manire simple
+ suppression de traitements conditionnels
+ les transitions entre tats sont rendues explicites
75
State (2)
Context
defines the interface of interest to clients
maintains an instance of a ConcreteState subclass that
defines the current state
ConcreteState subclasses
each subclass implements a behavior
associated with a state of the Context
State
defines a interface for encapsulating the behavior
associated with a particular state of the Context.
76
Strategy (1)
Problme
on veut (i) dfinir une famille dalgorithmes, (ii) encapsuler
chacun et les rendre interchangeables tout en assurant que
chaque algorithme peut voluer indpendamment des clients
qui lutilisent
Consquences
+ Expression hirarchique de familles dalgorithmes, limination
de tests pour slectionner le bon algorithme, laisse un choix
dimplmentation et une slection dynamique de lalgorithme
Les clients doivent faire attention la stratgie, surcot li
la communication entre Strategy et Context, augmentation du
nombre dobjets
77
Strategy (2)
Strategy
declares an interface common to all
supported algorithms
ConcreteStrategy implements the
algorithm using the Strategy interface
Client
is configured with a ConcreteStrategy object
maintains a reference to a Strategy object
may define an interface that lets Strategy access
its data
78
Visitor (1)
Problme
Des oprations doivent tre ralises dans une structure dobjets
comportant des objets avec des interfaces diffrentes
Plusieurs oprations distinctes doivent tre ralises sur des objets dune
structure
La classe dfinissant la structure change rarement mais de nouvelles
oprations doivent pouvoir tre dfinies souvent sur cette structure
Consquences
+ lajout de nouvelles oprations est ais
+ union de diffrentes oprations et sparations dautres
MAIS lajout de nouvelles classes concrtes est freine
79
Visitor (2)
80
Visitor (3)
81
Usage et synthse
82
flexibilit, rutilisation.
83
View-Model
Observer
View-Controler
Strategy
Factory Method
Controler-Model
Command
84
86
Penser interface
Quest-ce qui fait partie dun objet ou non ?
Memento : mmorise les tats, retour arrire
Decorator : augmente l'interface
Proxy : interface dlgue
Visitor : regroupe des interfaces
Facade : cache une structure complexe d'objet
87
Spcifier limplmentation
Diffrence type-classe...
Chain of Responsibility ; mme interface, mais implantations
diffrentes
Composite : les Components ont une mme interface dont
l'implantation est en partie partage dans le Composite
Command, Observer, State, Strategy ne sont souvent que
des interfaces abstraites
Prototype, Singleton, Factory, Builder sont des abstractions
pour crer des objets qui permettent de penser en termes
d'interfaces et de leur associer diffrentes implantations
88
Mieux rutiliser
Hritage vs Composition
white-box reuse : rompt l'encapsulation - stricte ou non
black-box reuse : flexible, dynamique
Ce nest pas...
une brique
Un pattern dpend de son environnement
une rgle
Un pattern ne peut pas sappliquer mcaniquement
une mthode
Ne guide pas une prise de dcision : un pattern est la dcision prise
90
Bibliographie
91
Bibliographie
Pattern Languages of Program Design , Coplien J.O., Schmidt D.C., AddisonWesley, 1995.
Pattern languages of program design 2 , Vlissides, et al, ISBN 0-201-89527-7,
Addison-Wesley
Pattern-oriented software architecture, a system of patterns , Buschmann, et al,
Wiley
Advanced C++ Programming Styles and Idioms , Coplien J.O., Addison-Wesley,
1992.
S.R. Alpert, K.Brown, B.Woolf (1998) The Design Patterns Smalltalk Companion,
Addison-Wesley (Software patterns series).
J.W.Cooper (1998), The Design Patterns Java Companion,
http://www.patterndepot.com/put/8/JavaPatterns.htm.
S.A. Stelting, O.Maasen (2002) Applied Java Patterns, Sun Microsystems Press.
Communications of ACM, October 1997, vol. 40 (10).
Thinking in Patterns with Java http://mindview.net/Books/TIPatterns/
92
Vince Huston
http://home.earthlink.net/~huston2/
Composite : Exercice
Chacun des membres de la compagnie reoit un
salaire.
A tout moment, il doit tre possible de demander le
cot dun employ.
Le cot dun employ est calcul par :
Le cot dun individu
est son salaire.
Le cot dun responsable
est son salaire plus
celui de ses subordonns.
94
95
96
Frame
Interface
Observer
CounterView
Counter
RectangleView
IncreaseDetector
DecreaseDetector
Button
ButtonController
CounterButton
IncreaseButton
CounterTextView
DecreaseButton
97