View
4
Download
0
Category
Preview:
Citation preview
Programmationobjets,webetmobiles(JAVA)
Licence3Professionnelle- MultimédiaPhilippeEsling (esling@ircam.fr)Maîtredeconférences– UPMC
Equipereprésentationsmusicales(IRCAM,Paris)
Cours7– DesignPatterns
RappeldesfondationsdelaPOO
P.Esling- JAVA- Cours 7.DesignPatterns 2
• Abstraction• Animalestabstrait.Zoocontientdesanimaux
• Encapsulation• Protectiondesattributsdel’objet• Contrôledesaccès,isolationdel’implémentation
• Polymorphisme• Signaturepolymorphes,résolutiondesinvocation
• Héritage• Redéfinitiondecomportementparhéritage
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
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
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
Encapsulationniveauobjet
6
Encapsulation au niveau Objet OBJET
Services publics
Donnéesprotégées
EnvironnementMessages
P.Esling- JAVA- Cours 7.DesignPatterns
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
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
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
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
Dessin=Listedeformes
11
Un Dessin : ensemble de formes
public class Dessin {List formes = new ArrayList();
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
Diagrammedeclasses
12
Diagramme de Classes
P.Esling- JAVA- Cours 7.DesignPatterns
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
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
PatternComposite:Formes
15
Formes : DP Composite
P.Esling- JAVA- Cours 7.DesignPatterns
PatternComposite:Formes
16
Formes : DP Composite
Component
P.Esling- JAVA- Cours 7.DesignPatterns
PatternComposite:Formes
17
Formes : DP Composite
Component
Leaf Leaf
P.Esling- JAVA- Cours 7.DesignPatterns
PatternComposite:Formes
18
Formes : DP Composite
Component
Leaf Leaf
Composite
P.Esling- JAVA- Cours 7.DesignPatterns
PatternComposite:Formes
19
Formes : DP Composite
Component
Leaf Leaf
Composite
Contient
P.Esling- JAVA- Cours 7.DesignPatterns
PatternComposite:Formes
20
Formes : DP Composite
Component
Leaf Leaf
Composite
Contient
Hérite
P.Esling- JAVA- Cours 7.DesignPatterns
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
PatternCompositegénérique
22
DP Composite : structure
P.Esling- JAVA- Cours 7.DesignPatterns
PatternCompositeinstancié
23
aComposite
aLeaf aLeaf
aLeaf aLeaf aLeaf
aComposite aLeaf
P.Esling- JAVA- Cours 7.DesignPatterns
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
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
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
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
Proxyvirtuel:Example
28
Proxy Virtuel : Exemple
P.Esling- JAVA- Cours 7.DesignPatterns
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
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
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
Proxydesécuritéforum
32
DP Proxy de Sécurité : Forum
P.Esling- JAVA- Cours 7.DesignPatterns
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
Proxydistant
34
DP Proxy distant
P.Esling- JAVA- Cours 7.DesignPatterns
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
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
PatternDecorator:exemple
37
DP Decorator : exemple
P.Esling- JAVA- Cours 7.DesignPatterns
PatternDecorator:structure
38
DP Decorator : Structure
P.Esling- JAVA- Cours 7.DesignPatterns
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
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
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
PatternStrategy:structure
42
DP Strategy : structure
P.Esling- JAVA- Cours 7.DesignPatterns
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
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
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
SéanceKick-starterProjet• Etablissementdel’architectureorientéeobjet
• Packages?
• Héritagedeclasses?
• DiagrammeUML?
• Réflexionsurlesdesignspatternséventuels
• Etablissementdesmilestones duprojet
• Fonctionnalitésdesdifférentesclasses
• Estimationtemporellecorrespondante
• Répartitiondestâches
Programmationobjets,webetmobiles(JAVA)
Licence3Professionnelle- MultimédiaPhilippeEsling (esling@ircam.fr)Maîtredeconférences– UPMC
Equipereprésentationsmusicales(IRCAM,Paris)
Cours8– DesignPatternsII
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
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
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);
}…
}
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
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
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
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!
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
Mini-exerciceFactory
P.Esling- JAVA- Cours1.Fondamentaux 56
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)
Encapsulationniveauobjet
P.Esling- JAVA- Cours1.Fondamentaux 58
Encapsulation au niveau Objet OBJET
Services publics
Donnéesprotégées
EnvironnementMessages
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.
Mini-exerciceFaçade
P.Esling- JAVA- Cours1.Fondamentaux 60
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
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
Mini-exerciceAdapter
P.Esling- JAVA- Cours1.Fondamentaux 63
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
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;
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
Mini-exerciceSingleton
P.Esling- JAVA- Cours1.Fondamentaux 67
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.
CombinaisondePatterns
P.Esling- JAVA- Cours1.Fondamentaux 69
PatternsComposés! Les patterns sont
flexibles et on peut les peut les combiner
• LesDesignPatternssonttrèsflexibles
• OnpeutfacilementimaginertoutescombinaisonsdecesPatterns.
RappeldesfondationsdelaPOO
P.Esling- JAVA- Cours1.Fondamentaux 70
• Abstraction• Animalestabstrait.Zoocontientdesanimaux
• Encapsulation• Protectiondesattributsdel’objet• Contrôledesaccès,isolationdel’implémentation
• Polymorphisme• Signaturepolymorphes,résolutiondesinvocation
• Héritage• Redéfinitiondecomportementparhéritage
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
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é
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
Kick-starterProjetv.II
Recommended