Motifs de conception / Design Patterns

Software Engineering · notes

Browse all génie logiciel documents

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

Advertisement

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

Advertisement

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

Advertisement

(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

Advertisement

(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