of 84
8/15/2019 les patrons de conception
1/84
Patrons de conception
François Schwarzentruber ENS Cachan – Antenne de Bretagne
8/15/2019 les patrons de conception
2/84
Qu'est ce qu'un patron de conception ?
une problématique :pouvoir annuler
une façon destructurer le programme
8/15/2019 les patrons de conception
3/84
Ce cours parle de ça :
Propriétés fonctionnelles
● Correction d'un algorithme
● Complexité temps/espace
● Vivacité
● Propriétés nonfonctionnelles
● acile ! comprendre
● acile ! partager ● acile ! étendre
8/15/2019 les patrons de conception
4/84
Sagesse des anciens : ne pas réinventer la roue
● "ombres entiers
● #atrices
● $ubi%'s cube&&&
Théorie des groupes
(variste )alois*
● +ous,groupes
● -rdre d'un élément
● Prouveur
● .eu
● ogiciel de dessin
Patrons de conception
● 0 açade 1
● 0 Visiteur 1
#2me concepts #2me problématiques
de génie logiciel
8/15/2019 les patrons de conception
5/84
Sagesse des anciens : du vocabulaire !
3 notre probl4me5appliquons le
patron 0 Visiteur 1 6
Comme l'extension est galoisienne&&&
a cr4me anglaisesera parfaite avec
le g7teau&
8/15/2019 les patrons de conception
6/84
Plan un cours catalogue de bonnes recettes decuisine "#
● Patrons de création
● Patrons de structure
● Patrons de comportement
8/15/2019 les patrons de conception
7/84
Patrons de création
● Patron 0 abrique abstraite 1
● Patron 0 Protot8pe 1
8/15/2019 les patrons de conception
8/84
$%&S crée une application pour apprendrel'algorith(ique
8/15/2019 les patrons de conception
9/84
)esoin : adapter le logiciel pour di**érentes plate+*or(es
9indos
inux
#ac-+
3ndroid
8/15/2019 les patrons de conception
10/84
)esoin : adapter le logiciel pour di**érents publics
enfants
l8céens
8/15/2019 les patrons de conception
11/84
Constat : on a créé des ob,ets un peu partout !
ne-
ne-
n e -
ne-
ne-
8/15/2019 les patrons de conception
12/84
Solution non (aintenable
if (pourlesEnfants)
b ! new bri"ueEffacer#out$ourEnfant() &'else
b ! new bri"ueEffacer#out$ourceen() &
'
b ! new Bri"ueEffacer#out() &
8/15/2019 les patrons de conception
13/84
Patron de conception : *abrique abstraite
-n va devoir adapter notre
logiciel d'algorithmique! deux publics&
Comment faire ;
-n appliquele patron de conception
0 fabrique abstraite 1&
8/15/2019 les patrons de conception
14/84
Solution : isoler la création des ob,ets dans des *abriques abstraites "
stp5 fabrique moiune brique0
8/15/2019 les patrons de conception
15/84
Solution : isoler la création des ob,ets dans des *abriques abstraites "
stp5 fabrique moiune brique0
8/15/2019 les patrons de conception
16/84
Solution : isoler la création des ob,ets dans des *abriques abstraites "
stp5 fabrique moiune brique0
8/15/2019 les patrons de conception
17/84
)onne solution
fabri"ueBri"ues*getNou+elleBri"ueEffacer#out()
b ! new Bri"ueEffacer#out() &
abrique3bstraitefabrique>riques? ne abrique
8/15/2019 les patrons de conception
18/84
Patron de conception : *abrique abstraite
8/15/2019 les patrons de conception
19/84
Patron de conception : *abrique abstraite
8/15/2019 les patrons de conception
20/84
.iagra((e de séquence de la *abrique abstraite
+ource : cours de "o@l PlouAeau
8/15/2019 les patrons de conception
21/84
Conclusion sur la *abrique abstraite
● B 3outer une nouvelle plate,forme
● B 3ssurer la cohérence du logiciel deux plate,formes nesont pas mélangées*
● B Cloisonne les besoins du client et les soucis dus auxplate,formes
● , $aout d'un nouveau composant brique5 bouton&&&* difficile
8/15/2019 les patrons de conception
22/84
Créer des ob,ets selon un (od/le : le patron protot0pe "
+ource : logiciel Dia
8/15/2019 les patrons de conception
23/84
)esoins
● Créer selon des mod4les
●
8/15/2019 les patrons de conception
24/84
1 ne pas *aire : une création di**érente au sein de chaquebouton222
new Maison(Color.RED,
Color.WHITE, 16, 32, 16)
new Arbre(Color.GREEN,
Color.R!WN, ", 32, ")
8/15/2019 les patrons de conception
25/84
1 *aire
Chaque bouton contientun protot8pe ! cloner&
8/15/2019 les patrons de conception
26/84
.iagra((e de classe de Protot0pe "
+ource : i%ipedia
8/15/2019 les patrons de conception
27/84
Conclusion sur le patron Protot0pe "
● B Copier un obet sans se soucier de sa classe exacte
● B 3outer d8namiquement des obets ! une palette
● , le mécanisme de clonage ! créer
8/15/2019 les patrons de conception
28/84
Patrons de structure
● 3dapter une interface E adaptateur*
● $endre un programme lisible interface simplifiée E façade*
● +tructures récursives E composite*
● Ftilisation de la délégation E décoration*
8/15/2019 les patrons de conception
29/84
Patron de conception 1daptateur "
$o G $o H $o I $o JK
H
J
L
M
GK
GH
Column GColumn HColumn I
-bet)raphique
get>ounds* : $ect
-pen-ffice)raphicsidthheight
interface utilisée par mon logiciel*
8/15/2019 les patrons de conception
30/84
8/15/2019 les patrons de conception
31/84
Patron *açade " : 3 un besoin si(ple4 une inter*acesi(ple
#on besoin :
Nnterpréteur +cheme(# ($ 2 3) %) 11
8/15/2019 les patrons de conception
32/84
Patron *açade " : 3 un besoin si(ple4 une inter*acesi(ple
8/15/2019 les patrons de conception
33/84
Patron *açade "
+ource : Patterns in .ava5 Volume G: 3 Catalog of $eusable Design Patterns Nllustrated ith F#5 +econd
8/15/2019 les patrons de conception
34/84
.i**érence entre le patron 5açade " et 1daptateur "
5açade
● >ut : créer une interfacesimplifiée ! unebiblioth4que complexe !utiliser
1daptateur
● >ut : offrir une interfaceconforme et adapter uneclasse
8/15/2019 les patrons de conception
35/84
8/15/2019 les patrons de conception
36/84
Patron Co(posite "
+ource : i%iboo%s
8/15/2019 les patrons de conception
37/84
8/15/2019 les patrons de conception
38/84
8/15/2019 les patrons de conception
39/84
Patron .écoration " utilise la délégation
● 3vec ladélégation on a-n* classes&
fen2tre*
interface d'une fen2tre*
décorateur abstrait*
décorateur concretcomme 0 fen2tre avecun fond 1*
8/15/2019 les patrons de conception
40/84
Conclusion sur le patron .écorateur "
● B #eilleure maintenance que des 0 if 1
● B #oins de classes qu'avec l'héritage
● B #odifier d8namiquement les décorations
● , Comportement inattendu&&&
new FenetreBordure(new FenetreFond(f))
~ new FenetreFond(new FenetreBordure(f)) ?
8/15/2019 les patrons de conception
41/84
Patrons de co(porte(ent
● Nnterface graphique rafraOchissement5 souris5 clavier&&&*
● Conversion de données
● Pouvoir annuler des commandes
● Nmplémenter plusieurs algorithmes
8/15/2019 les patrons de conception
42/84
8/15/2019 les patrons de conception
43/84
8/15/2019 les patrons de conception
44/84
Patron de conception : observateur
-n veut assurer la cohérencede l'interface graphique&
Comment faire ;
-n appliquele patron de conception
0 observateur 1&
8/15/2019 les patrons de conception
45/84
8/15/2019 les patrons de conception
46/84
.iagra((e de classe du (od/le %bservateur
8/15/2019 les patrons de conception
47/84
1utre application de %bservateur " : gestion desentrées9sorties
obet qui écoute et effectue une action
8/15/2019 les patrons de conception
48/84
8/15/2019 les patrons de conception
49/84
1 t li ti d %b t i d
8/15/2019 les patrons de conception
50/84
1utre application de %bservateur " : conversions dedonnées d'un *or(at vers un autre
a=
8/15/2019 les patrons de conception
51/84
8/15/2019 les patrons de conception
52/84
8/15/2019 les patrons de conception
53/84
8/15/2019 les patrons de conception
54/84
8/15/2019 les patrons de conception
55/84
8/15/2019 les patrons de conception
56/84
8/15/2019 les patrons de conception
57/84
Probl/(es
● annuler des commandes ;
● enregistrer des macros ;
● la classe 0 Dessin 1 grossit si on raoute des opérations
8/15/2019 les patrons de conception
58/84
Patron de conception Co((ande "
8/15/2019 les patrons de conception
59/84
Patron de conception Co((ande ".iagra((e de classe
Patron de conception Co((ande "
8/15/2019 les patrons de conception
60/84
Patron de conception Co((ande ".iagra((e de classe
8/15/2019 les patrons de conception
61/84
8/15/2019 les patrons de conception
62/84
8/15/2019 les patrons de conception
63/84
8/15/2019 les patrons de conception
64/84
8/15/2019 les patrons de conception
65/84
8/15/2019 les patrons de conception
66/84
Solution : le patron de conception $isiteur "
8/15/2019 les patrons de conception
67/84
Solution : le patron de conception $isiteur "
Solution : le patron de conception $isiteur "
8/15/2019 les patrons de conception
68/84
Solution : le patron de conception $isiteur "
public void visitVisitor visitor*T
visitor&visitParagraph this*U
8/15/2019 les patrons de conception
69/84
$isitor
8/15/2019 les patrons de conception
70/84
8/15/2019 les patrons de conception
71/84
8/15/2019 les patrons de conception
72/84
8/15/2019 les patrons de conception
73/84
8/15/2019 les patrons de conception
74/84
8/15/2019 les patrons de conception
75/84
8/15/2019 les patrons de conception
76/84
8/15/2019 les patrons de conception
77/84
8/15/2019 les patrons de conception
78/84
>8e(ple
8/15/2019 les patrons de conception
79/84
8/15/2019 les patrons de conception
80/84
8/15/2019 les patrons de conception
81/84
Patron de conception état "
8/15/2019 les patrons de conception
82/84
+lass Ea/i0ee i'0le'ens EaDessin
0*bli+ oi 'o*se40()
essin.seEa(new EaCraon())5
0*bli+ +lass Dessin 0riae EaDessin 'onEa5
0*bli+ Dessin()
seEa(new EaCraon())5
0*bli+ oi seEa(EaDessin no*elEa)
&is.'onEa 7 no*elEa5
0*bli+ oi 'o*se40()
&is.'onEa.'o*se40()5
)re* c'est un auto(ate222 d'ailleurs &; prévoit une s0nta8e " pour ça : les state (achine "
8/15/2019 les patrons de conception
83/84
8/15/2019 les patrons de conception
84/84