SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
3012
 Mise en oeuvre des Design
Patterns sur une étude de cas

              Pascal Roques
       Consultant senior et formateur
Introduction


  Présentations
   Programme
Présentations
• Intervenant : Pascal Roques
   •   Consultant senior chez
   •   Responsable des formations autour de l’analyse
       et de la conception objet avec UML


   •   Auteur de 3 ouvrages sur UML parus chez Eyrolles :
 UML en action - 2e édition   UML par la pratique             UML - Modéliser un site
 De l'analyse des besoins     Cours et exercices Java et C#
 à la conception en Java
                                                              e-commerce
                              - 2ème édition
                                                              Les Cahiers du Programmeur
Notre programme
• 1. Introduction


• 2. Les Design Patterns


• 3. Analyse de l’étude de cas (Together®)


• 4. Application des Design Patterns (Together®)


• 5. Conclusion
Les Design Patterns


          Introduction aux DP
GoF : State, Singleton, Template Method
      De l’analyse à la conception
      Application à l’étude de cas
Introduction aux « patterns »
• Le succès d’une conception passe par l’attribution
 réussie des bonnes responsabilités aux bonnes
 classes

• Problème : les décisions qui vont conduire à des
 systèmes extensibles et maintenables ne sont pas
 forcément évidentes

• Solution : il y a des principes fondamentaux et
 éprouvés appelés « patterns » que tout concepteur
 expérimenté applique
Introduction aux « patterns »
• Les « patterns » sont :
   • Des paires nommées (problème + solution)
   • Des conseils issus de la pratique d’experts

  •   Une technique essentielle dans le monde de la
      conception orientée objet !
• Les concepteurs aguerris conçoivent par le
 biais d’un « langage de patterns »
  •   « Dans cette conception, j’ai associé les patterns
      State (État) et Singleton pour faciliter l’ajout de
      nouveaux états… Vaudrait-il mieux que j’utilise le
      Flyweight ? »
Ressources sur les patterns
• Exemples de patterns et de ressources :
   • Patterns GRASP
      •   Neuf patterns d’attribution des responsabilités fondamentales
      •   UML et les Design Patterns (Larman, 2001, CampusPress).
  •   Les patterns « Gang of Four » (GoF)
      •   23 patterns courants dans des situations spécifiques
      •   Le plus connu des ensembles de patterns orientés objets
      •   Design Patterns (Gamma, et. al. 1995, AW).
  •   Les patterns en Java
      •   50 patterns courants avec leur traduction en Java
      •   Patterns in Java (Grand, 2003, Wiley).
  •   …
Modèle de description (1/3)
      • Nom du pattern
             •    Le nom du pattern véhicule succinctement l’essence du pattern
             •    Il est essentiel de trouver un nom clair et facile à mémoriser !
      • Intention
             •    Formule brève répondant aux questions suivantes :
                    •   Que fait le design pattern ?
                    •   Quels en sont le raisonnement et l’intention ?
                    •   Quel problème spécifique de conception traite-t-il ?
      • Également appelé
             •    Autres noms connus du pattern, s’il en existe (alias)
      • Motivation
             •    Scénario illustrant un problème de conception ainsi que la façon
                  dont les structures de classes et d’objets du pattern résolvent le
                  problème

source : Design Patterns – Elements of Reusable Object-Oriented Software
Modèle de description (2/3)
      • Applicabilité
         • Quelles sont les situations dans lesquelles le design pattern peut
           être appliqué ? Quels sont les exemples de mauvaises conceptions
           que le pattern permet de traiter ?
      • Structure
         • Généralement, représentation graphique des classes du pattern
           créée à l’aide d’UML
      • Participants
         • Classes et/ou objets prenant part au design pattern avec leurs
           responsabilités respectives
      • Collaborations
         • Façon dont les participants collaborent afin d’assumer leurs
           responsabilités
      • Patterns connexes
         • Quels sont les design patterns liés de près à celui-ci ?
           Avec quels autres patterns celui-ci doit-il être utilisé ?

source : Design Patterns – Elements of Reusable Object-Oriented Software
Modèle de description (3/3)
      • Conséquences
             •    De quelle façon le pattern accomplit-il ses objectifs ?
             •    Quels sont les compromis et les résultats liés à l’utilisation du
                  pattern ?
      • Implémentation
             •    Quels sont les pièges, les conseils ou les techniques dont il faut
                  avoir connaissance lors de la mise en œuvre du pattern ?
             •    Y a-t-il des questions spécifiques au langage ?
      • Exemple de code
             •    Fragments de code illustrant la façon dont on pourrait mettre en
                  œuvre le pattern avec un langage orienté objets
      • Usages connus
             •    Exemples d’utilisation du pattern sur des systèmes réels


source : Design Patterns – Elements of Reusable Object-Oriented Software
Les Design Patterns GoF




source : Design Patterns – Elements of Reusable Object-Oriented Software
Le DP Singleton (1/2)
• Problème : comment garantir la présence d’une seule
 instance d’une classe et fournir un point d’accès
 global à cette instance ?
• Solution : sauvegarder l’objet singleton dans une
 variable statique et implémenter une méthode de
 classe retournant ce singleton
  •   Notez que cela fournit un accès global sans les défauts
      des variables globales
  •   Le constructeur est déclaré privé (ou mieux : protégé)
Le DP Singleton (2/2)
Le DP Template Method (1/2)
• Le pattern Template Method (TMP) est au cœur de la
 conception d’algorithmes génériques
• Problème : comment concevoir des algorithmes
 variables et non variables ?
• Solution : définissez le squelette d’un algorithme dans
 une méthode de super-classe, en confiant certaines
 étapes à des sous-classes
Le DP Template Method (2/2)
Le DP State (1/2)
 • Problème : le comportement d’un objet dépend de son
  état
      •   l’objet doit changer de comportement à l’exécution
      •   Il est nécessaire que la réponse d’une instance varie en
          fonction de son état
          public void m1(){
          public void m1(){        public void m2(){
                                   public void m2(){        public void m3(){
                                                            public void m3(){
            if < test 1 >
            if < test 1 >            if < test 1 >
                                     if < test 1 >            if < test 1 >
                                                              if < test 1 >
                       methodA()
                       methodA()                methodC()
                                                methodC()                methodE()
                                                                         methodE()
            else if < test 2 >
            else if < test 2 >       else if < test 2 >
                                     else if < test 2 >       else if < test 2 >
                                                              else if < test 2 >
                       methodB()
                       methodB()                methodD()
                                                methodD()                methodF()
                                                                         methodF()
          }
          }                        }
                                   }                        }
                                                            }

• Solution : délégation + polymorphisme
  •   Classe abstraite (ou interface) « Etat »
Le DP State (2/2)
Analyse de l’étude de cas


          Présentation
       Analyse des besoins
       Modèle du domaine
L’étude de cas (1/2)
• Le jeu du Démineur …
L’étude de cas (2/2)
• L’objectif de cette étude de cas est de concevoir un jeu de
 démineur comme celui qui est livré avec Windows©
  •   Nous souhaitons utiliser un processus itératif et incrémental
• La démarche classique de modélisation que nous allons
 appliquer est la suivante :
  •   Analyse des besoins
       •   Diagramme de cas d’utilisation
       •   Diagramme de séquence système
  •   Modèle du domaine
       •   Diagramme de classes
       •   Diagramme d’états
  •   Modèle de conception objet
       •   Diagramme de classes
       •   Diagrammes d’interactions
Analyse des besoins (1/2)
• Diagramme de cas d’utilisation

                    Paramétrer le jeu


                               <<extend>>
                               [Paramétrage]


                  Jouer au démineur
  Joueur           Extension points
                                               Itération 1 : avec paramétrage par défaut,
                    Paramétrage                et non prise en compte du marquage « ? »
                        Help


                               <<extend>>
                                [Help]


                Consulter l'aide en ligne
Analyse des besoins (2/2)
• Diagramme de séquence « système »

                                    Demineur

  Joueur

                initialiser()


            decouvrirCase(Point)

            marquerCase(Point)



                  etc.



           decouvrirCase(Point)
                 gagné !!

           entrerNomHighScores(n)
Modèle du domaine (1/2)
• Diagramme de classes du domaine
Modèle du domaine (2/2)
• Diagramme d’états : la classe Case
  •   Complexité itérative !




                        Itération 1

                                      Itération ultérieure…
Application des Design Patterns
       avec Together©


             Conception
              DP State
            DP Singleton
         DP Template Method
Architecture logique
• Le modèle du domaine va nous servir de base pour la
 couche « domaine » de notre architecture logique en
 conception objet
  •   Modèle simplifié en 3 couches
De l’analyse à la conception (1/3)
• Dans le diagramme de classes, nous allons
 maintenant indiquer :
  •   Les méthodes
  •   La navigabilité des associations
  •   Les dépendances entre classes
  •   Les types des attributs et des méthodes (retour,
      paramètres)


• Together permet d’ajouter facilement les
 constructeurs, accesseurs, etc.
De l’analyse à la conception (2/3)
• Le modèle du domaine fournit des classes candidates
 pour le diagramme de classes de conception
  •   Le concepteur peut être amené à fusionner certains
      concepts ou au contraire à introduire de nouvelles
      classes de conception




                                              État ??
De l’analyse à la conception (3/3)
• Diagramme de classes de conception
  •   premier jet pour l’itération 1
Classes de conception
• Ajout des types non-primitifs (optionnel)
Conception de la dynamique (1/3)
• Pour chaque « opération système » complexe, nous
 allons réaliser un diagramme d’interaction
 (collaboration ou séquence)

                                   Démineur
                                              • La complexité se
 Joueur

               initialiser()
                                               trouve dans les deux
                                               opérations :
           decouvrirCase(Point)

           marquerCase(Point)                   •   decouvrirCase(Point)
                 etc.
                                                •   marquerCase(Point)
          decouvrirCase(Point)
                gagné !!

          entrerNomHighScores(n)
Conception de la dynamique (2/3)
• Commençons par « marquerCase » :
  •   Le joueur clique sur un point du plateau, il faut déjà traiter
      l’événement graphique en trouvant la case concernée…

                                     1: marquerCase(Point)                     :Partie




                                1.1: marquerCase(Point)




                                                                        les:Case
               :Plateau       1.1.1: c:=get(Point)




                           1.1.2: marquer()



                                                          1.1.2.1: ??
                                              c:Case
Conception de la dynamique (3/3)
• Continuons « marquerCase » :
      •   Si elle est toujours couverte, une case peut être marquée en
          respectant les règles indiquées par le diagramme d’états
      •   Le traitement à effectuer dépend donc entièrement de l’état de la
          case pointée…




• Nous allons utiliser le Design pattern du State
  •       !Avantage : évolutivité facilitée (pour la prise en compte ultérieure
          du marquage « ? »)
Application du DP State (1/4)
• Diagramme de classes de conception « avant »
  •   Ajout des méthodes dans Plateau et Case
Application du DP State (2/4)
Application du DP State (3/4)
• Diagramme de classes de conception « après »« !
Application du DP State (4/4)
• Le code Java correspondant « après »« !
Suite de la dynamique (1/2)
• Continuons « marquerCase » :
  •   En fonction de son état, la case effectue des traitements différents

          marquer(c : Case)       :EtatDecouverte




       marquer(c : Case)                                             2: majCompteur(-1)   <<singleton>>
                              :EtatCouverteNonMarquee
                                                                                            :Partie


                                                 1: setEtatCourant(EtatDrapeau)




                                      c : Case



         marquer(c: Case)
                                                                      2: majCompteur(1)   <<singleton>>
                                      :EtatDrapeau
                                                                                            :Partie

                                                                 1:
                                             setEtatCourant(EtatCouverteNonMarquee)


                                        c : Case
Suite de la dynamique (1/2)
• Quelles sont les améliorations du modèle que l’étude
  de la dynamique nous inspire ?
• Les états doivent recevoir en paramètre la case elle-même pour
  pouvoir ensuite invoquer la méthode setEtatCourant()
   •   marquer()    marquer(c : Case)
   •   Idem pour decouvrir(c : Case)
• De nombreuses classes vont avoir besoin d’un accès à la
  classe Partie : tous les états, etc.
• Cette classe Partie doit avoir une seule instance à la fois !
   •   L’utilisation du DP Singleton est naturelle …
Suite de la dynamique (2/2)
• Appliquons le DP Singleton à la classe Partie
Application du DP Singleton
• Le modèle et le code Java correspondant « après »« !
Classes de conception
                        • Le modèle
                         complété
                         de
                         l’itération 1
                         pourrait
                         alors
                         ressembler
                         à:
Développement itératif
• Le DP State facilite l’introduction itérative d’un nouvel
 état de marquage de la case




                 Itération 1




                               Itération ultérieure…
Nouvelle application du State (1/2)
• Together permet facilement d’ajouter un nouvel état
 concret
  •   Grâce au paramètre “create pattern links” qui reconnaît
      les participants au DP
Nouvelle application du State (2/2)
• Diagramme de classes de conception « après »« !
Conclusion
Pas de « pattern-alisme » excessif !
• Une bonne conception n’implique pas d’utiliser tous
 les patterns de la terre !
  • Utilisez les bons patterns au bon endroit et justifiez votre solution !
  • Il est rare de réaliser une bonne conception dès la première
    tentative
      •   L’activité de refactoring aide à rectifier les erreurs
      •   Développez de façon itérative
• Évitez le syndrome du « silver bullet » !
  • Utilisation obsessionnelle d’un pattern ou d’une technologie
    auxquels vous êtes habitué
  • Méfiez-vous de ceux qui disent avoir un pattern préféré !
Utilisez Together !


  Together permet d’appliquer plus facilement
     des patterns sur vos modèles UML …
   Il permet également de se créer ses propres
                    patterns !
       Mais ceci est une autre histoire …
Questions?
Merci !


N’oubliez pas de remplir le formulaire d’évaluation

         Vous pouvez me contacter à …
           pascal.roques@valtech.fr
Design Patterns (2003)

Mais conteúdo relacionado

Mais procurados

CoursUML-SlimMesfar-Total
CoursUML-SlimMesfar-TotalCoursUML-SlimMesfar-Total
CoursUML-SlimMesfar-Total
Ahmed Mekkaoui
 

Mais procurados (20)

Cours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapterCours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapter
 
Patrons de conception
Patrons de conceptionPatrons de conception
Patrons de conception
 
Design patterns : résumé
Design patterns : résuméDesign patterns : résumé
Design patterns : résumé
 
Patrons de creation
Patrons de creationPatrons de creation
Patrons de creation
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
 
Cours de Génie Logiciel / ESIEA 2013-2014
Cours de Génie Logiciel / ESIEA 2013-2014 Cours de Génie Logiciel / ESIEA 2013-2014
Cours de Génie Logiciel / ESIEA 2013-2014
 
Igl cours 3 - introduction à uml
Igl   cours 3 - introduction à umlIgl   cours 3 - introduction à uml
Igl cours 3 - introduction à uml
 
Modélisation avec UML
Modélisation avec UMLModélisation avec UML
Modélisation avec UML
 
Cours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 compositeCours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 composite
 
Uml upxp2
Uml upxp2Uml upxp2
Uml upxp2
 
Uml
UmlUml
Uml
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1
 
Uml
UmlUml
Uml
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
CoursUML-SlimMesfar-Total
CoursUML-SlimMesfar-TotalCoursUML-SlimMesfar-Total
CoursUML-SlimMesfar-Total
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Cours spring
Cours springCours spring
Cours spring
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 

Destaque

Android Bonnees pratiques
Android Bonnees pratiques Android Bonnees pratiques
Android Bonnees pratiques
Patrick Bashizi
 
01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)
TECOS
 
01072013 e governance
01072013 e governance01072013 e governance
01072013 e governance
bharati k
 
Vbisigk
VbisigkVbisigk
Vbisigk
ISIG
 

Destaque (20)

Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
 
Sibtel&Swift
Sibtel&SwiftSibtel&Swift
Sibtel&Swift
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
 
Android Bonnees pratiques
Android Bonnees pratiques Android Bonnees pratiques
Android Bonnees pratiques
 
Design Pattern
Design PatternDesign Pattern
Design Pattern
 
Cours1
Cours1Cours1
Cours1
 
Design Pattern lecture 2
Design Pattern lecture 2Design Pattern lecture 2
Design Pattern lecture 2
 
Design pattern
Design patternDesign pattern
Design pattern
 
Swift, opportunités et perspectives du dernier langage d'Apple
Swift, opportunités et perspectives du dernier langage d'AppleSwift, opportunités et perspectives du dernier langage d'Apple
Swift, opportunités et perspectives du dernier langage d'Apple
 
Visitor Pattern
Visitor PatternVisitor Pattern
Visitor Pattern
 
01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)
 
01072013 e governance
01072013 e governance01072013 e governance
01072013 e governance
 
The OCLforUML Profile
The OCLforUML ProfileThe OCLforUML Profile
The OCLforUML Profile
 
Model Transformation: A survey of the state of the art
Model Transformation: A survey of the state of the artModel Transformation: A survey of the state of the art
Model Transformation: A survey of the state of the art
 
Vbisigk
VbisigkVbisigk
Vbisigk
 
Ressource numérique Circuit électrique au primaire
Ressource numérique Circuit électrique au primaire Ressource numérique Circuit électrique au primaire
Ressource numérique Circuit électrique au primaire
 
Model Transformation A Personal Perspective
Model Transformation A Personal PerspectiveModel Transformation A Personal Perspective
Model Transformation A Personal Perspective
 
Design Thinking Assignment
Design Thinking AssignmentDesign Thinking Assignment
Design Thinking Assignment
 
Be serious with sirius your journey from first experimentation to large deplo...
Be serious with sirius your journey from first experimentation to large deplo...Be serious with sirius your journey from first experimentation to large deplo...
Be serious with sirius your journey from first experimentation to large deplo...
 
What fUML can bring to MBSE?
What fUML can bring to MBSE?What fUML can bring to MBSE?
What fUML can bring to MBSE?
 

Semelhante a Design Patterns (2003)

U M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetU M L Analyse Et Conception Objet
U M L Analyse Et Conception Objet
Amine Chkr
 
Cours génie logiciel
Cours génie logicielCours génie logiciel
Cours génie logiciel
araddaoui
 
Unified Modeling Language Intro 2021-2022 VF
Unified Modeling Language Intro 2021-2022 VFUnified Modeling Language Intro 2021-2022 VF
Unified Modeling Language Intro 2021-2022 VF
cifaf13039
 

Semelhante a Design Patterns (2003) (20)

Thesis+of+nesrine+abdelkafi.ppt
Thesis+of+nesrine+abdelkafi.pptThesis+of+nesrine+abdelkafi.ppt
Thesis+of+nesrine+abdelkafi.ppt
 
Modelisation agile 03122011
Modelisation agile  03122011Modelisation agile  03122011
Modelisation agile 03122011
 
Manuel uml-poweramc
Manuel uml-poweramcManuel uml-poweramc
Manuel uml-poweramc
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
 
Uml partie 1
Uml partie 1Uml partie 1
Uml partie 1
 
UML Part1-Introduction Mansouri
UML Part1-Introduction MansouriUML Part1-Introduction Mansouri
UML Part1-Introduction Mansouri
 
Apprentissage du java
Apprentissage du javaApprentissage du java
Apprentissage du java
 
Uml
UmlUml
Uml
 
Methodo support
Methodo supportMethodo support
Methodo support
 
Uml
UmlUml
Uml
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
U M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetU M L Analyse Et Conception Objet
U M L Analyse Et Conception Objet
 
Cours génie logiciel
Cours génie logicielCours génie logiciel
Cours génie logiciel
 
Gp unified process
Gp unified processGp unified process
Gp unified process
 
Introduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMAIntroduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMA
 
Lmo02.ppt
Lmo02.pptLmo02.ppt
Lmo02.ppt
 
Unified Modeling Language Intro 2021-2022 VF
Unified Modeling Language Intro 2021-2022 VFUnified Modeling Language Intro 2021-2022 VF
Unified Modeling Language Intro 2021-2022 VF
 
040423+seminar+info+uqam.ppt
040423+seminar+info+uqam.ppt040423+seminar+info+uqam.ppt
040423+seminar+info+uqam.ppt
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
030225+seminar+gelo+diro.ppt
030225+seminar+gelo+diro.ppt030225+seminar+gelo+diro.ppt
030225+seminar+gelo+diro.ppt
 

Mais de Pascal Roques (10)

SysCon 2013 SysML & Requirements
SysCon 2013 SysML & RequirementsSysCon 2013 SysML & Requirements
SysCon 2013 SysML & Requirements
 
SysML adoption in France
SysML adoption in FranceSysML adoption in France
SysML adoption in France
 
Prfc rhapsody simulation_1.0
Prfc rhapsody simulation_1.0Prfc rhapsody simulation_1.0
Prfc rhapsody simulation_1.0
 
Uml2
Uml2Uml2
Uml2
 
Seminaire Borland UML (2003)
Seminaire Borland UML (2003)Seminaire Borland UML (2003)
Seminaire Borland UML (2003)
 
Modélisation métier (2004)
Modélisation métier (2004)Modélisation métier (2004)
Modélisation métier (2004)
 
SysML (Valtech Days 2008)
SysML (Valtech Days 2008)SysML (Valtech Days 2008)
SysML (Valtech Days 2008)
 
Migrer vers le cloud grace au Model-Driven
Migrer vers le cloud grace au Model-DrivenMigrer vers le cloud grace au Model-Driven
Migrer vers le cloud grace au Model-Driven
 
From SADT to SysML
From SADT to SysMLFrom SADT to SysML
From SADT to SysML
 
Xp Day2009 Modelisation Agile
Xp Day2009 Modelisation AgileXp Day2009 Modelisation Agile
Xp Day2009 Modelisation Agile
 

Design Patterns (2003)

  • 1. 3012 Mise en oeuvre des Design Patterns sur une étude de cas Pascal Roques Consultant senior et formateur
  • 3. Présentations • Intervenant : Pascal Roques • Consultant senior chez • Responsable des formations autour de l’analyse et de la conception objet avec UML • Auteur de 3 ouvrages sur UML parus chez Eyrolles : UML en action - 2e édition UML par la pratique UML - Modéliser un site De l'analyse des besoins Cours et exercices Java et C# à la conception en Java e-commerce - 2ème édition Les Cahiers du Programmeur
  • 4. Notre programme • 1. Introduction • 2. Les Design Patterns • 3. Analyse de l’étude de cas (Together®) • 4. Application des Design Patterns (Together®) • 5. Conclusion
  • 5. Les Design Patterns Introduction aux DP GoF : State, Singleton, Template Method De l’analyse à la conception Application à l’étude de cas
  • 6. Introduction aux « patterns » • Le succès d’une conception passe par l’attribution réussie des bonnes responsabilités aux bonnes classes • Problème : les décisions qui vont conduire à des systèmes extensibles et maintenables ne sont pas forcément évidentes • Solution : il y a des principes fondamentaux et éprouvés appelés « patterns » que tout concepteur expérimenté applique
  • 7. Introduction aux « patterns » • Les « patterns » sont : • Des paires nommées (problème + solution) • Des conseils issus de la pratique d’experts • Une technique essentielle dans le monde de la conception orientée objet ! • Les concepteurs aguerris conçoivent par le biais d’un « langage de patterns » • « Dans cette conception, j’ai associé les patterns State (État) et Singleton pour faciliter l’ajout de nouveaux états… Vaudrait-il mieux que j’utilise le Flyweight ? »
  • 8. Ressources sur les patterns • Exemples de patterns et de ressources : • Patterns GRASP • Neuf patterns d’attribution des responsabilités fondamentales • UML et les Design Patterns (Larman, 2001, CampusPress). • Les patterns « Gang of Four » (GoF) • 23 patterns courants dans des situations spécifiques • Le plus connu des ensembles de patterns orientés objets • Design Patterns (Gamma, et. al. 1995, AW). • Les patterns en Java • 50 patterns courants avec leur traduction en Java • Patterns in Java (Grand, 2003, Wiley). • …
  • 9. Modèle de description (1/3) • Nom du pattern • Le nom du pattern véhicule succinctement l’essence du pattern • Il est essentiel de trouver un nom clair et facile à mémoriser ! • Intention • Formule brève répondant aux questions suivantes : • Que fait le design pattern ? • Quels en sont le raisonnement et l’intention ? • Quel problème spécifique de conception traite-t-il ? • Également appelé • Autres noms connus du pattern, s’il en existe (alias) • Motivation • Scénario illustrant un problème de conception ainsi que la façon dont les structures de classes et d’objets du pattern résolvent le problème source : Design Patterns – Elements of Reusable Object-Oriented Software
  • 10. Modèle de description (2/3) • Applicabilité • Quelles sont les situations dans lesquelles le design pattern peut être appliqué ? Quels sont les exemples de mauvaises conceptions que le pattern permet de traiter ? • Structure • Généralement, représentation graphique des classes du pattern créée à l’aide d’UML • Participants • Classes et/ou objets prenant part au design pattern avec leurs responsabilités respectives • Collaborations • Façon dont les participants collaborent afin d’assumer leurs responsabilités • Patterns connexes • Quels sont les design patterns liés de près à celui-ci ? Avec quels autres patterns celui-ci doit-il être utilisé ? source : Design Patterns – Elements of Reusable Object-Oriented Software
  • 11. Modèle de description (3/3) • Conséquences • De quelle façon le pattern accomplit-il ses objectifs ? • Quels sont les compromis et les résultats liés à l’utilisation du pattern ? • Implémentation • Quels sont les pièges, les conseils ou les techniques dont il faut avoir connaissance lors de la mise en œuvre du pattern ? • Y a-t-il des questions spécifiques au langage ? • Exemple de code • Fragments de code illustrant la façon dont on pourrait mettre en œuvre le pattern avec un langage orienté objets • Usages connus • Exemples d’utilisation du pattern sur des systèmes réels source : Design Patterns – Elements of Reusable Object-Oriented Software
  • 12. Les Design Patterns GoF source : Design Patterns – Elements of Reusable Object-Oriented Software
  • 13. Le DP Singleton (1/2) • Problème : comment garantir la présence d’une seule instance d’une classe et fournir un point d’accès global à cette instance ? • Solution : sauvegarder l’objet singleton dans une variable statique et implémenter une méthode de classe retournant ce singleton • Notez que cela fournit un accès global sans les défauts des variables globales • Le constructeur est déclaré privé (ou mieux : protégé)
  • 15. Le DP Template Method (1/2) • Le pattern Template Method (TMP) est au cœur de la conception d’algorithmes génériques • Problème : comment concevoir des algorithmes variables et non variables ? • Solution : définissez le squelette d’un algorithme dans une méthode de super-classe, en confiant certaines étapes à des sous-classes
  • 16. Le DP Template Method (2/2)
  • 17. Le DP State (1/2) • Problème : le comportement d’un objet dépend de son état • l’objet doit changer de comportement à l’exécution • Il est nécessaire que la réponse d’une instance varie en fonction de son état public void m1(){ public void m1(){ public void m2(){ public void m2(){ public void m3(){ public void m3(){ if < test 1 > if < test 1 > if < test 1 > if < test 1 > if < test 1 > if < test 1 > methodA() methodA() methodC() methodC() methodE() methodE() else if < test 2 > else if < test 2 > else if < test 2 > else if < test 2 > else if < test 2 > else if < test 2 > methodB() methodB() methodD() methodD() methodF() methodF() } } } } } } • Solution : délégation + polymorphisme • Classe abstraite (ou interface) « Etat »
  • 18. Le DP State (2/2)
  • 19. Analyse de l’étude de cas Présentation Analyse des besoins Modèle du domaine
  • 20. L’étude de cas (1/2) • Le jeu du Démineur …
  • 21. L’étude de cas (2/2) • L’objectif de cette étude de cas est de concevoir un jeu de démineur comme celui qui est livré avec Windows© • Nous souhaitons utiliser un processus itératif et incrémental • La démarche classique de modélisation que nous allons appliquer est la suivante : • Analyse des besoins • Diagramme de cas d’utilisation • Diagramme de séquence système • Modèle du domaine • Diagramme de classes • Diagramme d’états • Modèle de conception objet • Diagramme de classes • Diagrammes d’interactions
  • 22. Analyse des besoins (1/2) • Diagramme de cas d’utilisation Paramétrer le jeu <<extend>> [Paramétrage] Jouer au démineur Joueur Extension points Itération 1 : avec paramétrage par défaut, Paramétrage et non prise en compte du marquage « ? » Help <<extend>> [Help] Consulter l'aide en ligne
  • 23. Analyse des besoins (2/2) • Diagramme de séquence « système » Demineur Joueur initialiser() decouvrirCase(Point) marquerCase(Point) etc. decouvrirCase(Point) gagné !! entrerNomHighScores(n)
  • 24. Modèle du domaine (1/2) • Diagramme de classes du domaine
  • 25. Modèle du domaine (2/2) • Diagramme d’états : la classe Case • Complexité itérative ! Itération 1 Itération ultérieure…
  • 26. Application des Design Patterns avec Together© Conception DP State DP Singleton DP Template Method
  • 27. Architecture logique • Le modèle du domaine va nous servir de base pour la couche « domaine » de notre architecture logique en conception objet • Modèle simplifié en 3 couches
  • 28. De l’analyse à la conception (1/3) • Dans le diagramme de classes, nous allons maintenant indiquer : • Les méthodes • La navigabilité des associations • Les dépendances entre classes • Les types des attributs et des méthodes (retour, paramètres) • Together permet d’ajouter facilement les constructeurs, accesseurs, etc.
  • 29. De l’analyse à la conception (2/3) • Le modèle du domaine fournit des classes candidates pour le diagramme de classes de conception • Le concepteur peut être amené à fusionner certains concepts ou au contraire à introduire de nouvelles classes de conception État ??
  • 30. De l’analyse à la conception (3/3) • Diagramme de classes de conception • premier jet pour l’itération 1
  • 31. Classes de conception • Ajout des types non-primitifs (optionnel)
  • 32. Conception de la dynamique (1/3) • Pour chaque « opération système » complexe, nous allons réaliser un diagramme d’interaction (collaboration ou séquence) Démineur • La complexité se Joueur initialiser() trouve dans les deux opérations : decouvrirCase(Point) marquerCase(Point) • decouvrirCase(Point) etc. • marquerCase(Point) decouvrirCase(Point) gagné !! entrerNomHighScores(n)
  • 33. Conception de la dynamique (2/3) • Commençons par « marquerCase » : • Le joueur clique sur un point du plateau, il faut déjà traiter l’événement graphique en trouvant la case concernée… 1: marquerCase(Point) :Partie 1.1: marquerCase(Point) les:Case :Plateau 1.1.1: c:=get(Point) 1.1.2: marquer() 1.1.2.1: ?? c:Case
  • 34. Conception de la dynamique (3/3) • Continuons « marquerCase » : • Si elle est toujours couverte, une case peut être marquée en respectant les règles indiquées par le diagramme d’états • Le traitement à effectuer dépend donc entièrement de l’état de la case pointée… • Nous allons utiliser le Design pattern du State • !Avantage : évolutivité facilitée (pour la prise en compte ultérieure du marquage « ? »)
  • 35. Application du DP State (1/4) • Diagramme de classes de conception « avant » • Ajout des méthodes dans Plateau et Case
  • 36. Application du DP State (2/4)
  • 37. Application du DP State (3/4) • Diagramme de classes de conception « après »« !
  • 38. Application du DP State (4/4) • Le code Java correspondant « après »« !
  • 39. Suite de la dynamique (1/2) • Continuons « marquerCase » : • En fonction de son état, la case effectue des traitements différents marquer(c : Case) :EtatDecouverte marquer(c : Case) 2: majCompteur(-1) <<singleton>> :EtatCouverteNonMarquee :Partie 1: setEtatCourant(EtatDrapeau) c : Case marquer(c: Case) 2: majCompteur(1) <<singleton>> :EtatDrapeau :Partie 1: setEtatCourant(EtatCouverteNonMarquee) c : Case
  • 40. Suite de la dynamique (1/2) • Quelles sont les améliorations du modèle que l’étude de la dynamique nous inspire ? • Les états doivent recevoir en paramètre la case elle-même pour pouvoir ensuite invoquer la méthode setEtatCourant() • marquer() marquer(c : Case) • Idem pour decouvrir(c : Case) • De nombreuses classes vont avoir besoin d’un accès à la classe Partie : tous les états, etc. • Cette classe Partie doit avoir une seule instance à la fois ! • L’utilisation du DP Singleton est naturelle …
  • 41. Suite de la dynamique (2/2) • Appliquons le DP Singleton à la classe Partie
  • 42. Application du DP Singleton • Le modèle et le code Java correspondant « après »« !
  • 43. Classes de conception • Le modèle complété de l’itération 1 pourrait alors ressembler à:
  • 44. Développement itératif • Le DP State facilite l’introduction itérative d’un nouvel état de marquage de la case Itération 1 Itération ultérieure…
  • 45. Nouvelle application du State (1/2) • Together permet facilement d’ajouter un nouvel état concret • Grâce au paramètre “create pattern links” qui reconnaît les participants au DP
  • 46. Nouvelle application du State (2/2) • Diagramme de classes de conception « après »« !
  • 48. Pas de « pattern-alisme » excessif ! • Une bonne conception n’implique pas d’utiliser tous les patterns de la terre ! • Utilisez les bons patterns au bon endroit et justifiez votre solution ! • Il est rare de réaliser une bonne conception dès la première tentative • L’activité de refactoring aide à rectifier les erreurs • Développez de façon itérative • Évitez le syndrome du « silver bullet » ! • Utilisation obsessionnelle d’un pattern ou d’une technologie auxquels vous êtes habitué • Méfiez-vous de ceux qui disent avoir un pattern préféré !
  • 49. Utilisez Together ! Together permet d’appliquer plus facilement des patterns sur vos modèles UML … Il permet également de se créer ses propres patterns ! Mais ceci est une autre histoire …
  • 51. Merci ! N’oubliez pas de remplir le formulaire d’évaluation Vous pouvez me contacter à … pascal.roques@valtech.fr