Cours Design PatternsPattern Proxy 26 • Proxy : objet faisant semblant d’être un autre objet...

74
Programmation objets, web et mobiles (JAVA) Licence 3 Professionnelle - Multimédia Philippe Esling ([email protected]) Maître de conférences – UPMC Equipe représentations musicales (IRCAM, Paris) Cours 7 – Design Patterns

Transcript of Cours Design PatternsPattern Proxy 26 • Proxy : objet faisant semblant d’être un autre objet...

  • Programmationobjets,webetmobiles(JAVA)

    Licence3Professionnelle- MultimédiaPhilippeEsling ([email protected])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 ([email protected])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