Motifs de conception / Design Patterns
Gr´egory Bonnet, Bruno Zanuttini
Lundi 13 octobre 2014
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
1/15
Introduction
Il est ais´e de se perdre dans la conception d’un logiciel :
(cid:73) difficult´e `a capitaliser l’exp´erience
(cid:73) ´ecueils : d´ependances, redondances, complexit´e. . .
(cid:73) inutile de r´einventer la roue
Designs patterns :
(cid:73) solutions a des problemes r´ecurrents de conception objet
(cid:73) simplifient la conception du logiciel
(cid:73) d´efinissent un vocabulaire commun
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
2/15
Pr´esentation des design patterns
Formul´es de mani`ere abstraite, ind´ependante du contexte ou de
l’application.
(cid:73) Nom
(cid:73) Probl`eme trait´e (but)
(cid:73) Solution et b´en´efices (moyen)
(cid:73) Cons´equences et ´eventuelles remarques concernant l’implantation
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
3/15
Publicité
Composite
But : traiter de mani`ere indiff´erente des objets ou ensembles d’objets
(cid:73) Classe abstraite, d´eriv´ee en feuilles et en composites
(cid:73) Les composites contiennent des composants abstraits
(cid:73) Typiquement, op´eration du composite = boucle sur ses composants
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
4/15
Singleton
But : garantir une seule instance d’une classe donn´ee
(cid:73) Constructeur priv´e
(cid:73) Une seule instance :
(cid:73) stock´ee dans une variable de classe (statique)
(cid:73) accessible par une m´ethode
(cid:73) cr´e´ee de fac¸on statique ou au premier appel de cette m´ethode
(cid:73) Il faut g´erer les acces concurrents a getInstance
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
5/15
Strat´egie
But : permettre `a un objet de modifier dynamiquement un comportement
sans changer de classe
(cid:73) Le comportement n’est pas impl´ement´e dans la classe de l’objet
(cid:73) L’objet contient une strat´egie et peut en modifier l’instance
(cid:73) Les strat´egies sont impl´ement´ees dans diff´erentes classes concr`etes
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
6/15
Publicité
It´erateur
But : d´ecoupler d’une structure l’it´eration sur ses ´elements
(cid:73) La structure fournit des it´erateurs sur elle-mˆeme
(cid:73) Plusieurs it´erations simultan´ees sur la mˆeme structure sont possibles
(cid:73) La structure peut ne pas ˆetre un agr´egat
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
7/15
Usine/Factory Method
But : permettre de cr´eer des objets sans savoir leur type pr´ecis
(cid:73) Les objets `a cr´eer h´eritent d’une classe abstraite commune C
(cid:73) Une usine abstraite U permet de cr´eer des objets de type C
(cid:73) Pour chaque type concret C 0, une classe U 0 h´erite de U
(cid:73) Ne pas confondre avec Usine abstraite/Abstract Factory
(cid:73) Variante “Method” : une seule classe d’usine
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
8/15
Adaptateur (de classe)
But : utiliser une classe C qui n’impl´emente pas une interface requise
(cid:73) Faire h´eriter de C une nouvelle classe C 0
(cid:73) Faire impl´ementer l’interface requise `a C 0
(cid:73) D´efinir les m´ethodes en utilisant les m´ethodes de la surclasse C
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
9/15
Adaptateur (d’objet)
But : utiliser une classe C qui n’impl´emente pas une interface requise
Publicité
(cid:73) D´efinir une nouvelle classe C 0
(cid:73) Faire impl´ementer l’interface requise `a C 0
(cid:73) D´efinir les m´ethodes en utilisant une instance de C par d´el´egation
(cid:73) Adaptateur de classe : limite les instances et les indirections
(cid:73) Adaptateur d’objet : permet d’adapter une hi´erarchie de classes
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
10/15
Fac¸ade
But : permettre l’utilisation simple d’un ensemble de classes pour des
tˆaches courantes
(cid:73) Une classe propose des m´ethodes qui r´ealisent les tˆaches usuelles
(cid:73) Ces tˆaches sont r´ealis´ees en utilisant l’ensemble des autres classes
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
11/15
Observateur/Observ´e
But : permettre `a des objets de prendre en compte les changements
d’autres objets `a chaque fois qu’ils se produisent
(cid:73) Les observateurs ne sont pas cens´es modifier les objets observ´es
lorsqu’ils sont notifi´es
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
12/15
D´ecorateur
But : attacher dynamiquement des caract´eristiques `a des objet sans devoir
cr´eer un grand nombre de classes filles
(cid:73) Une classe D´ecoration est cr´e´ee pour chaque caract´eristique
Publicité
(cid:73) Chaque d´ecoration contient un objet (et ses caract´eristiques,
r´ecursivement)
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
13/15
Chaˆıne de responsabilit´e
But : ´eviter le couplage entre la source d’une requˆete et son destinataire
(cid:73) Permettre `a plusieurs classes inconnues de traiter la requˆete
(cid:73) Chaˆıner les objets traitants
(cid:73) Faire passer la requˆete dans la chaˆıne jusqu’`a ce qu’elle soit trait´ee
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
14/15
Remarques g´en´erales
(cid:73) Les design patterns sont des structures abstraites qu’il faut instancier
(cid:73) Pour chacun, de nombreuses variantes existantes ou `a imaginer
(cid:73) Nous n’avons vu qu’un sous-ensemble des motifs de conception
Plus de design patterns :
(cid:73) Catalogue de mod`eles de conceptions r´eutilisables
(Erich Gamma et al., 1999)
(cid:73) http://c2.com/cgi/wiki ?CategoryPattern
(cid:73) http://sourcemaking.com/design patterns
Gr´egory Bonnet, Bruno Zanuttini
G´enie logiciel
15/15