SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Les design patterns


      Les design patterns                                                               1



            Design Pattern

            • Objectifs

                – Comprendre les bases de la philosophie des « formes de
                  conception »

                – Connaître le vocabulaire spécifique

                – Connaître quelques « patterns »

                – Concevoir objet différemment



      © A. Beugnard                                                     ENST Bretagne




      Les design patterns                                                               2



            Design Pattern

              En architecture (Christopher Alexander)
              • Description d'un problème rémanent et de sa
                solution
              • Solution pouvant être utilisée des millions de fois
                sans être deux fois identique

              • Forme de conception, pattern, modèle, patron de
                conception

              • Mur, porte, fenêtre <--> objet, interface, classe

                                                    Il existe aussi des « anti-patterns »

      © A. Beugnard                                                     ENST Bretagne




A. Beugnard                                 1                                               1999
Les design patterns


      Les design patterns                                                               3



            Ce que c ’est

            • Description d ’une solution classique à un problème
              récurent

            • Décrit une partie de la solution…
            • Avec des relations avec le système et les autres
              parties...

            • C ’est une technique d ’architecture logicielle




      © A. Beugnard                                                       ENST Bretagne




      Les design patterns                                                               4



            Ce que ce n ’est pas

            • Une brique
                – Un pattern dépend de son environnement
            • Une règle
                – Un pattern ne peut pas s ’appliquer mécaniquement
            • Une méthode
                – Ne guide pas une prise de décision ; un pattern est la
                  décision prise
            • Nouveau
                – Lao-Tzu (-550) travaillait déjà sur les patterns...

                             « Computer scientists think they have discovered the world »
                                                      Anonymous

      © A. Beugnard                                                       ENST Bretagne




A. Beugnard                                   2                                             1999
Les design patterns


      Les design patterns                                                       5



            Avantages

            • Un vocabulaire commun
            • Capitalisation de l ’expérience

            • Un niveau d ’abstraction plus élevé qui permet
              d ’élaborer des constructions logicielles de meilleure
              qualité
            • Réduire la complexité
            • Guide/catalogue de solutions




      © A. Beugnard                                                  ENST Bretagne




      Les design patterns                                                       6



            Inconvénients

            • Effort de synthèse ; reconnaître, abstraire…

            • Apprentissage, expérience

            • Les patterns « se dissolvent » en étant utilisés

            • Nombreux…
                – lesquels sont identiques ?
                – De niveaux différents … des patterns s ’appuient sur
                  d ’autres...


      © A. Beugnard                                                  ENST Bretagne




A. Beugnard                                 3                                        1999
Les design patterns


      Les design patterns                                                   7


            Description d’une forme : langage
            de pattern
            • nom : augmente le vocabulaire, réifie une idée de
              solution, permet de mieux communiquer.

            • problème : quand appliquer la forme, le contexte...

            • solution : les éléments de la solution, leurs relations,
              responsabilités, collaborations. Pas de manière
              précise, mais suggestives...

            • conséquences : résultats et compromis issus de
              l'application de la forme


      © A. Beugnard                                              ENST Bretagne




      Les design patterns                                                   8



            Exemple
            • Nom                   Salle d ’attente
            • Problème              On doit attendre

            • Solution              Toujours relaxante et pas confinée

            • Conséquences          Attente active ou passive ? Durée de
                                       l ’attente ? Distraction ?

            • Exemples              Aéroport, dentiste, ...




      © A. Beugnard                                              ENST Bretagne




A. Beugnard                               4                                      1999
Les design patterns


      Les design patterns                                                          9



            Forme et langage

            • Une forme est indépendante du langage

              (plutôt orienté-objet, mais pas exclusivement, cf.
              Patterns dans Minix)

            • Mais certaines constructions syntaxiques ou
              propriétés du langage rendent inutile ou "naturelle"
              l'utilisation de telle ou telle forme

              (ex : multi-methode simplifie les visiteurs)



      © A. Beugnard                                                     ENST Bretagne




      Les design patterns                                                          10



            Interactions Formes-langages

            • Influence des langages sur les Patterns
                – des langages implantent des formes de bas niveau
                – quelques formes utilisent des concepts spécifiques à un
                  langage
                – quelques formes ne sont pas indépendantes des langages
                – certains langages forcent à tordre des formes compliquées
                  lors de l ’implantation


            • Influence des Patterns sur les langages
                – Les Formes capitalisent l ’état de réflexion courant sur les
                  pratiques de programmation.



      © A. Beugnard                                                     ENST Bretagne




A. Beugnard                                   5                                         1999
Les design patterns


      Les design patterns                                                     11


            Gamma, Helm, Johnson, Vlissides
            "Design Patterns"
            •   Nom et classification     • Implantation
            •   Intention                 • Exemple de code
            •   Autres noms connus        • Usages connus
            •   Motivation (scénario)     • Formes associées
            •   Applicabilité
            •   Structure (OMT)
            •   Participants (classes…)
            •   Collaborations
                                                           La BIBLE
            •   Conséquences
                                                                      Gang4

      © A. Beugnard                                             ENST Bretagne




      Les design patterns                                                     12



            Classification
                      Créateurs      Structuraux      Comportementaux

              Class Factory Method   Adapter(class)  Interpreter
                                                     Template Method
              Object Abstract Factory Adapter(objet) Chain of Respons.
                     Builder          Bridge         Command
                     Prototype        Composite      Iterator
                     Singleton        Decorator      Mediator
                                      Facade         Memento
                                      Flyweight      Observer
                                      Proxy          State
                                                     Strategy
                                                     Visitor

      © A. Beugnard                                             ENST Bretagne




A. Beugnard                               6                                        1999
Les design patterns


      Les design patterns                                           13


            Application des formes lors de la
            conception
            •   Trouver les bons objets
            •   Bien choisir la granularité des objets
            •   Spécifier les interfaces des objets
            •   Spécifier l'implantation des objets
            •   Mieux réutiliser
                 – héritage vs composition
                 – délégation
            • Compiled-Time vs Run-Time Structures
            • Concevoir pour l'évolution


      © A. Beugnard                                      ENST Bretagne




      Les design patterns                                           14



            Mais d’abord, le catalogue !

            • Créational Patterns

            • Structural Patterns

            • Behavioural Patterns




      © A. Beugnard                                      ENST Bretagne




A. Beugnard                                  7                           1999
Les design patterns


      Les design patterns                                              15



            Remarque

            • La référence "Design Patterns" décrit les formes par
              des diagrammes OMT...
                – Comme dans la suite


            MAIS

            • L'héritage et les objets ne sont pas nécessaires




      © A. Beugnard                                         ENST Bretagne




      Les design patterns                                              16



            Creational Patterns

            Formes de création :
            • Abstraire le processus d'instanciation.
            • Rendre indépendant de la façon dont les objets sont
              créés, composés, assemblés, représentés.
            • Encapsuler la connaissance de la classe concrète qui
              instancie.
            • Cacher ce qui est créé, qui crée, comment et quand.




      © A. Beugnard                                         ENST Bretagne




A. Beugnard                             8                                   1999
Les design patterns


      Les design patterns                                               17



            Principes

            • AbstractFactory ; on passe un paramètre à la création
              qui définit ce qu'on va créer
            • Builder ; on passe en paramètre un objet qui sait
              construire l'objet à partir d'une description
            • FactoryMethod ; la classe sollicité appelle des
              méthode abstraites ...il suffit de sous-classer
            • Prototype ; des prototypes variés existent qui sont
              copiés et assemblés
            • Singleton ; unique instance



      © A. Beugnard                                          ENST Bretagne




      Les design patterns                                               18



            Utilisation

            On utilise l'AbstractFactory lorsque :
            • un système doit être indépendant de la façon dont
              ses produits sont créés, assemblés, représentés
            • un système repose sur un produit d'une famille de
              produits
            • une famille de produits doivent être utilisés ensemble,
              pour renforcer cette contrainte
            • on veut définir une interface unique à une famille de
              produits concrets



      © A. Beugnard                                          ENST Bretagne




A. Beugnard                             9                                    1999
Les design patterns


      Les design patterns                                                                 19



            Abstract Factory
                                                                               Client
                          WidgetFactory

                          createWindow                           Window
                          createScrollBar

                                          Factory
                                                          MacWindow      MotifWindow
              MotifWidgetFactory   MacWidgetFactory

              createWindow         createWindow                   ScrollBar
              createScrollBar      createScrollBar
                                                                              Products

                                                          MacScrollBar   MotifScrollBar


      © A. Beugnard                                                           ENST Bretagne




      Les design patterns                                                                 20



            Utilisation

            On utilise le Builder lorsque :
            • l'algorithme pour créer un objet doit être indépendant
              des parties qui le compose et de la façon de les
              assembler
            • le processus de construction permet différentes
              représentations de l'objet construit




      © A. Beugnard                                                           ENST Bretagne




A. Beugnard                                          10                                        1999
Les design patterns


      Les design patterns                                                            21



            Builder
                            Builder                      Director
                                             structure
                            buildPart                    construct




                          ConcreteBuilder         forall objects in structure {
                                                  builder -> BuildPart()
                          buildPart               }
                          getResult


                Product



      © A. Beugnard                                                       ENST Bretagne




      Les design patterns                                                            22



            Utilisation

            On utilise le FactoryMethod lorsque :
            • une classe ne peut anticiper la classe de l'objet
              qu'elle doit construire
            • une classe délègue la responsabilité de la création à
              ses sous-classes, tout en concentrant l'interface dans
              une classe unique




      © A. Beugnard                                                       ENST Bretagne




A. Beugnard                                 11                                            1999
Les design patterns


      Les design patterns                                                      23



            FactoryMethod

                                 Creator
                Product          factoryMethod    produit := factoryMethod
                                 UneOperation




                                ConcreteCreator
              ConcreteProduct                     return new ConcreteProduct
                                factoryMethod




      © A. Beugnard                                             ENST Bretagne




      Les design patterns                                                      24



            Utilisation

            On utilise le Prototype lorsque :
            • un système doit être indépendant de la façon dont
              ses produits sont créés, assemblés, représentés
            • quand la classe n'est connue qu'à l'exécution
            • pour éviter une hiérarchie de Factory parallèle à une
              hiérarchie de produits




      © A. Beugnard                                             ENST Bretagne




A. Beugnard                                12                                       1999
Les design patterns


      Les design patterns                                                           25



            Prototype

                                    Prototype
                Client              clone
                Operation

              o = prototype.clone
                                    ConcretePrototype1      ConcretePrototype2

                                    clone                   clone


                                    return a copy of self   return a copy of self



      © A. Beugnard                                                     ENST Bretagne




      Les design patterns                                                           26



            Utilisation

            On utilise le Singleton lorsque :
            • il n'y a qu'une unique instance d'une classe et qu'elle
              doit être accessible de manière connue
            • une instance unique peut être sous-classée et que
              les clients peuvent référencer cette extension sans
              avoir à modifier leur code




      © A. Beugnard                                                     ENST Bretagne




A. Beugnard                                 13                                           1999
Les design patterns


      Les design patterns                                                           27



            Singleton


                            Singleton
                                                   return soleInstance
                            static Instance
                            ...




      © A. Beugnard                                                      ENST Bretagne




      Les design patterns                                                           28



            Structural Patterns

            Formes de structure :

            • Comment les objets sont assemblés

            • Les patterns sont complémentaires les uns des
              autres




      © A. Beugnard                                                      ENST Bretagne




A. Beugnard                                   14                                         1999
Les design patterns


      Les design patterns                                                  29



            Principes

            • Adapter ; rendre un objet conformant à un autre
            • Bridge ; pour lier une abstraction à une implantation
            • Composite ; basé sur des objets primitifs et
              composants
            • Decorator ; ajoute des services à un objet
            • Facade ; cache une structure complexe
            • Flyweight ; petits objets destinés à être partagés
            • Proxy ; un objet en masque un autre




      © A. Beugnard                                             ENST Bretagne




      Les design patterns                                                  30



            Utilisation                                       Adaptation
                                                              conception


            On utilise l'Adapter lorsque on veut utiliser :

            • une classe existante dont l'interface ne convient pas
            • plusieurs sous-classes mais il est est coûteux de
              redéfinir l'interface de chaque sous-classe en les
              sous-classant. Un adapter peut adapter l'interface au
              niveau du parent.




      © A. Beugnard                                             ENST Bretagne




A. Beugnard                               15                                    1999
Les design patterns


      Les design patterns                                                          31



            Adapter
                                            Version héritage multiple

                Client           Cible               Adapté

                                 Request             methodeSpec.




                                Adapter

                                Request                       methodSpec()




      © A. Beugnard                                                     ENST Bretagne




      Les design patterns                                                          32



            Adapter
                                            Version composition

                Client           Cible               Adapté

                                 Request             methodeSpec.




                                                 adapté
                                Adapter

                                Request               adapté.methodSpec()




      © A. Beugnard                                                     ENST Bretagne




A. Beugnard                                16                                           1999
Les design patterns


      Les design patterns                                                          33



            Utilisation                                              Conception
                                                                      nouvelle

            On utilise Bridge lorsque :
            • on veut éviter un lien permanent entre l'abstraction et
              l'implantation (ex: l'implantation est choisie à
              l'exécution)
            • l'abstraction et l'implantation sont toutes les deux
              susceptibles d'être raffinées
            • les modifications subies par l'implantation ou
              l'abstraction ne doivent pas avoir d'impacts sur le
              client (pas de recompilation)




      © A. Beugnard                                                     ENST Bretagne




      Les design patterns                                                          34



            Bridge
                                                   imp
         Client              Abstraction                           Implementor

                             Operation                             OperImpl1
                                                  imp.operImpl()




                             RefinedAbstraction                    ConcreteImplA

                                                                   OperImpl1




      © A. Beugnard                                                     ENST Bretagne




A. Beugnard                                   17                                        1999
Les design patterns


      Les design patterns                                             35



            Utilisation

            On utilise Composite lorsque on veut :

            • représenter une hiérarchie d'objets
            • ignorer la différence entre un composant simple et un
              composant en contenant d'autres. (interface
              uniforme)




      © A. Beugnard                                        ENST Bretagne




      Les design patterns                                             36



            Composite

                             Component

                             Operation
                             add




                             Feuille          Composite

                                              Operation
                                              add



      © A. Beugnard                                        ENST Bretagne




A. Beugnard                              18                                1999
Les design patterns


      Les design patterns                                                                  37



            Utilisation

            On utilise Decorator lorsque :

            • il faut ajouter des responsabilités dynamiquement et
              de manière transparente
            • il existe des responsabilités dont on peut se passer
            • des extensions sont indépendantes et qu'il serait
              impraticable d'implanter par sous-classage




      © A. Beugnard                                                           ENST Bretagne




      Les design patterns                                                                  38



            Decorator
                      Component

                      Operation



                                                    comp
          ConcreteComponent        Decorator

                                   Operation               comp.Operation()




                              DecoratorB        DecoratorA
                                                                       super.Operation()
                                                                       addedBehavior()
                                                Operation
                                                addedBehavior

      © A. Beugnard                                                           ENST Bretagne




A. Beugnard                                    19                                               1999
Les design patterns


      Les design patterns                                               39



            Utilisation

            On utilise Facade lorsque on veut :

            • fournir une interface simple à un système complexe
            • introduire une interface pour découpler les relations
              entre deux systèmes complexes
            • construire le système en couche




      © A. Beugnard                                          ENST Bretagne




      Les design patterns                                               40



            Facade

                                    FACADE




      © A. Beugnard                                          ENST Bretagne




A. Beugnard                             20                                   1999
Les design patterns


      Les design patterns                                                       41



            Utilisation

            On utilise Flyweight lorsque :
            • on utilise beaucoup d'objets, et
            • les coûts de sauvegarde sont élevés, et
            • l'état des objets peut être externalisé (extrinsic), et
            • de nombreux groupes d'objets peuvent être
              remplacés par quelques objets partagés un fois que
              les états sont externalisés, et
            • l'application ne dépend pas de l'identité des objets




      © A. Beugnard                                                  ENST Bretagne




      Les design patterns                                                       42



            Flyweight

                FWFactory                             Flyweight

                get(key)                              Operation

                            si FW(key) existe
                              retourne FW
                            sinon                SharedFW         UnsharedFW
                              creer un new FW
                              le retourne        Operation        Operation



                   Client



      © A. Beugnard                                                  ENST Bretagne




A. Beugnard                                     21                                   1999
Les design patterns


      Les design patterns                                                                  43



            Utilisation

            On utilise le Proxy lorsqu'on veut référencer un objet
              par un moyen plus complexe qu'un pointeur...
            • remote proxy : ambassadeur
            • protection proxy : contrôle d'accès
            • référence intelligente
                – persistence
                – comptage de référence
                –…




      © A. Beugnard                                                           ENST Bretagne




      Les design patterns                                                                  44



            Proxy

                 Client                   Subject

                                          Operation



                                                    realSubject
                            RealSubject                           Proxy

                            Operation                             Operation



                                                                   realSubject.Operation



      © A. Beugnard                                                           ENST Bretagne




A. Beugnard                                    22                                               1999
Les design patterns


      Les design patterns                                          45



            Behavioural Patterns

            Formes de comportement pour décrire :

            • des algorithmes
            • des comportements entre objets
            • des formes de communication entre objet




      © A. Beugnard                                     ENST Bretagne




      Les design patterns                                          46



            Principes
            •   Chain of Responsibility
            •   Command
            •   Interpreter
            •   Iterator
            •   Mediator
            •   Memento
            •   Observer
            •   State
            •   Strategy
            •   Template Method
            •   Visitor
      © A. Beugnard                                     ENST Bretagne




A. Beugnard                               23                            1999
Les design patterns


      Les design patterns                                                          47



            Utilisation

            On utilise Chain of Responsibility lorsque :

            • plus d'un objet peut traiter une requète, et il n'est pas
              connu a priori

            • l'ensemble des objets pouvant traiter une requète est
              construit dynamiquement




      © A. Beugnard                                                     ENST Bretagne




      Les design patterns                                                          48



            Chain of Responsibility

                                                        successor

                      Client                Handler

                                            Operation



                                Handler1                    Handler2

                                Operation                   Operation




      © A. Beugnard                                                     ENST Bretagne




A. Beugnard                                    24                                       1999
Les design patterns


      Les design patterns                                                                49



            Utilisation

            On utilise Command lorsque :

            • spécifier, stocker et exécuter des actions à des
              moments différents.
            • on veut pouvoir "défaire". Les commandes exécutées
              peuvent être stockées ainsi que les états des objets
              affectés...
            • on veut implanter des transactions ; actions de "haut-
              niveau".




      © A. Beugnard                                                           ENST Bretagne




      Les design patterns                                                                50



            Command


                                         Invoker                    Command

                                                                    Execute
                      Client


                                Receiver.                          ConcreteCommand
                                                        receiver
                                Action                             Execute




      © A. Beugnard                                                           ENST Bretagne




A. Beugnard                                        25                                         1999
Les design patterns


      Les design patterns                                                         51



            Utilisation

            On utilise Interpreter lorsqu'il faut interpréter un langage
             et que :

            • la grammaire est simple

            • l'efficacité n'est pas un paramètre critique




      © A. Beugnard                                                    ENST Bretagne




      Les design patterns                                                         52



            Interpreter


                      Client                 Expression

                                             Interpret
                      Context


                                 TerminalExpres.    NonTerminalExpr.

                                 Interpret          Interpret




      © A. Beugnard                                                    ENST Bretagne




A. Beugnard                                        26                                  1999
Les design patterns


      Les design patterns                                                  53



            Utilisation

            On utilise Iterator lorsque :
            • pour accéder à un objet composé dont on ne veut
              pas exposer la structure interne
            • pour offrir plusieurs manières de parcourir une
              structure composée
            • pour offrir une interface uniforme pour parcourir
              différentes structures




      © A. Beugnard                                             ENST Bretagne




      Les design patterns                                                  54



            Iterator

                                                     Iterator
              Aggregate                Client
                                                     first
              createIterator                         next
                                                     done
                                                     current


              ConcreteAggregate

                                                    ConcreteIterator




      © A. Beugnard                                             ENST Bretagne




A. Beugnard                               27                                    1999
Les design patterns


      Les design patterns                                                        55



            Utilisation

            On utilise Mediator lorsque :

            • quand de nombreux objets doivent communiquer
              ensemble
            • la réutilisation d'un objet est délicate car il référence
              et communique avec de nombreux autres objets




      © A. Beugnard                                                ENST Bretagne




      Les design patterns                                                        56



            Mediator

               Mediator                                Colleague
                                            mediator




              ConcreteMediator       ConcreteColleague1.   ConcreteColleague2.




      © A. Beugnard                                                ENST Bretagne




A. Beugnard                               28                                          1999
Les design patterns


      Les design patterns                                                  57



            Utilisation

            On utilise Memento lorsque :

            • on veut sauvegarder tout ou partie de l'état d'un objet
              pour éventuellement pouvoir le restaurer, et

            • une interface directe pour obtenir l'état de l'objet
              briserait l'encapsulation




      © A. Beugnard                                            ENST Bretagne




      Les design patterns                                                  58



            Memento



              Originator               Memento                 Caretaker




      © A. Beugnard                                            ENST Bretagne




A. Beugnard                              29                                     1999
Les design patterns


      Les design patterns                                                               59



            Utilisation

            On utilise Observer lorsque :
            • Une abstraction a plusieurs aspects, dépendant l'un
              de l'autre. Encapsuler ces aspects indépendament
              permet de les réutiliser séparément.
            • Quand le changement d'un objet se répercute vers
              d'autres.
            • Quand un objet doit prévenir d'autres objets sans
              pour autant les connaitre.




      © A. Beugnard                                                          ENST Bretagne




      Les design patterns                                                               60



            Observer
                                    observers
                      Subject                               Observer
                      Attach                                Update
                      Detach
                      Notify            forall observers
                                        o.update



                                                subject
                  ConcreteSubject                          ConcreteObserver

                                                           Update

                                                                       subject.action


      © A. Beugnard                                                          ENST Bretagne




A. Beugnard                                     30                                           1999
Les design patterns


      Les design patterns                                                         61



            Utilisation

            On utilise State lorsque :

            • Le comportement d'un objet dépend de son état, qui
              change à l'exécution

            • Les opérations sont constituées de partie
              conditionnelles de grande taille (case)




      © A. Beugnard                                                    ENST Bretagne




      Les design patterns                                                         62



            State

                      Context            state
                                                       State
                      Request                          Handle



                      state.handle


                                     ConcreteStateA   ConcreteStateB

                                     Handle           Handle



      © A. Beugnard                                                    ENST Bretagne




A. Beugnard                                      31                                    1999
Les design patterns


      Les design patterns                                                       63



            Utilisation

            On utilise Strategy lorsque :
            • de nombreuses classes associées ne diffèrent que
              par leur comportement. Stratégie offre un moyen de
              configurer une classe avec un comportement parmi
              plusieurs.
            • on a besoin de plusieurs variantes d'algorithme.
            • un algorithme utilise des données que les clients ne
              doivent pas connaitre.




      © A. Beugnard                                                  ENST Bretagne




      Les design patterns                                                       64



            Strategy

                      Context       strategy
                                                     Strategy
                      Request                        interfaceAlgo




                                ConcreteStrategyA   ConcreteStrategyB

                                interfaceAlgo       interfaceAlgo



      © A. Beugnard                                                  ENST Bretagne




A. Beugnard                               32                                         1999
Les design patterns


      Les design patterns                                               65



            Utilisation

            On utilise TemplateMethod :

            • pour implanter une partie invariante d'un algorithme.
            • pour partager des comportements communs d'une
              hiérarchie de classes.
            • pour contrôler des extensions de sous-classe.




      © A. Beugnard                                          ENST Bretagne




      Les design patterns                                               66



            Template Method
                       AbstractClass

                       Template                 …
                       operation1               operation1
                       operation2               …
                                                operation2
                                                …


                      ConcreteClass

                      Template
                      operation1
                      operation2


      © A. Beugnard                                          ENST Bretagne




A. Beugnard                             33                                   1999
Les design patterns


      Les design patterns                                                            67



            Utilisation

            On utilise Visitor lorsque :

            • une structure d'objets contient de nombreuses
              classes avec des interfaces différentes et on veut
              appliquer des operations diverses sur ces objets.
            • les structures sont assez stables, et les opération sur
              leurs objets évolutives.




      © A. Beugnard                                                   ENST Bretagne




      Les design patterns                                                            68



            Visitor
                            Vistor

                            visitConcretElementA()
                                                                 Element

                                                                 accept(Visitor)
      ConcreteVisitorA        ConcreteVisitorB

      visitConcretElementA() visitConcretElementA()



                                             ConcreteElementA    ConcreteElementB
         v.visitConcretElementA(this)
                                             accept(Visitor v)   accept(Visitor v)


      © A. Beugnard                                                   ENST Bretagne




A. Beugnard                                   34                                          1999
Les design patterns


      Les design patterns                                                    69


            Application des formes lors de la
            conception                     BIS
            •   Trouver les bons objets
            •   Bien choisir la granularité des objets
            •   Spécifier les interfaces des objets
            •   Spécifier l'implantation des objets
            •   Mieux réutiliser
                 – héritage vs composition
                 – délégation
            • Compiled-Time vs Run-Time Structures
            • Concevoir pour l'évolution


      © A. Beugnard                                               ENST Bretagne




      Les design patterns                                                    70



            Trouver les bons objets

            Les patterns proposent des abstractions qui
              n'apparaissent pas "naturellement" en observant le
              monde réel :
            • Composite : permet de traiter uniformément une
              structure d'objets hétérogènes
            • Strategy : permet d'implanter une famille
              d'algorithmes interchangeables
            • State

            Ils améliorent la flexibilité et la réutilisabilité


      © A. Beugnard                                               ENST Bretagne




A. Beugnard                                  35                                   1999
Les design patterns


      Les design patterns                                              71



            Bien choisir la granularité des objets

            La taille des objets peut varier considérablement ;
              comment choisir ce qui doit être décomposé ou au
              contraire regroupé ?

            • Facade
            • Flyweight

            • Abstract Factory
            • Builder



      © A. Beugnard                                         ENST Bretagne




      Les design patterns                                              72



            Spécifier les interfaces des objets

            Qu’est-ce qui fait partie d’un objet ou non ?

            •   Memento ; mémorise les états, retour arrière
            •   Decorator ; augmente l'interface
            •   Proxy ; interface délégué
            •   Visitor ; regroupe des interfaces
            •   Facade ; cache une structure complexe d'objet




      © A. Beugnard                                         ENST Bretagne




A. Beugnard                              36                                 1999
Les design patterns


      Les design patterns                                                         73



            Spécifier l'implantation des objets

            Différence type-classe…
            • Chain of Responsibility ; même interface, mais
              implantations différentes
            • Composite ; les Components ont une même interface
              dont l'implantation est en partie partagée dans le
              Composite
            • Command, Observer, State, Strategy ne sont souvent
              que des interfaces abstraites
            • Prototype, Singleton, Factory, Builder sont des
              abstractions pour créer des objets qui permettent de
              penser en termes d'interfaces et de leur associer
              différentes implantations
      © A. Beugnard                                                    ENST Bretagne




      Les design patterns                                                         74



            Mieux réutiliser

            • héritage vs composition
                – white-box reuse ; rompt l'encapsulation - stricte ou non
                – black-box reuse ; flexible, dynamique

            "Préférez la composition à l'héritage"

            • délégation (redirection)
                – Une forme de composition...qui remplace l'héritage
                – Bridge découple l'interface de l'implantation
                – Mediator, Visitor, Proxy



      © A. Beugnard                                                    ENST Bretagne




A. Beugnard                                  37                                        1999
Les design patterns


      Les design patterns                                                  75


            Compiled-Time vs Run-Time
            Structures
            • Aggrégation
              composition, is-part-of
              dépendence, durée de vie liée, responsabilité
              plus stable ~ compiled-time, statique

            • Connaissance (accointance)
              lien, association
              relation fugitive, utilisation ponctuelle
              dynamique, run-time




      © A. Beugnard                                             ENST Bretagne




      Les design patterns                                                  76



            Concevoir pour l'évolution (1)

                 Quelques raisons de "reengineering" :
                 • Création d'un objet en référençant sa classe
                   explicitement...Lien à une implantation
                   particulière...pour éviter utilisez AbstractFactory,
                   FactoryMethod, Prototype
                 • Dépendance d'une opération spécifique...pour
                   rendre plus souple utilisez Chain Of
                   Responsibility, Command
                 • Dépendance d'une couche matérielle ou
                   logicielle...AbstractFactory, Bridge


      © A. Beugnard                                             ENST Bretagne




A. Beugnard                               38                                    1999
Les design patterns


      Les design patterns                                                 77



            Concevoir pour l'évolution (2)

                 Quelques raisons de "reengineering" :
                 • Dépendance d'une implantation...pour rendre
                   plus souple utilisez AbstractFactory, Bridge,
                   Memento, Proxy
                 • Dépendance d'un algorithme
                   particulier...Builder, Iterator, Strategy,
                   TemplateMethod, Strategy
                 • Couplage fort...relâcher les relations utilisez
                   AbstractFactory, Bridge, Chain Of
                   Responsibility, Command, Facade, Mediator,
                   Observer

      © A. Beugnard                                            ENST Bretagne




      Les design patterns                                                 78



            Concevoir pour l'évolution (3)

                 Quelques raisons de "reengineering" :
                 • Etendre les fonctionnalités en sous-classant
                   peut être couteux (tests, compréhension des
                   superclasses, etc) utilisez aussi la délégation, la
                   composition...Bridge, Chain Of Responsibility,
                   Composite, Decorator, Observer, Strategy,
                   Proxy
                 • Impossibilité de modifier une classe...absence
                   du source, trop de répercussions, voyez
                   Adapter, Decorator, Visitor


      © A. Beugnard                                            ENST Bretagne




A. Beugnard                              39                                    1999
Les design patterns


      Les design patterns                                                 79



            Autres patterns

            Architecture :
            • Couche : systèmes en couches (OS, piles OSI)
                   proche de Facade

            Algorithmique distribué :
            • Jeton circulant
            • Vague de calculs diffusant




      © A. Beugnard                                            ENST Bretagne




      Les design patterns                                                 80



            Conclusion

            • Architecture de logiciel

            • Capitalisation d'expériences dans les Patterns

            • Une forme se mémorise bien, s'adapte
              nécessairement

            • Pas réservé aux objets

            • Comme la prose, on les utilise sans le savoir ! mais
              quand on en est conscient, on améliore sa réflexion.

      © A. Beugnard                                            ENST Bretagne




A. Beugnard                              40                                    1999

Weitere ähnliche Inhalte

Andere mochten auch

Bloque administración
Bloque administraciónBloque administración
Bloque administraciónjuanjoreverte
 
Lire en vendée 26 avril2013
Lire en vendée 26 avril2013Lire en vendée 26 avril2013
Lire en vendée 26 avril2013ecrivains-vendee
 
A la découverte de Drupal
A la découverte de DrupalA la découverte de Drupal
A la découverte de DrupalClaire Roubey
 
Lucía i Cristina T
Lucía i Cristina TLucía i Cristina T
Lucía i Cristina Tggracia2
 
RSLN #8 - L'info est-elle prête pour sa révolution ?
RSLN #8 - L'info est-elle prête pour sa révolution ?RSLN #8 - L'info est-elle prête pour sa révolution ?
RSLN #8 - L'info est-elle prête pour sa révolution ?RSLN mag
 
Guía en la redacción al estilo APA, 6ta edición
Guía en la redacción al estilo APA, 6ta ediciónGuía en la redacción al estilo APA, 6ta edición
Guía en la redacción al estilo APA, 6ta ediciónPs Avila Ψ
 
Presentationite : Maladie courante des présentations actuelles
Presentationite : Maladie courante des présentations actuellesPresentationite : Maladie courante des présentations actuelles
Presentationite : Maladie courante des présentations actuellesJohanne Martel
 
Shidelidiapaez.doc
Shidelidiapaez.docShidelidiapaez.doc
Shidelidiapaez.doc15177783
 
La Calidad más allá de la Certificación
La Calidad más allá de la CertificaciónLa Calidad más allá de la Certificación
La Calidad más allá de la CertificaciónJuan Carlos Fernandez
 
Fonds d’assurance maladie igf rapport 2010 / http://www.igf.finances.gouv.fr...
Fonds d’assurance maladie  igf rapport 2010 / http://www.igf.finances.gouv.fr...Fonds d’assurance maladie  igf rapport 2010 / http://www.igf.finances.gouv.fr...
Fonds d’assurance maladie igf rapport 2010 / http://www.igf.finances.gouv.fr...Ministère de l'Économie et des Finances
 
Time To Market 09 Sshow
Time To Market 09 SshowTime To Market 09 Sshow
Time To Market 09 Sshowgus1971
 
La bibliothèque dans l'inconscient collectif : une double contrainte
La bibliothèque dans l'inconscient collectif : une double contrainteLa bibliothèque dans l'inconscient collectif : une double contrainte
La bibliothèque dans l'inconscient collectif : une double contrainteMarielle de Miribel
 

Andere mochten auch (20)

ALSBLNB Conférence 2014 Saint John Atelier C- Propager le mot sur le logemen...
ALSBLNB Conférence 2014 Saint John Atelier C-  Propager le mot sur le logemen...ALSBLNB Conférence 2014 Saint John Atelier C-  Propager le mot sur le logemen...
ALSBLNB Conférence 2014 Saint John Atelier C- Propager le mot sur le logemen...
 
Cecaba 15 aniversario
Cecaba 15 aniversarioCecaba 15 aniversario
Cecaba 15 aniversario
 
Actividad reciente
Actividad recienteActividad reciente
Actividad reciente
 
Bloque administración
Bloque administraciónBloque administración
Bloque administración
 
Lire en vendée 26 avril2013
Lire en vendée 26 avril2013Lire en vendée 26 avril2013
Lire en vendée 26 avril2013
 
A la découverte de Drupal
A la découverte de DrupalA la découverte de Drupal
A la découverte de Drupal
 
Complejo Educativo Virtual
Complejo Educativo VirtualComplejo Educativo Virtual
Complejo Educativo Virtual
 
Lucía i Cristina T
Lucía i Cristina TLucía i Cristina T
Lucía i Cristina T
 
Rapport2010
Rapport2010Rapport2010
Rapport2010
 
RSLN #8 - L'info est-elle prête pour sa révolution ?
RSLN #8 - L'info est-elle prête pour sa révolution ?RSLN #8 - L'info est-elle prête pour sa révolution ?
RSLN #8 - L'info est-elle prête pour sa révolution ?
 
Guía en la redacción al estilo APA, 6ta edición
Guía en la redacción al estilo APA, 6ta ediciónGuía en la redacción al estilo APA, 6ta edición
Guía en la redacción al estilo APA, 6ta edición
 
Presentationite : Maladie courante des présentations actuelles
Presentationite : Maladie courante des présentations actuellesPresentationite : Maladie courante des présentations actuelles
Presentationite : Maladie courante des présentations actuelles
 
Shidelidiapaez.doc
Shidelidiapaez.docShidelidiapaez.doc
Shidelidiapaez.doc
 
La Calidad más allá de la Certificación
La Calidad más allá de la CertificaciónLa Calidad más allá de la Certificación
La Calidad más allá de la Certificación
 
Rapport sur la depense publique et son évolution
Rapport sur la depense publique et son évolution Rapport sur la depense publique et son évolution
Rapport sur la depense publique et son évolution
 
MESAS DE LUZ
MESAS DE LUZMESAS DE LUZ
MESAS DE LUZ
 
Fonds d’assurance maladie igf rapport 2010 / http://www.igf.finances.gouv.fr...
Fonds d’assurance maladie  igf rapport 2010 / http://www.igf.finances.gouv.fr...Fonds d’assurance maladie  igf rapport 2010 / http://www.igf.finances.gouv.fr...
Fonds d’assurance maladie igf rapport 2010 / http://www.igf.finances.gouv.fr...
 
PSP
PSPPSP
PSP
 
Time To Market 09 Sshow
Time To Market 09 SshowTime To Market 09 Sshow
Time To Market 09 Sshow
 
La bibliothèque dans l'inconscient collectif : une double contrainte
La bibliothèque dans l'inconscient collectif : une double contrainteLa bibliothèque dans l'inconscient collectif : une double contrainte
La bibliothèque dans l'inconscient collectif : une double contrainte
 

Dp

  • 1. Les design patterns Les design patterns 1 Design Pattern • Objectifs – Comprendre les bases de la philosophie des « formes de conception » – Connaître le vocabulaire spécifique – Connaître quelques « patterns » – Concevoir objet différemment © A. Beugnard ENST Bretagne Les design patterns 2 Design Pattern En architecture (Christopher Alexander) • Description d'un problème rémanent et de sa solution • Solution pouvant être utilisée des millions de fois sans être deux fois identique • Forme de conception, pattern, modèle, patron de conception • Mur, porte, fenêtre <--> objet, interface, classe Il existe aussi des « anti-patterns » © A. Beugnard ENST Bretagne A. Beugnard 1 1999
  • 2. Les design patterns Les design patterns 3 Ce que c ’est • Description d ’une solution classique à un problème récurent • Décrit une partie de la solution… • Avec des relations avec le système et les autres parties... • C ’est une technique d ’architecture logicielle © A. Beugnard ENST Bretagne Les design patterns 4 Ce que ce n ’est pas • Une brique – Un pattern dépend de son environnement • Une règle – Un pattern ne peut pas s ’appliquer mécaniquement • Une méthode – Ne guide pas une prise de décision ; un pattern est la décision prise • Nouveau – Lao-Tzu (-550) travaillait déjà sur les patterns... « Computer scientists think they have discovered the world » Anonymous © A. Beugnard ENST Bretagne A. Beugnard 2 1999
  • 3. Les design patterns Les design patterns 5 Avantages • Un vocabulaire commun • Capitalisation de l ’expérience • Un niveau d ’abstraction plus élevé qui permet d ’élaborer des constructions logicielles de meilleure qualité • Réduire la complexité • Guide/catalogue de solutions © A. Beugnard ENST Bretagne Les design patterns 6 Inconvénients • Effort de synthèse ; reconnaître, abstraire… • Apprentissage, expérience • Les patterns « se dissolvent » en étant utilisés • Nombreux… – lesquels sont identiques ? – De niveaux différents … des patterns s ’appuient sur d ’autres... © A. Beugnard ENST Bretagne A. Beugnard 3 1999
  • 4. Les design patterns Les design patterns 7 Description d’une forme : langage de pattern • nom : augmente le vocabulaire, réifie une idée de solution, permet de mieux communiquer. • problème : quand appliquer la forme, le contexte... • solution : les éléments de la solution, leurs relations, responsabilités, collaborations. Pas de manière précise, mais suggestives... • conséquences : résultats et compromis issus de l'application de la forme © A. Beugnard ENST Bretagne Les design patterns 8 Exemple • Nom Salle d ’attente • Problème On doit attendre • Solution Toujours relaxante et pas confinée • Conséquences Attente active ou passive ? Durée de l ’attente ? Distraction ? • Exemples Aéroport, dentiste, ... © A. Beugnard ENST Bretagne A. Beugnard 4 1999
  • 5. Les design patterns Les design patterns 9 Forme et langage • Une forme est indépendante du langage (plutôt orienté-objet, mais pas exclusivement, cf. Patterns dans Minix) • Mais certaines constructions syntaxiques ou propriétés du langage rendent inutile ou "naturelle" l'utilisation de telle ou telle forme (ex : multi-methode simplifie les visiteurs) © A. Beugnard ENST Bretagne Les design patterns 10 Interactions Formes-langages • Influence des langages sur les Patterns – des langages implantent des formes de bas niveau – quelques formes utilisent des concepts spécifiques à un langage – quelques formes ne sont pas indépendantes des langages – certains langages forcent à tordre des formes compliquées lors de l ’implantation • Influence des Patterns sur les langages – Les Formes capitalisent l ’état de réflexion courant sur les pratiques de programmation. © A. Beugnard ENST Bretagne A. Beugnard 5 1999
  • 6. Les design patterns Les design patterns 11 Gamma, Helm, Johnson, Vlissides "Design Patterns" • Nom et classification • Implantation • Intention • Exemple de code • Autres noms connus • Usages connus • Motivation (scénario) • Formes associées • Applicabilité • Structure (OMT) • Participants (classes…) • Collaborations La BIBLE • Conséquences Gang4 © A. Beugnard ENST Bretagne Les design patterns 12 Classification Créateurs Structuraux Comportementaux Class Factory Method Adapter(class) Interpreter Template Method Object Abstract Factory Adapter(objet) Chain of Respons. Builder Bridge Command Prototype Composite Iterator Singleton Decorator Mediator Facade Memento Flyweight Observer Proxy State Strategy Visitor © A. Beugnard ENST Bretagne A. Beugnard 6 1999
  • 7. Les design patterns Les design patterns 13 Application des formes lors de la conception • Trouver les bons objets • Bien choisir la granularité des objets • Spécifier les interfaces des objets • Spécifier l'implantation des objets • Mieux réutiliser – héritage vs composition – délégation • Compiled-Time vs Run-Time Structures • Concevoir pour l'évolution © A. Beugnard ENST Bretagne Les design patterns 14 Mais d’abord, le catalogue ! • Créational Patterns • Structural Patterns • Behavioural Patterns © A. Beugnard ENST Bretagne A. Beugnard 7 1999
  • 8. Les design patterns Les design patterns 15 Remarque • La référence "Design Patterns" décrit les formes par des diagrammes OMT... – Comme dans la suite MAIS • L'héritage et les objets ne sont pas nécessaires © A. Beugnard ENST Bretagne Les design patterns 16 Creational Patterns Formes de création : • Abstraire le processus d'instanciation. • Rendre indépendant de la façon dont les objets sont créés, composés, assemblés, représentés. • Encapsuler la connaissance de la classe concrète qui instancie. • Cacher ce qui est créé, qui crée, comment et quand. © A. Beugnard ENST Bretagne A. Beugnard 8 1999
  • 9. Les design patterns Les design patterns 17 Principes • AbstractFactory ; on passe un paramètre à la création qui définit ce qu'on va créer • Builder ; on passe en paramètre un objet qui sait construire l'objet à partir d'une description • FactoryMethod ; la classe sollicité appelle des méthode abstraites ...il suffit de sous-classer • Prototype ; des prototypes variés existent qui sont copiés et assemblés • Singleton ; unique instance © A. Beugnard ENST Bretagne Les design patterns 18 Utilisation On utilise l'AbstractFactory lorsque : • un système doit être indépendant de la façon dont ses produits sont créés, assemblés, représentés • un système repose sur un produit d'une famille de produits • une famille de produits doivent être utilisés ensemble, pour renforcer cette contrainte • on veut définir une interface unique à une famille de produits concrets © A. Beugnard ENST Bretagne A. Beugnard 9 1999
  • 10. Les design patterns Les design patterns 19 Abstract Factory Client WidgetFactory createWindow Window createScrollBar Factory MacWindow MotifWindow MotifWidgetFactory MacWidgetFactory createWindow createWindow ScrollBar createScrollBar createScrollBar Products MacScrollBar MotifScrollBar © A. Beugnard ENST Bretagne Les design patterns 20 Utilisation On utilise le Builder lorsque : • l'algorithme pour créer un objet doit être indépendant des parties qui le compose et de la façon de les assembler • le processus de construction permet différentes représentations de l'objet construit © A. Beugnard ENST Bretagne A. Beugnard 10 1999
  • 11. Les design patterns Les design patterns 21 Builder Builder Director structure buildPart construct ConcreteBuilder forall objects in structure { builder -> BuildPart() buildPart } getResult Product © A. Beugnard ENST Bretagne Les design patterns 22 Utilisation On utilise le FactoryMethod lorsque : • une classe ne peut anticiper la classe de l'objet qu'elle doit construire • une classe délègue la responsabilité de la création à ses sous-classes, tout en concentrant l'interface dans une classe unique © A. Beugnard ENST Bretagne A. Beugnard 11 1999
  • 12. Les design patterns Les design patterns 23 FactoryMethod Creator Product factoryMethod produit := factoryMethod UneOperation ConcreteCreator ConcreteProduct return new ConcreteProduct factoryMethod © A. Beugnard ENST Bretagne Les design patterns 24 Utilisation On utilise le Prototype lorsque : • un système doit être indépendant de la façon dont ses produits sont créés, assemblés, représentés • quand la classe n'est connue qu'à l'exécution • pour éviter une hiérarchie de Factory parallèle à une hiérarchie de produits © A. Beugnard ENST Bretagne A. Beugnard 12 1999
  • 13. Les design patterns Les design patterns 25 Prototype Prototype Client clone Operation o = prototype.clone ConcretePrototype1 ConcretePrototype2 clone clone return a copy of self return a copy of self © A. Beugnard ENST Bretagne Les design patterns 26 Utilisation On utilise le Singleton lorsque : • il n'y a qu'une unique instance d'une classe et qu'elle doit être accessible de manière connue • une instance unique peut être sous-classée et que les clients peuvent référencer cette extension sans avoir à modifier leur code © A. Beugnard ENST Bretagne A. Beugnard 13 1999
  • 14. Les design patterns Les design patterns 27 Singleton Singleton return soleInstance static Instance ... © A. Beugnard ENST Bretagne Les design patterns 28 Structural Patterns Formes de structure : • Comment les objets sont assemblés • Les patterns sont complémentaires les uns des autres © A. Beugnard ENST Bretagne A. Beugnard 14 1999
  • 15. Les design patterns Les design patterns 29 Principes • Adapter ; rendre un objet conformant à un autre • Bridge ; pour lier une abstraction à une implantation • Composite ; basé sur des objets primitifs et composants • Decorator ; ajoute des services à un objet • Facade ; cache une structure complexe • Flyweight ; petits objets destinés à être partagés • Proxy ; un objet en masque un autre © A. Beugnard ENST Bretagne Les design patterns 30 Utilisation Adaptation conception On utilise l'Adapter lorsque on veut utiliser : • une classe existante dont l'interface ne convient pas • plusieurs sous-classes mais il est est coûteux de redéfinir l'interface de chaque sous-classe en les sous-classant. Un adapter peut adapter l'interface au niveau du parent. © A. Beugnard ENST Bretagne A. Beugnard 15 1999
  • 16. Les design patterns Les design patterns 31 Adapter Version héritage multiple Client Cible Adapté Request methodeSpec. Adapter Request methodSpec() © A. Beugnard ENST Bretagne Les design patterns 32 Adapter Version composition Client Cible Adapté Request methodeSpec. adapté Adapter Request adapté.methodSpec() © A. Beugnard ENST Bretagne A. Beugnard 16 1999
  • 17. Les design patterns Les design patterns 33 Utilisation Conception nouvelle On utilise Bridge lorsque : • on veut éviter un lien permanent entre l'abstraction et l'implantation (ex: l'implantation est choisie à l'exécution) • l'abstraction et l'implantation sont toutes les deux susceptibles d'être raffinées • les modifications subies par l'implantation ou l'abstraction ne doivent pas avoir d'impacts sur le client (pas de recompilation) © A. Beugnard ENST Bretagne Les design patterns 34 Bridge imp Client Abstraction Implementor Operation OperImpl1 imp.operImpl() RefinedAbstraction ConcreteImplA OperImpl1 © A. Beugnard ENST Bretagne A. Beugnard 17 1999
  • 18. Les design patterns Les design patterns 35 Utilisation On utilise Composite lorsque on veut : • représenter une hiérarchie d'objets • ignorer la différence entre un composant simple et un composant en contenant d'autres. (interface uniforme) © A. Beugnard ENST Bretagne Les design patterns 36 Composite Component Operation add Feuille Composite Operation add © A. Beugnard ENST Bretagne A. Beugnard 18 1999
  • 19. Les design patterns Les design patterns 37 Utilisation On utilise Decorator lorsque : • il faut ajouter des responsabilités dynamiquement et de manière transparente • il existe des responsabilités dont on peut se passer • des extensions sont indépendantes et qu'il serait impraticable d'implanter par sous-classage © A. Beugnard ENST Bretagne Les design patterns 38 Decorator Component Operation comp ConcreteComponent Decorator Operation comp.Operation() DecoratorB DecoratorA super.Operation() addedBehavior() Operation addedBehavior © A. Beugnard ENST Bretagne A. Beugnard 19 1999
  • 20. Les design patterns Les design patterns 39 Utilisation On utilise Facade lorsque on veut : • fournir une interface simple à un système complexe • introduire une interface pour découpler les relations entre deux systèmes complexes • construire le système en couche © A. Beugnard ENST Bretagne Les design patterns 40 Facade FACADE © A. Beugnard ENST Bretagne A. Beugnard 20 1999
  • 21. Les design patterns Les design patterns 41 Utilisation On utilise Flyweight lorsque : • on utilise beaucoup d'objets, et • les coûts de sauvegarde sont élevés, et • l'état des objets peut être externalisé (extrinsic), et • de nombreux groupes d'objets peuvent être remplacés par quelques objets partagés un fois que les états sont externalisés, et • l'application ne dépend pas de l'identité des objets © A. Beugnard ENST Bretagne Les design patterns 42 Flyweight FWFactory Flyweight get(key) Operation si FW(key) existe retourne FW sinon SharedFW UnsharedFW creer un new FW le retourne Operation Operation Client © A. Beugnard ENST Bretagne A. Beugnard 21 1999
  • 22. Les design patterns Les design patterns 43 Utilisation On utilise le Proxy lorsqu'on veut référencer un objet par un moyen plus complexe qu'un pointeur... • remote proxy : ambassadeur • protection proxy : contrôle d'accès • référence intelligente – persistence – comptage de référence –… © A. Beugnard ENST Bretagne Les design patterns 44 Proxy Client Subject Operation realSubject RealSubject Proxy Operation Operation realSubject.Operation © A. Beugnard ENST Bretagne A. Beugnard 22 1999
  • 23. Les design patterns Les design patterns 45 Behavioural Patterns Formes de comportement pour décrire : • des algorithmes • des comportements entre objets • des formes de communication entre objet © A. Beugnard ENST Bretagne Les design patterns 46 Principes • Chain of Responsibility • Command • Interpreter • Iterator • Mediator • Memento • Observer • State • Strategy • Template Method • Visitor © A. Beugnard ENST Bretagne A. Beugnard 23 1999
  • 24. Les design patterns Les design patterns 47 Utilisation On utilise Chain of Responsibility lorsque : • plus d'un objet peut traiter une requète, et il n'est pas connu a priori • l'ensemble des objets pouvant traiter une requète est construit dynamiquement © A. Beugnard ENST Bretagne Les design patterns 48 Chain of Responsibility successor Client Handler Operation Handler1 Handler2 Operation Operation © A. Beugnard ENST Bretagne A. Beugnard 24 1999
  • 25. Les design patterns Les design patterns 49 Utilisation On utilise Command lorsque : • spécifier, stocker et exécuter des actions à des moments différents. • on veut pouvoir "défaire". Les commandes exécutées peuvent être stockées ainsi que les états des objets affectés... • on veut implanter des transactions ; actions de "haut- niveau". © A. Beugnard ENST Bretagne Les design patterns 50 Command Invoker Command Execute Client Receiver. ConcreteCommand receiver Action Execute © A. Beugnard ENST Bretagne A. Beugnard 25 1999
  • 26. Les design patterns Les design patterns 51 Utilisation On utilise Interpreter lorsqu'il faut interpréter un langage et que : • la grammaire est simple • l'efficacité n'est pas un paramètre critique © A. Beugnard ENST Bretagne Les design patterns 52 Interpreter Client Expression Interpret Context TerminalExpres. NonTerminalExpr. Interpret Interpret © A. Beugnard ENST Bretagne A. Beugnard 26 1999
  • 27. Les design patterns Les design patterns 53 Utilisation On utilise Iterator lorsque : • pour accéder à un objet composé dont on ne veut pas exposer la structure interne • pour offrir plusieurs manières de parcourir une structure composée • pour offrir une interface uniforme pour parcourir différentes structures © A. Beugnard ENST Bretagne Les design patterns 54 Iterator Iterator Aggregate Client first createIterator next done current ConcreteAggregate ConcreteIterator © A. Beugnard ENST Bretagne A. Beugnard 27 1999
  • 28. Les design patterns Les design patterns 55 Utilisation On utilise Mediator lorsque : • quand de nombreux objets doivent communiquer ensemble • la réutilisation d'un objet est délicate car il référence et communique avec de nombreux autres objets © A. Beugnard ENST Bretagne Les design patterns 56 Mediator Mediator Colleague mediator ConcreteMediator ConcreteColleague1. ConcreteColleague2. © A. Beugnard ENST Bretagne A. Beugnard 28 1999
  • 29. Les design patterns Les design patterns 57 Utilisation On utilise Memento lorsque : • on veut sauvegarder tout ou partie de l'état d'un objet pour éventuellement pouvoir le restaurer, et • une interface directe pour obtenir l'état de l'objet briserait l'encapsulation © A. Beugnard ENST Bretagne Les design patterns 58 Memento Originator Memento Caretaker © A. Beugnard ENST Bretagne A. Beugnard 29 1999
  • 30. Les design patterns Les design patterns 59 Utilisation On utilise Observer lorsque : • Une abstraction a plusieurs aspects, dépendant l'un de l'autre. Encapsuler ces aspects indépendament permet de les réutiliser séparément. • Quand le changement d'un objet se répercute vers d'autres. • Quand un objet doit prévenir d'autres objets sans pour autant les connaitre. © A. Beugnard ENST Bretagne Les design patterns 60 Observer observers Subject Observer Attach Update Detach Notify forall observers o.update subject ConcreteSubject ConcreteObserver Update subject.action © A. Beugnard ENST Bretagne A. Beugnard 30 1999
  • 31. Les design patterns Les design patterns 61 Utilisation On utilise State lorsque : • Le comportement d'un objet dépend de son état, qui change à l'exécution • Les opérations sont constituées de partie conditionnelles de grande taille (case) © A. Beugnard ENST Bretagne Les design patterns 62 State Context state State Request Handle state.handle ConcreteStateA ConcreteStateB Handle Handle © A. Beugnard ENST Bretagne A. Beugnard 31 1999
  • 32. Les design patterns Les design patterns 63 Utilisation On utilise Strategy lorsque : • de nombreuses classes associées ne diffèrent que par leur comportement. Stratégie offre un moyen de configurer une classe avec un comportement parmi plusieurs. • on a besoin de plusieurs variantes d'algorithme. • un algorithme utilise des données que les clients ne doivent pas connaitre. © A. Beugnard ENST Bretagne Les design patterns 64 Strategy Context strategy Strategy Request interfaceAlgo ConcreteStrategyA ConcreteStrategyB interfaceAlgo interfaceAlgo © A. Beugnard ENST Bretagne A. Beugnard 32 1999
  • 33. Les design patterns Les design patterns 65 Utilisation On utilise TemplateMethod : • pour implanter une partie invariante d'un algorithme. • pour partager des comportements communs d'une hiérarchie de classes. • pour contrôler des extensions de sous-classe. © A. Beugnard ENST Bretagne Les design patterns 66 Template Method AbstractClass Template … operation1 operation1 operation2 … operation2 … ConcreteClass Template operation1 operation2 © A. Beugnard ENST Bretagne A. Beugnard 33 1999
  • 34. Les design patterns Les design patterns 67 Utilisation On utilise Visitor lorsque : • une structure d'objets contient de nombreuses classes avec des interfaces différentes et on veut appliquer des operations diverses sur ces objets. • les structures sont assez stables, et les opération sur leurs objets évolutives. © A. Beugnard ENST Bretagne Les design patterns 68 Visitor Vistor visitConcretElementA() Element accept(Visitor) ConcreteVisitorA ConcreteVisitorB visitConcretElementA() visitConcretElementA() ConcreteElementA ConcreteElementB v.visitConcretElementA(this) accept(Visitor v) accept(Visitor v) © A. Beugnard ENST Bretagne A. Beugnard 34 1999
  • 35. Les design patterns Les design patterns 69 Application des formes lors de la conception BIS • Trouver les bons objets • Bien choisir la granularité des objets • Spécifier les interfaces des objets • Spécifier l'implantation des objets • Mieux réutiliser – héritage vs composition – délégation • Compiled-Time vs Run-Time Structures • Concevoir pour l'évolution © A. Beugnard ENST Bretagne Les design patterns 70 Trouver les bons objets Les patterns proposent des abstractions qui n'apparaissent pas "naturellement" en observant le monde réel : • Composite : permet de traiter uniformément une structure d'objets hétérogènes • Strategy : permet d'implanter une famille d'algorithmes interchangeables • State Ils améliorent la flexibilité et la réutilisabilité © A. Beugnard ENST Bretagne A. Beugnard 35 1999
  • 36. Les design patterns Les design patterns 71 Bien choisir la granularité des objets La taille des objets peut varier considérablement ; comment choisir ce qui doit être décomposé ou au contraire regroupé ? • Facade • Flyweight • Abstract Factory • Builder © A. Beugnard ENST Bretagne Les design patterns 72 Spécifier les interfaces des objets Qu’est-ce qui fait partie d’un objet ou non ? • Memento ; mémorise les états, retour arrière • Decorator ; augmente l'interface • Proxy ; interface délégué • Visitor ; regroupe des interfaces • Facade ; cache une structure complexe d'objet © A. Beugnard ENST Bretagne A. Beugnard 36 1999
  • 37. Les design patterns Les design patterns 73 Spécifier l'implantation des objets Différence type-classe… • Chain of Responsibility ; même interface, mais implantations différentes • Composite ; les Components ont une même interface dont l'implantation est en partie partagée dans le Composite • Command, Observer, State, Strategy ne sont souvent que des interfaces abstraites • Prototype, Singleton, Factory, Builder sont des abstractions pour créer des objets qui permettent de penser en termes d'interfaces et de leur associer différentes implantations © A. Beugnard ENST Bretagne Les design patterns 74 Mieux réutiliser • héritage vs composition – white-box reuse ; rompt l'encapsulation - stricte ou non – black-box reuse ; flexible, dynamique "Préférez la composition à l'héritage" • délégation (redirection) – Une forme de composition...qui remplace l'héritage – Bridge découple l'interface de l'implantation – Mediator, Visitor, Proxy © A. Beugnard ENST Bretagne A. Beugnard 37 1999
  • 38. Les design patterns Les design patterns 75 Compiled-Time vs Run-Time Structures • Aggrégation composition, is-part-of dépendence, durée de vie liée, responsabilité plus stable ~ compiled-time, statique • Connaissance (accointance) lien, association relation fugitive, utilisation ponctuelle dynamique, run-time © A. Beugnard ENST Bretagne Les design patterns 76 Concevoir pour l'évolution (1) Quelques raisons de "reengineering" : • Création d'un objet en référençant sa classe explicitement...Lien à une implantation particulière...pour éviter utilisez AbstractFactory, FactoryMethod, Prototype • Dépendance d'une opération spécifique...pour rendre plus souple utilisez Chain Of Responsibility, Command • Dépendance d'une couche matérielle ou logicielle...AbstractFactory, Bridge © A. Beugnard ENST Bretagne A. Beugnard 38 1999
  • 39. Les design patterns Les design patterns 77 Concevoir pour l'évolution (2) Quelques raisons de "reengineering" : • Dépendance d'une implantation...pour rendre plus souple utilisez AbstractFactory, Bridge, Memento, Proxy • Dépendance d'un algorithme particulier...Builder, Iterator, Strategy, TemplateMethod, Strategy • Couplage fort...relâcher les relations utilisez AbstractFactory, Bridge, Chain Of Responsibility, Command, Facade, Mediator, Observer © A. Beugnard ENST Bretagne Les design patterns 78 Concevoir pour l'évolution (3) Quelques raisons de "reengineering" : • Etendre les fonctionnalités en sous-classant peut être couteux (tests, compréhension des superclasses, etc) utilisez aussi la délégation, la composition...Bridge, Chain Of Responsibility, Composite, Decorator, Observer, Strategy, Proxy • Impossibilité de modifier une classe...absence du source, trop de répercussions, voyez Adapter, Decorator, Visitor © A. Beugnard ENST Bretagne A. Beugnard 39 1999
  • 40. Les design patterns Les design patterns 79 Autres patterns Architecture : • Couche : systèmes en couches (OS, piles OSI) proche de Facade Algorithmique distribué : • Jeton circulant • Vague de calculs diffusant © A. Beugnard ENST Bretagne Les design patterns 80 Conclusion • Architecture de logiciel • Capitalisation d'expériences dans les Patterns • Une forme se mémorise bien, s'adapte nécessairement • Pas réservé aux objets • Comme la prose, on les utilise sans le savoir ! mais quand on en est conscient, on améliore sa réflexion. © A. Beugnard ENST Bretagne A. Beugnard 40 1999