cours design patterns€¦ · design patterns: classification 7 patterns créateurs ciblent la...

63
Design patterns 3 o Solutions « prototypiques » à des problèmes objets o Réutilisable à des problèmes récurrents o Peu d’algorithmique, plus des schéma orientés-objet o Façons d’organiser le code pour augmenter o Flexibilité o Maintenabilité o Extensibilité o Configurabilité o o Le plus souvent basé sur des interfaces et abstractions P. Esling - JAVA - Cours 7. Design Patterns

Upload: others

Post on 03-Jun-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Designpatterns

3

o Solutions« prototypiques »àdesproblèmesobjetso Réutilisableàdesproblèmesrécurrentso Peud’algorithmique,plusdesschémaorientés-objeto Façonsd’organiserlecodepouraugmenter

o Flexibilitéo Maintenabilitéo Extensibilitéo Configurabilitéo …

o Leplussouventbasésurdesinterfacesetabstractions

P.Esling- JAVA- Cours 7.DesignPatterns

Page 2: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Designpatterns:principes

4

Principe1:Favoriserlacomposition(liensdynamiques,flexibles)surl’héritage(lienstatique,peuflexible)o Ladélégationestunexempledecompositiono Attentionils’agitjustedefavoriser carl’héritageestégalementtrèsutilisédanslesdesignspatterns

Principe2:Lesclientsprogrammentenprioritépourdesabstractions(interfaces)plutôtqu’enlienaveclesimplémentationsconcrètes(classes)

Principe3:Privilégierl’encapsulationforte

P.Esling- JAVA- Cours 7.DesignPatterns

Page 3: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Intérêtdespatterns

5

• Unvocabulairecommunetpuissant• Lespatternsaidentàconcevoirfacilementdessystèmes

• Réutilisables:Responsabilitésisolées,dépendancesmaitrisées• Extensibles:Ouvertsauxenrichissementsfuturs• Limiterlamodificationdel’existant• Maintenablesparfaiblecouplage

• Lespatternsreflètentl’expériencededéveloppeursobjets• Solutionséprouvéesetsolides

• Lespatternsnesontpasducodemaisdescadresdesolutionsgénéralesàadapteràsonproblèmeparticulier

• Lespatternsaidentàmaîtriserleschangements• Lessolutionsplustrivialessontsouventmoinsextensibles

• Attentionàl’overkill !Utilisezlespatternsintelligemment

P.Esling- JAVA- Cours 7.DesignPatterns

Page 4: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Encapsulationniveauobjet

6

Encapsulation au niveau Objet OBJET

Services publics

Donnéesprotégées

EnvironnementMessages

P.Esling- JAVA- Cours 7.DesignPatterns

Page 5: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Designpatterns:classification

7

PatternscréateursCiblentlaconstructiondesobjets(« aider »new,clone)– PatternsFactory,AbstractFactory,Singleton …

PatternsstructurauxTravaillentsurdesaspectsstatiques,à« l’extérieur »desclasses(notammentextensibilité)– PatternsFaçade,Adapter,Decorator,Proxy,Composite…

PatternscomportementauxTravaillentsurdesaspectsdynamiques,à«l’intérieur »desclasses(parfoismêmedesinstances)– PatternsStrategy,Iterator,Observer,Visitor

P.Esling- JAVA- Cours 7.DesignPatterns

Page 6: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Notreréférence:Formes

8

L’exemple Formes! On souhaite réaliser une application de dessin, qui

manipule des formes.! Pour manipuler ces formes, on considère : ! Pour manipuler ces formes, on considère :

public interface Forme {public void translate (int dx, int dy);

public void dessine (Graphics g);}}

• Onvaréaliseruneapplicationdedessin.• Celle-cisebasesurdesformesàutiliser• Pourcelaondéfinitl’interfaceFormesuivante

P.Esling- JAVA- Cours 7.DesignPatterns

Page 7: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Formes:Carré

9

Classe Carrepublic class Carre implements Forme {private int x;private int y;private int cote;private int cote;public Carre(int x, int y, int cote) {this.x = x;this.y = y;this.cote = cote;

}public void translate(int dx, int dy) {

x += dx;x += dx;y += dy;

}public void dessine(Graphics g) {

g.drawRect(x, y, cote, cote);}

}P.Esling- JAVA- Cours 7.DesignPatterns

Page 8: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Formes:Cercle

10

Classe Cerclepublic class Cercle implements Forme {private int x;private int y;private int rayon;private int rayon;public Cercle(int x, int y, int rayon) {this.x = x;this.y = y;this.rayon = rayon;

}public void translate(int dx, int dy) {

x += dx;x += dx;y += dy;

}public void dessine(Graphics g) {

g.drawOval(x, y, rayon, rayon); }

}P.Esling- JAVA- Cours 7.DesignPatterns

Page 9: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Dessin=Listedeformes

11

Un Dessin : ensemble de formes

public class Dessin {List<Forme> formes = new ArrayList<Forme>();

public void add (Forme f) {formes.add(f);

}public void translate(int dx, int dy) {

for (Forme f : formes) f.translate(dx, dy);}}public void dessine(Graphics g) {

for (Forme f : formes)f.dessine(g);}

}

P.Esling- JAVA- Cours 7.DesignPatterns

Page 10: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Diagrammedeclasses

12

Diagramme de Classes

P.Esling- JAVA- Cours 7.DesignPatterns

Page 11: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Mélangerdesformes?

13

• Pourétendrelespossibilitésdedessin,onpenseauxmélanges• CommentcréerunCarréCercleConcentrique (carrécontenantet

cercleetcontenudansunautre)?• Option1:Implémentationdirecte(x,y)etlongueur

– Forteredondancedanslecode• Option2:Représenterparundessinlui-même!

– Toutesformesestlacompositiondeformesdebase– Onpeutdoncreprésenterparunelistedeformes(ie.Dessin)– Ici,contiendrauncarréetdeuxcercles…– Maisnécessitequedessinsoitaussiuneforme

• L’option2estladéfinitioncorrespondantau patternComposite

P.Esling- JAVA- Cours 7.DesignPatterns

Page 12: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternComposite

14

• Objectif :traiterdesstructuresarborescentes– Arbresdesyntaxe– Expressionarithmétiques– Arborescencedefichiers

• Structure– Component,unnœuddel’arbrequelconqueabstrait– Leaf,unefeuilledel’arbrequin’apasdefils– Composite,unnœudayantdesfilsComponent

P.Esling- JAVA- Cours 7.DesignPatterns

Page 13: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternComposite:Formes

15

Formes : DP Composite

P.Esling- JAVA- Cours 7.DesignPatterns

Page 14: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternComposite:Formes

16

Formes : DP Composite

Component

P.Esling- JAVA- Cours 7.DesignPatterns

Page 15: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternComposite:Formes

17

Formes : DP Composite

Component

Leaf Leaf

P.Esling- JAVA- Cours 7.DesignPatterns

Page 16: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternComposite:Formes

18

Formes : DP Composite

Component

Leaf Leaf

Composite

P.Esling- JAVA- Cours 7.DesignPatterns

Page 17: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternComposite:Formes

19

Formes : DP Composite

Component

Leaf Leaf

Composite

Contient

P.Esling- JAVA- Cours 7.DesignPatterns

Page 18: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternComposite:Formes

20

Formes : DP Composite

Component

Leaf Leaf

Composite

Contient

Hérite

P.Esling- JAVA- Cours 7.DesignPatterns

Page 19: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternComposite:Formes

21

• publicclassDessinimplements Forme• ConstruirenotreCarreCercleConcentrique

• AucunelimitesurlacompositionJ• IciunDessinpeutêtrelacomposition…• …d’unensemblededessins

Composite dans Formes! public class Dessin implements Forme! Construire un CarreCercleConcentrique

Dessin d = new Dessin();

! Les imbrications sont possibles :! Dessin qui contient des Dessins

Dessin d = new Dessin();d.add(new Carre(x,y,width));d.add(new Cercle(x+width/2, y + width/2, width/2));return d;

P.Esling- JAVA- Cours 7.DesignPatterns

Page 20: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternCompositegénérique

22

DP Composite : structure

P.Esling- JAVA- Cours 7.DesignPatterns

Page 21: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternCompositeinstancié

23

aComposite

aLeaf aLeaf

aLeaf aLeaf aLeaf

aComposite aLeaf

P.Esling- JAVA- Cours 7.DesignPatterns

Page 22: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Intérêtetsubtilité

24

• PermetdemanipulerlesCompositeetlesFeuillesdemanièrehomogèneettransparente

• Permetderécursivementsupporterquelesfilsd’unCompositesoienteux-mêmesComposites– Lesopérandesd’uneExpressionsontdesExpression– (exemplemathématique)

• DoublelienComposite– Component.UncompositeestunComponentetréférencedesComponent

• FonctionsdemanipulationdéclaréessurComponent– Unefeuillen’apasdefils– EviteauclientdeconnaîtrelesclassesComposite

P.Esling- JAVA- Cours 7.DesignPatterns

Page 23: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Mini-exerciceComposite

25

• Créerunensembledeclassesdeformes• AjouterunDesignPatternComposite

– Créeruneclassecomposite– Gérerl’architecturedesclasses– Gérerlesfonctionsdedéplacementetdessin

• Testervotrecompositeencréantdescompositesimbriqués• CréeruneinterfacegraphiqueSwingdedessin• DeuxJpanels:unpourledessinetl’autrepourlecontrôle• Lepaneldecontrôlepermet

– Ajouterdesformessimples(àdessiner)– Unelistedeformespermetdecontrôlercellesdéjàajoutées– Unsous-panelpermetdecréeruncomposite(ajoutitératif)

P.Esling- JAVA- Cours 7.DesignPatterns

Page 24: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternProxy

26

• Proxy:objetfaisantsemblantd’êtreunautreobjet• Parexempleleproxyréseau devotrebrowser

• Secomportecommeungateway internet(box)• Maisrajoutedestraitements(filtres,cache,…)

• PourlaPattern,leproxyestuneclassequiimplémentelesmêmeopérationsquel’objet qu’elleprotège/contrôle.

• PlusieursvariantesdeProxysuivantl’usage• ProxyVirtuel:retardelesallocations/calculscouteux• ProxydeSécurité:filtre/contrôlelesaccèsàunobjet• ProxyDistant:objetlocalsecomportantcommeledistant(etdonc

masqueleréseau)• SmartReference:proxyquicomptelesréférences(GC)

P.Esling- JAVA- Cours 7.DesignPatterns

Page 25: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternProxyVirtuel

27

• Permetderetarderlesopérationscoûteuses• ParexempledansunéditeurdetextetypeWord• Ledocumentestremplid’images« lourdes »• Celles-cisontstockéesdansdesfichiersséparés

• Quandonouvreundocument,ilfautcalculerlamiseenpage• …Etdonclatailledesimages• …Etdoncfairelerendudesimagesprésentespartout• …Quellelenteur!

• Commentretarderlechargementdesimages?

P.Esling- JAVA- Cours 7.DesignPatterns

Page 26: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Proxyvirtuel:Example

28

Proxy Virtuel : Exemple

P.Esling- JAVA- Cours 7.DesignPatterns

Page 27: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

ProxyVirtuel:Principes

29

• OnconstruitinitialementdesImageProxy pourchaqueimage• ParexempleledocumentlefaitviauneImageFactory

• Cesobjetsstockentetconnaissentlatailledel’image• Cen’estquelorsqu’onaffichelapageavecl’image(correspond

àlaprèmière invocationdedraw surleproxy)quel’imagevaêtrechargée(àlavolée).

• Conclusion:ledocuments’ouvrerapidementetenpluslemécanismeesttransparentpourl’utilisateur!

• ImpossiblededistinguerleProxydel’objetréel!

P.Esling- JAVA- Cours 7.DesignPatterns

Page 28: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternProxy

30

DP Proxy : Structure

! Subject : interface manipulée par le client! RealSubject : un objet lourd à instancier! Proxy : retarde la création du sujet réel! Délégation particulière, où délégat (Proxy) et délégué

(RealSubject) réalisent la même interface

Interfacemanipuléeparleclient

Objetlourdàinstancier

Retardelacréationdusujetréel

Délégationparticulièreoudélégat (Proxy)etdélégué(RealSubject)réalisentlamêmeinterface

P.Esling- JAVA- Cours 7.DesignPatterns

Page 29: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Proxydesécurité

31

• Permetdeprotégeroucontrôleslesaccèsàunobjet• ExempleForumdediscussion

• ClasseForum:munied’uneopérationdepost• posterUnMessage(Auteura,Messagem)

• LaclasseForumexiste,ils’agitdenepaslamodifier• Commentbloquerdesmessagesindésirables• Contenantdesmotsclésinterdits(langageSMS,Bieber)• Cettefoisunproxydesécurité• Cecipermetd’êtreorthogonalautraitementprotégé

• Lasécuritéestunecouchesupplémentaire• Distinctedutraitementdebase…• Maistransparentepourl’utilisateur!

P.Esling- JAVA- Cours 7.DesignPatterns

Page 30: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Proxydesécuritéforum

32

DP Proxy de Sécurité : Forum

P.Esling- JAVA- Cours 7.DesignPatterns

Page 31: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Proxydistant

33

• Onauneapplicationrépartiesurplusieursmachines• Onvoudraitdévelopperl’applicationsanstropsesoucierde

l’endroitousontstockésphysiquementlesobjets• Proxyréseau• objetlocalàlamachine• Secomportecommel’objetdistant• Répercutesesopérationssurl’objetdistantviaréseau

• Comportementpardélégation…maisavecleréseauinterposéJ

P.Esling- JAVA- Cours 7.DesignPatterns

Page 32: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Proxydistant

34

DP Proxy distant

P.Esling- JAVA- Cours 7.DesignPatterns

Page 33: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Proxydistant

35

• GénéraliselanotiondeRemote Procedure Call(RPC)• Rendstransparentlalocalisationdesobjets• RéalisationduProxyréseauetdustubsuitunelignestandard• Denombreuxframeworks offrentdegénérercetteglue• Permettentégalementdelacacherounon• Eg.JavaRMI(Remote Method Invocation)

P.Esling- JAVA- Cours 7.DesignPatterns

Page 34: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternDecorator

36

DP Decorator : Motivation

! Ajouter dynamiquement des caractéristiques ou des responsabilités à un objet

! Ajouter dynamiquement des caractéristiques ou des responsabilités à un objet

! L’objet décoré se manipule comme l’objet de base! Les decorateurs doivent pouvoir s’empiler

(Border(Scroll(Texte))

• Ajouterdynamiquementdescaractéristiquesoudesresponsabilitésàunobjet

• L’objetdécorésemanipulecommel’objetdebase• Lesdécorateursdoiventpouvoirs’empilerEg.Border(Scroll(Texte))

P.Esling- JAVA- Cours 7.DesignPatterns

Page 35: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternDecorator:exemple

37

DP Decorator : exemple

P.Esling- JAVA- Cours 7.DesignPatterns

Page 36: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternDecorator:structure

38

DP Decorator : Structure

P.Esling- JAVA- Cours 7.DesignPatterns

Page 37: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Mini-exerciceDecorator

39

• CréerunDesignPatternDecorator àdeuxvariantes• Commencerparimplémenterleschémaglobal• Onveutajouterdescouleursauxformes• Decorator deformeavecunecouleur

• Onveutpositionnerlatailleetlestyledutrait• Decorator deFormeaveclineWidth,lineStyle• Implémentationsimilaireàlaprécédente

• OnpeutégalementcombinercesDecorator

P.Esling- JAVA- Cours 7.DesignPatterns

Page 38: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Decorator:conclusions

40

• Permetdecombinerlestraitementajoutés• Evitel’explosiondunombredeclasses• Mêmesioncombinelestraitementsparhéritage

• ProchedeProxymais…• Proxyconnaîtlaréalisationparticulière• Decorator s’appuieuniquementsurl’abstraction

• ProchedeComposite,mais• Composites’intéresseauxfilsdunœudcomposite• Icionrendtransparentl’ajoutdefonctionnalités

P.Esling- JAVA- Cours 7.DesignPatterns

Page 39: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternStrategy

41

• Exemplederobotsdansunmonde=matricedecases• Robot.move()• Robot.action()• Desrobotsparesseux• Desrobotspollueur/nettoyeur• Desrobotsavecdifférentstypesdecomportements

• Héritage• RobotPollueurParesseuxRandom,RobotNettoyeurBosseur,etc…• Mêmeenconsidérantl’héritagemultiple,restedifficile• Impossibledemodifierlecomportementd’unrobotauruntime• Choixdecomportementaumomentdunew!

P.Esling- JAVA- Cours 7.DesignPatterns

Page 40: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternStrategy:structure

42

DP Strategy : structure

P.Esling- JAVA- Cours 7.DesignPatterns

Page 41: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Strategy:exemplesd’utilisation

43

• Plusieursclassesnedifférentqueparleurcomportement• Ex.robotspollueurs• Lesstratégiespeuventformerleurproprearbred’héritage

• Varianted’algorithmes,mémoirevs.Temps• Ex.Chercherunobjetdansunecollection

• L’algorithmenécessitedesstructurescomplexes quipolluentlecodeprincipaldelaclassehôte

• Votreclassepeutavoirplusieurscomportementsexpriméscommedesbranchements(switch,case,etc…)• Strategy capturechaquebranchedansuneunité

• Lecomportementd’unobjetévolueaucoursdesavie

P.Esling- JAVA- Cours 7.DesignPatterns

Page 42: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Strategy:combinaisons

44

• LepatternStrategy peuttrèsbiens’employerencomplémentd’autresdesignpatterns

• Factory/Strategy:UneFactory dontondéfinitlecomportementenleurdonnantunestratégie

• Decorator/Strategy:lesstratégiessontelles-même décorée• ProxySécurité/Strategy:Ondéfinitlapolitiquedesécurité

appliquéeparleProxyaucoursdutemps

P.Esling- JAVA- Cours 7.DesignPatterns

Page 43: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Mini-exerciceStrategy

45

• Créationd’uneIntelligenceArtificielletrèsbasique• Robotsdansunmonde=matricedecases• Miseenplaced’unDesignPatternstrategy• Lesrobotsontdespointsdevie,look(),move()etaction()• Troiscomportements(d’action)sontimplémentés

• Aggressif :Chercheàattaquerlesrobotsproches• Neutre:Sedéplacedemanièrealéatoire• Peureux:Chercheàéviterlesrobotsproches

• +Troiscomportements(dedéplacements)

• Créationaléatoirederobotspuisboucledejeu• Achaqueboucle,lesrobotssedéplacentouattaque(comportement)• Lecomportementchangeenfonctiondespointsdevie.• SiPV<50:Toutrobotdevientpeureux• SiPV<20:Ragemode,toutrobotdevientagressif

• Bonus:Afficherl’évolutiongrâceàuneinterfaceSwingP.Esling- JAVA- Cours 7.DesignPatterns

Page 44: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Designpatternscréationnels

P.Esling- JAVA- Cours1.Fondamentaux 48

• Objectif:créerlesobjetsdefaçonconfigurable

• SimpleFactory (Factory statique)– Classeresponsabledecréerdesoccurrencesd’abstractions

• AbstractFactory– Permetdepositionnerunefamilled’objetspourconfigurerunsystème

• Factory Method– Isoledestraitementscommunspouruntypedeproduitabstrait

• Singleton– Permetd’assurerqu’uneclassen’estinstanciéequ’unefois

• Prototype– Factory configurableviauneinstancequiseraclonée

Page 45: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternFactory

P.Esling- JAVA- Cours1.Fondamentaux 49

LepatternFactory permetd’isolerlescréationsd’objetsParexemple,unclientdoitpourcréeruneFormeappeler• Formef=newCarre(10,12,20)Leproblèmeestqu’ildoitdoncconnaîtreCarré,Cercle,…• Evolutiondifficile:impossibledesupprimerCarrépourmettreRectangle• CommentgérerlepassageàunComposite?

• Doncleclientdépenddesclassesconcrètescarilestforcéd’appelerleurconstructionparnew

• Onpeutretirercesdépendances,encodantuneclassequisechargedeconstruirelesobjets

Page 46: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternFactory:Formes

P.Esling- JAVA- Cours1.Fondamentaux 50

FormeFactory, version « static »

public class FormeFactory {

public static Forme createCarreCercleConcentriquepublic static Forme createCarreCercleConcentrique(int x, int y, int width) {

Dessin d = new Dessin();d.add(new Carre(x,y,width));d.add(new Cercle(x+width/2, y + width/2,

width/2));return d;

}}public static Forme createCarre (int x, int y, int

width) {return new Carre(x,y,width);

}…

}

Page 47: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternFactory

P.Esling- JAVA- Cours1.Fondamentaux 51

Leclientavant:• Formef=newCarre(10,12,20)Aprésentona:• Formef=FormeFactory.createCarre(10,12,20)

• Faireévoluerl’implémentationsansmodifierleclient• ParexempleretirerlaclasseCarrépourunRectangle• Idempourlesclassescompositesetc…

• BiensûrilfautmettreàjourlecodedelaFactory …• Maisonmaîtriselaportéedesmodifications

Page 48: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternAbstractFactory

P.Esling- JAVA- Cours1.Fondamentaux 52

DP Abstract Factory! Plus configurable que la Factory Static

! La factory elle-même est une interface abstraitePlusflexiblequelaFactory staticLafactory estelle-mêmeuneinterfaceabstraite

Page 49: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternAbstractFactory

P.Esling- JAVA- Cours1.Fondamentaux 53

DP Abstract Factory : structure

! Permet de créer des familles d’objets liés entre eux! Configurer le client = lui passer une Factory particulière• Permetdecréerdesfamillesd’objetsliésentreeux• Configurerleclient=luipasserunefactory

Page 50: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternFactory Method

P.Esling- JAVA- Cours1.Fondamentaux 54

DP Factory Method! Variante sur Factory, notion de classe à trou (abstraite)

• VariantedeFactory travaillantsurles fonctions• Notiondeclasse« àtrou »qu’onrempliparcomportements• Permetmêmedemodulerlecomportementdesclasses!

Page 51: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Factory Method :structure

P.Esling- JAVA- Cours1.Fondamentaux 55

Intérêt• Découplelaclasse(abstraite)desinstancesqu’ellemanipule• L’abstraitecontientunegrandemajoritéducode• Pasdenotionde« familles »d’objetscommeAbstractFactory

DP Factory Method : structure

! Intérêt : ! Intérêt : ! Découple la classe (abstraite) des instances concrètes qu’elle

manipule! La classe Abstraite porte en général pas mal de code! Pas de notion de « familles » d’objets comme dans

AbstractFactory

Page 52: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternFaçade

P.Esling- JAVA- Cours1.Fondamentaux 57

DP Façade : Encapsulation niveau Package! Préconise d’isoler les dépendances entre sous-systèmes

! Maitrise des modifications

! Principe TRES IMPORTANT : car l’unité de réutilisation Java est le Package et non la classe

• Permetd’isolerlesdépendancesentresous-systèmes• Maîtrisedesmodifications

• Principetrèsimportant,permetd’effectueruneformedepackagedepuisuneclasse(trèspratiquepourlesdistribs)

Page 53: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternFaçade:exemples

P.Esling- JAVA- Cours1.Fondamentaux 59

• LaFaçadedeFormesestcomposéede• Forme• FormeFactory

• Lesclassesinternes(Carré,Cercle)restentcachées

• ExempleExpressionArithmétique• Expression,EnvironnementEvaluation• ExpressionFactory

• Classeconcrètes(Add,Mul,…)nonexposées.

Page 54: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternAdapter

P.Esling- JAVA- Cours1.Fondamentaux 61

DP Adapter! Réutiliser l’existant en adaptant la signature et les

opérations

! Cf. aussi les TME

• Réutiliserl’existantenadaptantsignatureetopérations

Page 55: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternAdapter

P.Esling- JAVA- Cours1.Fondamentaux 62

DP Adapter : structure! NB: l’adaptation peut-être plus ou moins complexe, pas

nécessairement juste de la délégation! Base importante de la réutilisation propre en O-O: ! Base importante de la réutilisation propre en O-O:

délégation + typage via des interface

• Adaptationplusoumoinscomplexe• Parfoisplusquedelasimpledélégation• BasedelaréutilisationenPOO:délégation+typageinterface

Page 56: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternSingleton

P.Esling- JAVA- Cours1.Fondamentaux 64

• Onsouhaitepouvoirréglerl’aspectgraphiqued’uneapp• Bordures,boutons,menus,transparence,etc…• Paramètrespositionnésparl’utilisateur

• Solution1:Oncréeuneclassedeconfigurationspécialeaveclemain,celle-cicontienttouslesparamètresetdoitêtrepasséeàchaquecréationd’instance• Intrusif,lourd…inacceptable

• Solution2:Onnedéfinitquedesopérationsstatic danslamêmeclassespéciale• Interditl’héritage/redéfinition• Limitelesévolutionsfutures

Page 57: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternSingleton

P.Esling- JAVA- Cours1.Fondamentaux 65

DP Singleton : Structure! Soit l’instance est positionnée statiquement, soit on teste

dans instance() ! if (uniqueInstance ==null) uniqueInstance = new Singleton(); ! if (uniqueInstance ==null) uniqueInstance = new Singleton(); ! return uniqueInstance;

• Lesingletonassurequ’uneseuleinstanceestcréée• L’idéeestden’autoriserqu’unconstructeurstatic• Laclassecontientunobjetverslui-même!• Al’appelduconstructeursoitl’instanceexiste,sinononlacrée

If(uniqueInstance ==null)uniqueInstance =newSingleton()returnuniqueInstance;

Page 58: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternSingleton:Avantages

P.Esling- JAVA- Cours1.Fondamentaux 66

DP Singleton : Structure! Soit l’instance est positionnée statiquement, soit on teste

dans instance() ! if (uniqueInstance ==null) uniqueInstance = new Singleton(); ! if (uniqueInstance ==null) uniqueInstance = new Singleton(); ! return uniqueInstance;

• Permetdecontrôlerlesaccèsàl’instance• Permetdeconfigurerl’instanceuniqueauruntime• Permetdeconserverl’extensionparhéritage• VariantespossiblepourcontrôlerunnombreNd’instances

Page 59: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

PatternObserver

P.Esling- JAVA- Cours1.Fondamentaux 68

Observer! Objectif : Définir une dépendance 1 vers n, telle que

quand le sujet est mis à jour, tous ses dépendants soient notifiés automatiquement.notifiés automatiquement.

! Structure :

Objectif:Définirunedépendanceentreunobjetetsesobservateurstellequesil’objetestmisàjour,toussesdépendantssontnotifiésautomatiquement.

Page 60: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

CombinaisondePatterns

P.Esling- JAVA- Cours1.Fondamentaux 69

PatternsComposés! Les patterns sont

flexibles et on peut les peut les combiner

• LesDesignPatternssonttrèsflexibles

• OnpeutfacilementimaginertoutescombinaisonsdecesPatterns.

Page 61: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Designpatterns:Grandsprincipes

P.Esling- JAVA- Cours1.Fondamentaux 71

• Isoleretencapsulerlapartievariable• AlgorithmedansStrategy• FaçondecréerlesobjetsdansFactory• TypesdenœudsdansComposite

• Favorisercomposition,délégationparrapportàl’héritage• Decorator vs.Redéfinition

• Utiliserdesinterfacesplutôtquedesclassesconcrètes• Réutilisationalgorithmique(ex.Collections.sort)

• Toujourschercherlecouplageleplusfaiblepossibleentredespartiesindépendantesquiinteragissent• Dépendancesfonctionnelles=interfaces(eg.Observer)• Evolutionsfacile,maîtrisedesrépercussionsdechangement

Page 62: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Designpatterns:Grandsprincipes

P.Esling- JAVA- Cours1.Fondamentaux 72

• Classesouvertesenextension,ferméesenmodification• Réutilisationetmodificationsefaitsanschangerl’existant• Attentionàhéritage+redéfinitioncommeméthoded’extension!

• Toujoursdépendred’abstractions,jamaisdeclassesconcrètes• Toujoursdéclarerdesinterfaces• Bienréfléchiràcequel’onsouhaiteexposer

• Neparlezqu’àvosamis• Limiterlenombred’objetsconnusparunautreobjet• Réfléchirauxdépendancesinduites

• Nem’appelezpas,jevousappellerai• Communicationasymétriques,groscomposantsdépendentdespetits

• Uneclassenedevraitavoirqu’uneseuleresponsabilité

Page 63: Cours Design Patterns€¦ · Design patterns: classification 7 Patterns créateurs Ciblent la construction des objets («aider» new, clone) –Patterns Factory, AbstractFactory,

Intérêtdespatterns

P.Esling- JAVA- Cours1.Fondamentaux 73

• Unvocabulairecommunetpuissant• Lespatternsaidentàconcevoirfacilementdessystèmes

• Réutilisables:Responsabilitésisolées,dépendancesmaitrisées• Extensibles:Ouvertsauxenrichissementsfuturs• Limiterlamodificationdel’existant• Maintenablesparfaiblecouplage

• Lespatternsreflètentl’expériencededéveloppeursobjets• Solutionséprouvéesetsolides

• Lespatternsnesontpasducodemaisdescadresdesolutionsgénéralesàadapteràsonproblèmeparticulier

• Lespatternsaidentàmaîtriserleschangements• Lessolutionsplustrivialessontsouventmoinsextensibles