MyDigitalSchool
2021/2022
B3 - Développeur Web
Design Pattern
Mr Bonnet Denis
1
Design Pattern
Sommaire
Sommaire
I. Principes et Intérêt des Design Patterns
II. Les catégories de Pattern
III. La portée des patterns
IV. Le langage des patterns : UML
V. Les patterns du GoF
A. Histoire du GoF
B. Dissection d’un pattern : Singleton
C. Dissection d’un pattern : Iterator
VI. Les patterns du GRASP
Design Pattern - Bonnet Denis 2
Design Pattern
Principes
Principes et Intérêt des Design Patterns
Design Pattern - Bonnet Denis 3
Design Pattern
Généralité
Design Pattern
Généralités
● design pattern / motif conceptuel / patrons de conception / motif de conception
● ils désignent des cas récurrents et identifiés d’architecture et de conception de logiciels orientés objets
● Un Design Pattern décrit une situation fréquente et une réponse éprouvée à cette situation
● Le Design Pattern peut s'utiliser tel quel ou être adapté ou combiné avec d'autre pour répondre aux besoins
● les cas les plus généraux sont référencés dans un ouvrage considéré comme majeur : Design Patterns du GoF (Gang of Four -
GoF / Bande des Quatre)
Design Pattern - Bonnet Denis 4
Design Pattern
Généralité
Design Pattern - Bonnet Denis 5
Design Pattern
Catégories
Les catégories de Pattern
Design Pattern - Bonnet Denis 6
Design Pattern
Catégories
Catégories
les motifs conceptuels ont été classés en 3 catégories principales
● création/construction
○ ces motifs se préoccupent de régler des problèmes liés à la création ou l’instanciation des objets
● structure
○ ces motifs s’occupent des questions relatives au découplage des concepts et à l’organisation structurelle des concepts manipulés par un
logiciel.
● comportement
○ ces motifs ont pour sujet principal l’organisation de la collaboration des objets
Design Pattern - Bonnet Denis 7
Design Pattern
Portée
La portée des patterns
Design Pattern - Bonnet Denis 8
Design Pattern
Portée
Portée des patterns
On parle des Portée (Scope) pour savoir à quel niveau s’applique un Design Pattern ? Au niveau des classes ou des objets ?
● Les patrons au niveau des classes s’occupent des relations entre les classes et les sous-classes. Ces relations sont fixées statiquement à la
compilation.
○ Exemple: Les patrons de création au niveau des classes délèguent une partie de la création des objets aux sous-classes.
● Les patrons au niveau des objets s’occupent des relations entre les objets, lesquels sont plus dynamiques et peuvent être modifiées à l’exécution
○ Les patrons de création au niveau des objets délèguent la création à d’autres objets.
Design Pattern - Bonnet Denis 9
Design Pattern
Portée
Portée des patterns
Design Pattern - Bonnet Denis 10
Design Pattern
UML
Le langage des patterns : UML
Design Pattern - Bonnet Denis 11
Design Pattern
UML
UML
Le Langage de Modélisation Unifié, de l'anglais Unified Modeling Language (UML), est un langage de modélisation graphique à base de pictogrammes
conçu comme une méthode normalisée de visualisation dans les domaines du développement logiciel et en conception orientée objet.
Wikipedia
Pour décrire un Design Pattern, on utilise des diagramme de classe et/ou d’objet
Design Pattern - Bonnet Denis 12
Design Pattern
UML
Classe abstraite : Italique
Classe Lien héritage
Objet
Lien association bidirectionnelle
Lien dépendance
Lien agrégation Lien association unidirectionnelle
Lien composition
Design Pattern - Bonnet Denis 13
Design Pattern
UML
Visibilité des méthodes et attributs
Cardinalité
Design Pattern - Bonnet Denis 14
Design Pattern
GoF
Les patterns du GoF
Design Pattern - Bonnet Denis 15
Design Pattern
GoF : Histoire
Histoire du GoF
Design Pattern - Bonnet Denis 16
Design Pattern
GoF : Histoire
Formalisés dans le livre du « Gang of Four » (GoF, Erich Gamma, Richard
Helm, Ralph Johnson et John Vlissides ) intitulé Design Patterns –
Elements of Reusable Object-Oriented Software en 1994.
Les patrons de conception tirent leur origine des travaux de l'architecte
Christopher Alexander dans les années 70, dont son livre A Pattern
Language définit un ensemble de patrons d'architecture.
« Chaque patron décrit un problème qui se manifeste
constamment dans notre environnement, et donc décrit le cœur de la
solution à ce problème, d’une façon telle que l’on puisse réutiliser cette
solution des millions de fois, sans jamais le faire deux fois de la même
manière » — Christopher Alexander, 1977.
Design Pattern - Bonnet Denis 17
Design Pattern
Singleton
Dissection d’un pattern : Singleton
Design Pattern - Bonnet Denis 18
Design Pattern
Singleton
Singleton
Type : Création Portée : Objet
Objectif : Pour :
Limite le nombre d’instance de l’objet à 1 et Encapsule une ressource unique et la rend
contrôle l'accès à cet instance accessible à travers tout le système
Assure contrôle et un accès sérialisé à une
ressource partagé
Répond à quel problème?
Un objet seulement est requis pour
coordonner les actions dans un système.
Contre :
● Mal employé engendre des limitations non
nécessaires
● Utilisé à la place d’une variable globale
Quand l’utiliser? ● Problème de test unitaire
● Exactement une instance de classe est ● Peut créer des dependence cachés
requise. ● Certain client avec accès global peuvent le
● Il est nécessaire de contrôler l’accès à un modifier s’il n’est pas immuable
objet unique ● Considéré comme un ANTI-PATTERN
Design Pattern - Bonnet Denis 19
Design Pattern
Singleton
Exemple (java):
Design Pattern - Bonnet Denis 20
Design Pattern
Itérator
Dissection d’un pattern : Iterator
Design Pattern - Bonnet Denis 21
Design Pattern
Iterator
Iterator
Type : Comportement Portée : Objet
Objectif : Pour :
Permet l’accès aux éléments d’une collection ● Masque l’implémentation du parcours
sans permettre l’accès à la collection ● Découple les classes de collection et les
elle-même algorithmes de parcours
● Plus flexible que les itérateurs internes
Répond à quel problème?
Parcours de collections hétérogène ou faites
maison
Quand l’utiliser? Contre :
● L’itérateur peut ne pas savoir si un
● besoin d’accéder aux élément élément change pendant le parcours
● Peut être inutile ou néfaste si un itérateur
sans avoir besoin de la collection.
interne à la collection est déjà présent
● Besoin d’un accès multiple ou
concurrent aux éléments
● Besoin d’une interface unifié de
parcours de collection
Design Pattern - Bonnet Denis 22
Design Pattern
Iterator
Exemple (java):
Design Pattern - Bonnet Denis 23
Design Pattern
Iterator
Exemple (java):
Design Pattern - Bonnet Denis 24
Design Pattern
GRASP
Les patterns du GRASP
Design Pattern - Bonnet Denis 25
Design Pattern
GRASP
General Responsibility Assignment Software Patterns (ou Principles), abrégé en GRASP, se
composent de lignes directrices pour l'attribution de la responsabilité des classes et des objets en
conception orientée objet.
Les différents modèles et principes utilisés par les GRASP sont au nombre de 8. Tous ces modèles
répondent à certains problèmes récurrents du développement logiciel. Ils n'ont pas été conçus pour
créer une nouvelle façon de travailler, mais pour mieux documenter et normaliser l'existant à l'aide
de principes de programmation éprouvés en conception orientée objet.
GRASP est surtout une boîte à outils mentale, une aide à la conception de logiciels orientés objets.
Principes décrits en 1997 par Craig Larman (co-créateur de LeSS-méthode Agile/SCRUM) dans son
livre Applying UML and Patterns.
Design Pattern - Bonnet Denis 26
Design Pattern GRASP : Les principes
GRASP Information expert
Creator
Controller
Indirection
Low coupling
GRASP : Expert High cohesion
Polymorphism
Problème: Dans un système, quel classe doit gérer une responsabilité donnée? Protected variations
Solution: Assigner la responsabilité à la méthode qui a les information nécessaire pour la mener à Pure fabrication
bien
Design Pattern - Bonnet Denis 27
Design Pattern GRASP : Les principes
GRASP Information expert
Creator
Controller
Indirection
Low coupling
GRASP : Creator High cohesion
Polymorphism
Problème: Qui créer l’objet A? Protected variations
Solution: En règle générale, on donne la responsabilité de créer l’objet A à la classe B si un ou Pure fabrication
plusieurs cas se présentent:
● B contient ou agrège des instance de A
● B enregistre des instances de A
● B a un fort couplage avec A
● B contient les données d’initialisation de A
Design Pattern - Bonnet Denis 28
Design Pattern GRASP : Les principes
GRASP Information expert
Creator
Controller
Indirection
Low coupling
GRASP : Controller High cohesion
Polymorphism
Problème: Qui devrait gérer les évènements d’entré système? Protected variations
Solution: Une classe controller devrait gérer tout les event d’un ou plusieurs scénarios use case. Pure fabrication
Le controller est défini comme le premier objet derrière la couche UI pour recevoir et gérer les
events systèmes. Selon les principes GRASP, le controller ne gère pas forcément toutes les
interactions et représente alors une “couche” logicielle.
Design Pattern - Bonnet Denis 29
Design Pattern GRASP : Les principes
GRASP Information expert
Creator
Controller
Indirection
Low coupling
GRASP : Indirection High cohesion
Polymorphism
Problème: Où assigner une responsabilité pour éviter un couplage direct entre deux ou plusieurs Protected variations
entités? Pure fabrication
Solution: Assigner cette responsabilité à une entité tierce qui servira de médiateur.
Cette technique permet d’augmenter la réutilisabilité des classes impliqués.
Design Pattern - Bonnet Denis 30
Design Pattern GRASP : Les principes
GRASP Information expert
Creator
Controller
Indirection
Low coupling
GRASP : Low Coupling High cohesion
Polymorphism
Le couplage est une mesure de la force de connection entre 2 ou plusieurs éléments. Protected variations
Pure fabrication
Ce principe explique que plus un couplage est faible, plus on profite des bénéfices suivants:
● Faible dépendance entre les classes
● Le changement d’une classe impacte faiblement les classes couplées
● Un plus grand potentiel de réutilisabilité
Design Pattern - Bonnet Denis 31
Design Pattern GRASP : Les principes
GRASP Information expert
Creator
Controller
Indirection
Low coupling
GRASP : High Cohesion High cohesion
Polymorphism
High Cohesion est un pattern d’évaluation qui tente de garder les objets dans leur périmètre Protected variations
fonctionnel, gérables et compréhensibles. Pure fabrication
En pratique, ce principe explique qu’une classe doit rester concentré sur un sujet et ne pas se
disperser.
Design Pattern - Bonnet Denis 32
Design Pattern GRASP : Les principes
GRASP Information expert
Creator
Controller
Indirection
Low coupling
GRASP : Polymorphism High cohesion
Polymorphism
Problème: Comment gérer les alternatives basés sur un type d’objet. Protected variations
Solution: Quand des alternatives ou des comportement change en fonction de classe, il faut Pure fabrication
assigner la responsabilité à la classe qui varie.
Exemple :
● Donner le même nom de fonction à 2 méthodes alternative
● Utiliser les notions de polymorphisme de classe
Design Pattern - Bonnet Denis 33
Design Pattern GRASP : Les principes
GRASP Information expert
Creator
Controller
Indirection
Low coupling
GRASP : Protected Variation High cohesion
Polymorphism
Problème: Comment créer une entité pour que les variations de cette entité n’entre pas en collision Protected variations
avec d’autres éléments Pure fabrication
Solution: Identifier les points de variations et d’instabilités et assigner la responsabilité de créer une
interface stable autour d’eux.
En cas de variations, ce principe protège les éléments des variations d’autres éléments en les
encapsulant dans une interface et en utilisant le polymorphisme pour varier les implémentations de
cette interface.
Design Pattern - Bonnet Denis 34
Design Pattern GRASP : Les principes
GRASP Information expert
Creator
Controller
Indirection
Low coupling
GRASP : Pure fabrication High cohesion
Polymorphism
Une classe de pure Fabrication est une classe qui ne représente pas un concept métier. C’est une Protected variations
classe “technique” qui permet d’assurer un service au sein du système. Pure fabrication
Elle permet de mettre en oeuvre les autres principe/pattern.
Design Pattern - Bonnet Denis 35
Design Pattern
Fin du cours
Questions?
Commentaires?
Remarques?
Design Pattern - Bonnet Denis 36