Chapitre 03
Les patrons de conception
(Design Patterns)
Introduction(1/2)
il est difficile de développer des logiciels efficaces, robustes,
extensibles et réutilisable
Ecrire des éléments modifiables est difficile, des éléments
réutilisable est encore plus difficile;
Une conception flexible et réutilisable est rarement obtenue du
premier jet;
Mais avec l'expérience on tend a produire de la bonne
conception;
2
Introduction(2/2)
Il est essentiel de comprendre et adapté les techniques
bien éprouvées, qui ont déjà montré leur capacité à
résoudre des problèmes de développement récurrents
: des patrons de conception ;
Un bon concepteur se doit de connaître un certain
nombre de patrons importants et de savoir quand les
utiliser.
3
Définition
Un patron de conception (design pattern) est une solution
éprouvée à un problème récurrent dans la conception orientée
objet de logiciels.
Les patrons sont décrits au niveau conception et sont donc
indépendants des langages de programmation utilisés.
Pour faire l'objet d'un Design Pattern, une solution doit être
réutilisable. On dit que le Design Pattern est « prouvé » s'il a
pu être utilisé dans au moins 3 cas
4
Historique(1/2)
A l'origine les Design Patterns (Patron de
conception, Motif de conception, Modèle de
conception en Français) sont issus des travaux de
l'architecte Christopher Alexander.
Ces travaux sont une capitalisation d'expérience qui
ont mis en évidence des patrons en architecture des
bâtiments.
5
Historique(2/2)
Sur le même principe, en 1995, le livre "Design Patterns
-- Elements of Reusable Object-Oriented Software" du
GoF, Gang Of Four (Erich Gamma, Richard Helm,
Ralph Johnson et John Vlissides), présente 23 Design
Patterns. (le catalogue de la bande des quatre).
Dans ce livre, chacun des Design Patterns est
accompagné d'exemple en C++ et Smalltalk.
6
Principes des patrons(1/2)
Renforcer la cohésion et diminuer le couplage;
Réutiliser et modifier sans changer l’existant;
Représenter par des diagrammes de classes UML avec les
relations : association, agrégation, composition, héritage et
Abstraction (classe abstraite et interfaces);
Privilégier l’encapsulation forte : description d'une solution
à un problème général et récurrent de conception dans un
contexte particulier;
7
Principes des patrons (2/2)
Favoriser des abstractions pour définir les interfaces
communes à un ensemble de classe plutôt des
implémentations concrètes (classes);
Favoriser la composition sur l’héritage pour :
-permettre le changement de comportement pendant
l’exécution,
-maintenir l’encapsulation des classes et se concentrer sur
une seule tâche,
-réduire les dépendances de l’implémentation.
8
Intérêts
Les patrons Aide au développement de logiciels par la
réutilisation de l’expérience collective des ingénieurs
expérimentés en informatique
Les patrons de conception permettent de diffuser largement
les meilleures solutions connues à différents problèmes
récurrents.
Les patrons Aide à promouvoir les bonnes pratiques de
conception, en capturant les expériences existantes et bien
validées en développement logiciel
Les patrons facilitent la communication entre les développeurs
et Aide à la gestion de la complexité du logiciel
9
Catégories de design patterns
On distingue trois familles de patrons de conception selon leur
utilisation :
de création : création d'objets sans passer par l'instantiation
directe d'une classe
structuraux : assemblage de classes et d'objets.
comportementaux : modélisation des interaction de classes et
d'objets et de la répartition des responsabilités
10
Les patrons de GOF(1/3)
Les Patrons de conception les plus répandus du GoF sont :
Création
Fabrique abstraite (Abstract Factory) : permet la création de familles
d'objets ayant un lien ou interdépendants
Monteur (Builder) : déplace la logique de construction d'un objet en dehors
de la classe à instancier, pour permettre une construction partielle ou pour
simplifier l'objet
Fabrique (Factory Method) : laisse autre développeur de définir l'interface
permettant de créer un objet, tout en gardant un contrôle sur le choix de la
classe à instancier.
Prototype (Prototype) : fournit de nouveaux objets par la copie d'un exemple
Singleton (Singleton) : garantit qu'une classe ne possède qu'une seule
instance, et fournit un point d'accès global à celle-ci
11
Les patrons de GOF(2/3)
Structure
Adaptateur (Adapter) : fournit l'interface qu'un client attend en utilisant les
services d'une classe dont l'interface est différente.
Pont (Bridge) : découple une classe qui s'appuie sur des opérations abstraites
de l'implémentation de ces opérations, permettant ainsi à la classe et à son
implémentation de varier indépendamment.
Objet composite (Composite) : permet aux clients de traiter de façon
uniforme des objets individuels et des compositions d'objets. Cela promeut un
couplage lâche, évitant aux objets d'avoir à se référer les uns les autres, et
permet de varier leur interaction indépendamment.
Décorateur (Decorator) : permet de composer dynamiquement le
comportement d'un objet
Façade (Facade) : fournit une interface simplifiant l'emploi d'un sous-système
12
Les patrons de GOF(3/3)
Comportement
Chaîne de responsabilité (Chain of responsibility) : évite de coupler
l'émetteur d'une requête à son récepteur en permettant à plus d'un objet d'y
répondre.
Commande (Command) : encapsule une requête dans un objet, de manière à
pouvoir paramétrer des clients au moyen de divers types de requêtes
Interpréteur (Interpreter) : permet de composer des objets exécutables
d'après un ensemble de règles de composition que vous définissez.
Itérateur (Iterator) : fournit un moyen d'accéder de façon séquentielle aux
éléments d'une collection.
Médiateur (Mediator) : définit un objet qui encapsule la façon dont un
ensemble d'objets interagissent I
Mémento (Memento) : permet le stockage et la restauration de l'état d'un
objet.
13
Portée des Design Patterns
Portée de Classe
Focalisation sur les relations entre classes et leurs sous-
classes
Réutilisation par héritage
Portée d’Instance (Objet)
Focalisation sur les relations entre les objets
Réutilisation par composition
14
Le catalogue GOF patterns
15
Conclusion(1/3)
A RETENIR
Un patron de conception est la meilleure solution connue pour un problème de
conception récurent
Les patrons sont indépendants des langages de programmation utilisés
Ils facilitent la conception
Ils représentent un catalogues de solution et une boite à outils pour tout
développeur et concepteur
Ils sont le fruit du savoir-faire d’experts dans des contextes éprouvés ils sont
fiables, robustes et connus
16
Conclusion(2/3)
A RETENIR
17
Conclusion(3/3)
A RETENIR
• ALGORITHME : recette de cuisine les étapes sont claires et on est
guidés par un objectifs précis
• Patron : on a un plan : on peut voir les fonctionnalités ,les résultats
obtenus mais la manière de les implémenter nous revient donc ça
dépend du contexte.
18