(object-oriented)design patternsbenoit.combemale/course/l3info/pattern-design.pdf · – uml –...

188
Material available at https://combemale.github.io Version Nov., 2017 (OBJECT-ORIENTED) DESIGN PATTERNS BENOIT COMBEMALE PROFESSOR, UNIV. TOULOUSE, FRANCE HTTP://COMBEMALE.FR [email protected] @BCOMBEMALE

Upload: lamanh

Post on 12-Sep-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Material available at https://combemale.github.ioVersion Nov., 2017

(OBJECT-ORIENTED) DESIGN PATTERNS

BENOIT COMBEMALEPROFESSOR, UNIV. TOULOUSE, FRANCE

HTTP://COMBEMALE.FR [email protected]@BCOMBEMALE

Page 2: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Idéalement:« modular blackboxes »

RéutilisabilitéFaiblecouplage

Openforextension

Encapsulation

Page 3: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

"Each pattern describes aproblem whichoccurs overandoveragain inourenvironment,andthen describes thecoreofthesolution tothat problem,insuch away that you can usethis solutionamilliontimesover,without ever doing it thesameway twice”– ChristopherAlexander

Page 4: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Clues from other disciplines (from E. Gamma)

4

cf. http://fose.ethz.ch/slides/gamma.pdf

Page 5: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

PatternsinPhysical Architecture• When aroomhasawindow with aview,thewindowbecomes afocalpoint:peopleareattracted tothewindow andwant tolookthrough it.Thefurniture intheroomcreates asecondfocalpoint:everyone isattracted toward whatever pointthefurniture aimsthem at (usually thecenteroftheroomoraTV).Thismakes peoplefeel uncomfortable.They want tolookoutthewindow,andtoward theother focusat thesame time.Ifyou rearrange thefurniture,so that itsfocalpointbecomes thewindow,then everyone willsuddenly noticethat theroomis much more“comfortable”

LeonardBudney,Amazon.com review ofTheTimeless Way ofBuilding

Page 6: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Design Pattern : Pourquoi ?•Validation qualitative des acquis et de la connaissance pratique

•Vers une « ingénierie » (caractère systématique) du logiciel•Faciliter la réutilisation de savoir faire•Identifier, comprendre et appréhender des solutions récurrentes (e.g., API, framework existant)

•Indispensable pour •Comprendre l'existant•Réutiliser / étendre / tester l'existant•Construire de nouveaux systèmes logiciels

6

Page 7: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Sur la réutilisation...

• Les langages informatiques modernes orientés objet permettent la réutilisation

§par importation de classes§par héritage : extension / spécialisation§par l'inversion de contrôle (aspects)

7

Page 8: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Design Pattern : C'est quoi ?

• Un fragment d'architecture à objets

• Une solution « classique » à un problème fréquent

• Une solution indépendante des algorithmes

• Une solution qui découple les différents problèmes et leurs différentes réponses

8

Page 9: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Design Pattern : Origine ?

• Concept proposé pour les architectures de bâtiments (Christopher Alexander)

• Début d'application aux architectures logicielles en 1987

• Visibilité publique en 1994 grâce au livre§Design patterns: elements of reusable object-oriented

software (Gamma, Helm, Johnson et Vlissides, dit le Gang of Four : GoF)

9

Page 10: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

• Context:FileSystem– Files,directories

• Goal:Compute thenumber offilesinthefilesystem

• Haveyou got apattern?(areusable solutiontotheproblem)

• Solutionin…– UML– Java

10

Page 11: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 12: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Elements ofaPattern• Name• Problem– When thepatternis applicable

• Solution– Designelements andtheir relationships– Abstract(mustbe specialized/instantiated)

• Consequences– Cost versusbenefits– Flexibility,extensibility– Variationsinthepatternmay imply difference consequences

Page 13: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Design Pattern : Catégories ?• Patrons de création§ ils ont pour but de gérer les problèmes de création de

nouveaux objets§ Abstract Factory, Builder, Factory Method, Prototype, Singleton

• Patrons de structure§ ils servent à organiser les informations dans un graphe

d'objets§ Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy

• Patrons de comportement§ ils servent à maîtriser les interactions entre objets

§ Chain of responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor, Callback

13

Page 14: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Design Pattern : Catégories ?

14

Page 15: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 16: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Composite• Applicability– Youwant torepresent part-whole hierarchies ofobjects

– Youwant tobe abletoignorethedifference betweencompositionsofobjects andindividual objects

• Consequences– Makes theclientsimple,sinceit can treat objects andcompositesuniformly

– Makes it easy toadd newkinds ofcomponents

– Canmake thedesignoverlygeneral• Operationsmay notmake senseonevery class

• Compositesmay contain onlycertaincomponents

16

Page 17: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Composite

• Examples– shoppingcart:product ofasingleitemoraggregation ofmultipleitems;howtocomputethecost?

– filesystem– hierarchical state-machine

– AWT(conteneurgraphique)

17

Page 18: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Composite(example)

Page 19: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

But de Composite :« Composer des objets sous la forme d'arbres pour représenter les hiérarchies »

Design Pattern Composite (structural)

for(Composant c : enfants)c.opération() ;

Page 20: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Exemple 1

Composite (structural)

formes.forEach(f-> f.déplacer());

Page 21: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Exemple 2

fichiers.forEach(f-> f.déplacer());

Composite (structural)

Page 22: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 23: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Composite(example)• Component(java.awt.Component)

– déclarel'interfacecommuneàtouslesobjets– implémentelecomportementpardéfautpourtouteslesclassessinécessaire– déclarel'interfacepourgérerlescomposantsfils– Définitl'interfacepouraccéderaucomposantparent(optionnel)

• Leaf représenteunefeuille (java.awt.Button)– Implémentationducomportement

• Composite(java.awt.Container)définitlecomportementdescomposantsayantdesfils,stockelesfilsetimplémentelesopérationsnécessairesàleurgestion– Liendanslahiérarchie– Comportement:fusiondescomportementsdesfils

• Lesclients(affichagegraphique)utilisentl'interfaceComponent,silereceveurestunefeuillelarequêteestdirectementtraitée,sinonleCompositeretransmethabituellementlarequêteàsesfilseneffectuantéventuellementdestraitementssupplémentairesavantet/ouaprès

Page 24: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 25: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 26: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 27: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 28: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Ensure aclasshasoneinstance,andprovideaglobalpointofaccess toit.

Page 29: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 30: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

« Singleton »• Applicability– Theremustbe exactly oneinstanceofaclass– When it mustbe accessibletoclientsfrom awell-known place– When thesoleinstanceshould be extensiblebysubclassing,withunmodified clientsusing thesubclass

• Consequences– Controlled access tosoleinstance– Reduced name space (vs.globalvariables)– Canbe refined insubclass orchanged toallow multipleinstances

Page 31: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Implementation ofSingleton

• Constructor isprotected

• Instancevariableisprivate

• Publicoperationreturns singleton– Maylazily createsingleton

• Subclassing– Instance()method canlookupsubclass tocreate inenvironment

Page 32: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Implementation ofSingleton

• Constructor is protected,Instancevariableis private

Page 33: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 34: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

« Singleton »:Exercice

LorsdelaconversionduString enURL,deserreurspeuventsurvenir(MalformedURLException ).Onvoudraitcollecterceserreursdansuncollecteurglobalàtoutleprogramme.

Page 35: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 36: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 37: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Strategy »• L'objectif est de mettre en œuvre des algorithmes

différents avec un choix dynamique de la mise en œuvre

• Déléguer• Analogie§permet de remplacer les « pointeurs de fonction »

37

Page 38: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Strategy » - rôles

• Strategy§définit une interface pour configurer l'algorithme

(paramètres) et l'exécuter• ConcreteStrategy§définit une mise en œuvre activée par l'opération

d'exécution• Context§désigne l'algorithme concret en vigueur§peut contenir des données pour l'algorithme

38

Page 39: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Strategy » - structure

39

Page 40: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Machineàcalculer(compromis,différentesstratégies)

Page 41: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Bad#1

Page 42: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Bad#2(if-then-else)

Page 43: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Bad#3(everything inoneplace)

Page 44: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Strategy » - example

44

Page 45: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 46: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Strategy (behavior)

Comment choisir à l'exécution l'implémentation ?

• On veut dans ce cas choisir en fonction du contexte telle ou telle stratégie

Page 47: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

But :Définir une famille d'algorithmes interchangeables dynamiquement

–Stratégie : interface pour 1 famille d'algorithmes–StratégieConcrète : Implémentation d'un algorithme–Stratège: désigne l'algorithme concret en vigueur– Peut fournir des données aux algorithmes

Strategy (behavior)

Page 48: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Exemple basique : liste triéeL'algorithme de tri peut être remplacé

Strategy (behavior)

Page 49: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron de ConceptionStratégie / Strategy (comportement)

ListeTriée liste = new ListeTriée() ;liste.définirTrieur(new BubbleSort()) ;// ...Liste.trier() ;// ...liste.définirTrieur(new QuickSort()) ;

Page 50: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Strategy » - exercice

50

Un jeu vidéo peut avoir une partie en cours. Une partiepossède un unique niveau de difficulté choisi lors de lacréation de la partie et pouvant changer au cours decelle-ci. Il existe 3 niveaux de difficulté : facile, normal etdifficile.

Modéliser le jeu, les parties et les niveaux de difficultésen fonction du patron de conception Stratégie.

Page 51: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 52: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

State• Exemple

– Éviterlesinstructionsconditionnellesdegrandetaille(ifthen else)– Simplifierl'ajoutetlasuppressiond'unétatetlecomportementquiluiestassocié– Jeuvidéo:comportementdes« bébêtes »avecmémoiredelaposition,dela

vitesseetdeladirection(intelligence)=>décisiondel'évolutiondel'état– Étatd'uneconnexionréseau(recherche,établie,interrompue,fermée)

• Intention– Modifierlecomportementd'unobjetquandsonétatinternechange– Obtenirdestraitementsenfonctiondel'étatcourant– Toutestmisenplacepourdonnerl'impressionquel'objetluimêmeaétémodifié

• Champsd'application– Implanterunepartieinvarianted'unalgorithme– Partagerdescomportementscommunsd'unehiérarchiedeclasses

52

Page 53: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « State »• L'objectif est de gérer les états d'un objet par une

hiérarchie de classes

• Exemple• La fonction "display" d'une icône représentant une connexion change

selon l'état.• Pour le code qui invoque display, il suffit de changer dynamiquement

l'objet qui implémente l'état pour que cette particularité soit insensible

53

Page 54: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « State » - structure

54

Context estuneclassequipermetd'utiliserunobjetàétatetquigèreuneinstanced'unobjetConcreteStateState définituneinterfacequiencapsulelecomportementassociéavecunétatparticulierdeContextLesConcretState implémententuncomportementassociéavecl'étatdeContext

IlrevientsoitàContext,soitauxConcreteState dedéciderdel'étatquisuccèdeàunautreétat

Page 55: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

ImplémentationdeTCP/IP

open()close()send()acknowledge()synchronize()

status : String

TCP/IP::send(s : Stream) {if state = 'open'

{(…)}

if state = 'closed'{(…)}

if state = 'idle'{(…)}

}

TCP/IP

Page 56: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Problème

• Commentéviterquel'étatdelaconnexionsoitvérifiéàchaquefoisqu'unpaquetestenvoyé?

Page 57: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Solution

• Isolerlescomportementsdépendantsdesdifférentsétatsdeconnexiondansdesclassesdifférentes.

Page 58: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

End'autrestermes:

TCP/IP TCP/IP State

open()

Close

open()

Open

open()

open()close()send()acknowledge()synchronize()

status

Idle

open()

Page 59: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Exempledeconnexion

: TCP/IP : Close

2- open()1- open()

TCP/IP::open() {this.status.open();

}

Page 60: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Exempledeconnexion

: TCP/IP : Close

: Open

3- deletelink

4- newlink

Page 61: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Conséquences

• Chaqueinstancedelaclasse“TCP/IP” estassociéeàuneinstanced'unesous-classede“TCP/IPState”.

• Lavérificationdel'étatn'estplusnécessaire.

Page 62: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Observations

• CettesolutionestutiliséedanslaplupartdesimplémentationsduprotocoleTCP/IPsurUnix.

• Unesolutionsimilaireestutiliséedansplusieurséditeursgraphiques(comportementd'unoutilselonletypedefiguresélectionnée).

Page 63: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « State » - example

63

Page 64: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Problème

• Commenttraiterunobjetdontlecomportementestfortementdépendantdesonétat,sansvérifier,àchaqueappeld'uneopération,l'étatactuel?

Page 65: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Contexte

• Lecomportementd'unobjetdépenddesonétat.

• Différentesopérationscontiennentdesopérateursconditionnelssurl'étatdel'objet.

Page 66: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Solution(1/2)

/Context /State

/handle() *

/ConcreteState *

/handle() *

/request() *

1

Page 67: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Solution(2/2)

TCP/IP TCP/IP State

open()

Close

open()

Open

open()

open()

:State

context state

concretestate

Page 68: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Conséquences

• Lecomportementspécifiqueàunétatestisolé.

• Lestransitionsd'étatsontexplicites.

• Lesobjets-étatspeuventêtrepartagés.

Page 69: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Compromisd'implémentation

• Quidéfinitlestransitionsd'état?

• Créationetdestructiondesétats.

• Utilisationdudispatch dynamique.

Page 70: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « State » - exercice

70

Lamontredigitale

La montre que nous étudions est très simple. Elle possède deux boutons : avance etmode. Le mode courant est le mode Affichage. Quand on appuie une fois sur lebouton mode, la montre passe en modification heure. Chaque pression sur le boutonavance incrémente l’heure d’une unité. Quand on appuie une nouvelle fois sur lebouton mode, la montre passe en modification minute. Chaque pression sur le boutonavance incrémente les minutes d’une unité. Quand on appuie une nouvelle fois sur leboutonmode, la montre repasse en mode affichage.

1. Représenterlediagrammed’étatsdelamontre2. Proposezuncodagesimpledelamontre.Etudiezensuitelesmodificationsàapporteràvotre

versionaveclesmodificationssuivantes :a. Unenouvellefonctionnalitéapparaîtdanslamontre :leréglagedessecondes(quandonpresseleboutonmode encours

deréglagedesminutes,leréglageconsistejusteenuneremiseàzéroenappuyantsuravance).b. Unnouveauboutonapparait :l’avancerapide,quipermetd’incrémenterlesheuresde5en5,etlesminutesde10en10.c. Unenouvellefonctionnalitéapparait :quanddesactionssontsanseffet(p.ex.,avance ouavancerapideenmode

affichage),lamontreémetunbip.3. Analysezvotresolutiondupointdevuedelamaintenance.4. ProposezunesolutionenutilisantcettefoislepatrondeconceptionState.Reprenezles

modificationsdelaquestion2.5. EtudiezlesdifférentesimplémentationsdudesignpatternState.

Page 71: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 72: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Command »• L'objectif est de découpler§ le choix d'une action à faire dans une certaine situation

(e.g., undo)§ la détection de la situation et l'exécution de l'action décidée

è Encapsuler une requête comme un objet

72

Page 73: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 74: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 75: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 76: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 77: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Command » - rôles• client

§ chargé de la création des commandes concrètes et de leur association avec des situations

• invoker§ chargé de détecter une situation et de faire exécuter la commande

correspondante• receiver

§ effectue le travail requis par la commande• command

§ déclare une opération d'exécution• concrete command

§ fournit une méthode pour l'opération d'exécution77

Page 78: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Command » - structure

78

Page 79: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Collaborations

• Leclientcrée l'objetConcreteCommand etspécifie ledestinataire.

• L'objetInvoker emmagasine l'objetConcreteCommand.

• L'objetInvoker émet une requête eninvoquant “execute” surlacommande.– Lorsque lacommande est réversible,

ConcreteCommand emmagasinel'état nécessaire pourrevenir dansl'état précédant l'invocationde“execute”.

• L'objetConcreteCommand invoquelesopérations dudestinataire pourexécuter larequête.

Page 80: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Command » - example

80

Page 81: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Intention

• Encapsuler une requête sousforme d'objet– paramétrer lesclientsavecdifférentes requêtes,– filesderequêtes– “logs”derequêtes– supportd'opérations réversibles (« undo »)

Page 82: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 83: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 84: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 85: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 86: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 87: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 88: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 89: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Observer »• L'objectif est de propager les changements d'état d'un

objet vers d'autres objets

89

Page 90: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Observer » - rôles• subject§Comporte un état interne

• type non spécifié• un patron de conception est indépendant de ce genre de détail

§Est chargé de gérer une collection d'abonnés capable de recevoir des notifications

§Est chargé d'envoyer un message aux abonnés lorsque son état change

• observer§Est capable de réagir à la réception d'un message de

notification venant d'un sujet

90

Page 91: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Observer » - structure

91

Page 92: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Observer » - example

92

Page 93: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 94: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 95: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 96: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 97: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 98: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Template• Applicability

– When analgorithm consists ofvarying andinvariantpartsthatmustbe customized

– When common behavior insubclasses should be factoredandlocalized toavoid codeduplication

– Tocontrolsubclass extensionstospecific operations

• Consequences– Codereuse– Inverted “Hollywood”control:

don't callus,we'll callyou– Ensures theinvariantpartsofthe

algorithm arenotchanged bysubclasses

Page 99: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 100: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 101: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 102: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

TemplateMethodinanexisting API

• http://developer.classpath.org/doc/javax/swing/table/

• TableModel• AbstractTableModel• DefaultTableModel

• Demo

Page 103: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 104: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 105: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Noimplementation of

getColumnCount()

Page 106: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 107: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 108: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

« Adapter »aka Wrapper(Mariagedeconvenance)

Page 109: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

• Applicability– Youwant touseanexisting class,andits interfacedoes notmatchtheone

you need– Youwant tocreate areusable classthat cooperates with unrelated classes

that don't necessarily havecompatibleinterfaces– Youneed touseseveral subclasses,butit'simpractical toadapt their

interfacebysubclassing each one

• Consequences– Exposesthefunctionality ofanobject inanother form– Unifiestheinterfacesofmultipleincompatibleadaptee objects– Lets asingleadapterwork with multipleadaptees inahierarchy

Page 110: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 111: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 112: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Adapter »• Objectif :§Permet le réemploi d'un type qui n'est pas conforme à une

interface attendue• Exemple§votre code emploie une interface Stack « idéale » (push,

pop, top, size)§ la classe Java disponible n'a pas exactement cette interface

112

Page 113: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Adapter » - rôles• Client§ emploie des opérations de l'interface Adaptor

• Adaptor§définit les opérations attendues par le Client

• ConcreteAdaptor§ réalise les opérations par délégation vers Adaptee

• Adaptee§ contient la mise en œuvre à réutiliser

113

Page 114: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Adapter » - structure

114

Page 115: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Adapter » -diagramme de séquence

115

Page 116: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 117: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 118: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 119: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

javax.faces.context.ExternalContext

internally usesServletContext,HttpSession,HttpServletRequest,HttpServletResponse,etc.

Page 120: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

« Facade »

Page 121: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Facade vsAdapter• Motivation– Modular decomposition:separate theclientfromsubsystem/Adaptee

– Facade:simplify theinterface(anewinterfacetothelibrary)– Adapter:matchanexisting interface(adapt tothelegacy)

• Adapter:interfaceis given (constraint)– Nottypically true inFacade

• Adapter(polymorphic)– Dispatch dynamically tomultipleimplementations– Typically choose theimplementation statically

Page 122: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 123: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Abstract Factory »• L'objectif est de §permettre de créer des familles de produits §masquer les mécanismes de choix des classes de mise en

œuvre de ces produits

123

Page 124: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Abstract Factory » - rôles• Client

§ Détient une référence sur une Abstract factory§ Crée des produits par appel des opérations de cette référence§ Ne connaît pas la classe concrète des produits

• Abstract Product§ Masquer la classe concrète§ Offrir un ensemble d'opérations applicables à tous les variantes

d'un même produit• Abstract Factory

§ Comporte une opération de création (pour chaque produit, une opération de création retourne un objet produit)

§ La classe concrète des produits est masquée

124

Page 125: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Abstract Factory » - rôles• Concrete Product§Contient la mise en œuvre spécifique des opérations§Non accessible au client§Peut être amené à jouer un rôle d'adaptateur

• Concrete Factory§Chargée de mettre en œuvre la création des produits

concrets§Une fabrique concrète pour une plate-

forme/variante/version donnée ne fait que des produits concrets de la même plate-forme/variante/version

125

Page 126: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Abstract Factory » - Structure

126

Page 127: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Abstract Factory » - Collaboration

127

Page 128: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Abstract Factory » - Example

128

Page 129: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 130: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Associer « Adapter » et « Abstract Factory »

130

• Les différentes fabriques concrètes existantes§ créent des produits ayant des interfaces différentes§doivent être réunies par un concept de produit abstrait

• Solution§on interpose un PC Adapter entre Abstract product et

Concrete product

Page 131: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Associer « Adapter » et « Abstract Factory »

131

Page 132: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 133: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Visitor »• Objectif :§ faciliter l'organisation des méthodes de traitement d'une

structure de graphe/d'arbre§ séparer le choix des techniques de traitement de la

description des types§permet d'étendre ou de modifier les traitements en ne

changeant qu'un fichier source

133

Page 134: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Visitor » - rôles• Visitor§Définir une opération dite de traitement pour chaque type

d'élément (visitFoo())§Cette opération sera appelée par chaque élément pour

déclencher le traitement qui le concerne• Element§Déclare une opération qui sera appelée par le Visitor

(accept())• ConcreteElement§Mise en œuvre de Element::accept()§Le but est de déclencher le traitement correct

134

Page 135: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Visitor » - structure

135

Page 136: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Visitor » -diagramme de séquence

136

Page 137: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Visitor »• Remarque :§Le contrôle du parcours est sous la responsabilité du

visiteur, pas des éléments• Quand utiliser le patron « Visitor »§Pour parcourir des structures d'éléments (graphes, arbres)§Quand l'ensemble des types change peu souvent

• si nouveau type : il faut modifier tous les visiteurs

§Quand les traitements changent souvent• une seule classe à ajouter ou à modifier

137

Page 138: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Visitor »: exercice

138

Dans cet exercice nous allons modéliser des expressions arithmétiques sous la formed’un arbre binaire. Seules l’addition et la soustraction devront être considérées. UnArbre possède un Noeud racine et un nom. Un Noeud est soit un NoeudPlus, soit unNoeudMoins, soit un NoeudValeur. NoeudPlus et NoeudMoins possède chacun unnoeud droit et un noeud gauche. NoeudValeur possède une valeur (un entier). Vousmodéliserez Nœud sous la forme d’une interface.

1. Créezlediagrammedeclassesdel’arbre.2. AjoutezlepatrondeconceptionVisiteur àl’arbre:ajoutezlesméthodesaccept(VisiteurArbre) àce

diagrammedeclassesetdéfinissezl’interfaceVisiteurArbre etsesméthodescommevuencours.3. DonnezlecodeJavadechacunedesméthodesaccept ajoutée.4. Pourquoilesméthodesaccept sont-ellesnécessaires?5. ImplémentezenJavaunvisiteurpermettantd’afficherdanslaconsoleetennotationpost-fixéela

formulearithmétiquequereprésentel’arbre.6. ImplémentezenJavaunvisiteurpermettantdecalculerlaformulearithmétiquequereprésente

l’arbre.Unindice:levisiteurposséderaunepilestockantlesvaleursvisitées.VousutilisezalorslepatronVisiteur pourfaireunInterpréteur demanièrepropre.

Page 139: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 140: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 141: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 142: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 143: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 144: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 145: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 146: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 147: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

• Expliquerquedesnouveauxparadigmespeuventremplacerdespatternsobjets,exemplesdanslecasdel’interpreteur

Page 148: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 149: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Memento »• L'objectif est de capturer l'état d'un objet pour le

stocker et le restaurer plus tard, sans briser l'encapsulation

• Principe : une interface Memento sert de type opaque

149

Page 150: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Memento » - rôles• Originator§possède un état à sauver/restaurer§ est capable de créer des mémentos concrets

• Memento§ interface permettant de transmettre des états sauvegardés

de manière opaque• ConcreteMemento§mise en œuvre de stockage d'un état

• Caretaker§ capable de stocker des mémentos et de les récupérer

150

Page 151: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Memento » - structure

151

Page 152: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Memento » - sauvegarde

152

Page 153: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Patron « Memento » - restauration

153

Page 154: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 155: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Poids-Mouche / Flyweight (structurel)

Problème:Instanciation d’un (très très) grand nombre de petits objets

èTrop gourmand au niveau de la mémoire

Exemples :

Du texte contenant un grand nombre de caractères

Un jeu massivement multi-joueurs (les objets graphiques)

L'ADN

Page 156: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

But :Partager efficacement un grand nombre de petits objets

Fonctionnement :Certaines données sont extraites de l'objet pour en minimiser le nombre d'instanciation

Exemple : l'ADNSeuls 4 bases azotées créées (G, A, T, C)Leur position est stockée en dehors (dans l'ADN)

=> Sinon explosion du nombre d'instances de bases azotées

Patron de ConceptionPoids-Mouche / Flyweight (structurel)

Page 157: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 158: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 159: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

FabriquePoidsMouche : créer des objets uniquement si nécessaire (sinon retourne l'objet déjà existant)L'utilisation du patron dans le code client passe par la fabrique pour obtenir des instances

Poids-Mouche / Flyweight (structurel)

Page 160: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 161: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 162: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 163: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 164: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 165: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 166: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 167: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 168: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 169: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 170: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 171: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 172: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 173: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

#1Héritage

Page 174: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

#2Uneautresolution

Page 175: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Augmentationduprixdesingrédientsobligeàmodifierlecodeexistant.Quiddesnouveauxingrédients?Quiddesnouvellesboissons? Lesclassesdoiventêtreouvertes

àl’extension,maisferméesàlamodification.

Page 176: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

LepatternDécorateur attachedynamiquementdesresponsabilités/fonctionnalitéssupplémentairesàunobjet.Ilfournitunealternativesoupleàl’héritage,pourétendrelesfonctionnalités.

Page 177: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 178: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 179: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 180: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 181: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 182: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice
Page 183: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

AdapterversusDecorator ?

Décorateur =Ajoutdecomportementsauxopérationsexistantes.Interfacenonmodifiée.

Adaptateur =Ajoutd'interfacesàunobjet

Page 184: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

JUnit and…Designpatterns

Worthreading!http://junit.sourceforge.net/doc/cookstour/cookstour.htm

Page 185: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

DesignPatternsfromGOF

Page 186: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

Et dans le futur ? (from E. Gamma)

186

Page 187: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

References

187

Page 188: (OBJECT-ORIENTED)DESIGN PATTERNSBenoit.Combemale/course/l3info/pattern-design.pdf · – UML – Java 10. Elementsof a Pattern • Name • Problem ... Patron « Strategy » - exercice

References

http://refcardz.dzone.com/refcardz/design-patterns