2. 2
Plan
Introduction
Premier exemple
Principes et classification
Présentation des patrons de création les
plus significatifs
Conclusion
3. Problématique
Concevoir un logiciel en OO est difficile.
Concevoir un logiciel réutilisable en OO est plus difficile.
Difficile de trouver les objets et les rassembler selon le
bon niveau de granularité.
Difficile de définir les classes, les interfaces et les
relations d’héritage entre eux.
Difficile d’établir les relations entre les classes.
La conception doit être spécifique à un problème mais
suffisamment générale pour résoudre des future
problèmes.
3
4. 4
Motivations
Les besoins pour une bonne conception et
du bon code :
Extensibilité
Flexibilité
Maintenabilité
Réutilisabilité
Les qualités internes
Meilleure spécification, construction, documentation
5. 5
Motivations (suite)
Augmenter la cohésion du code
C’est d’augmenter le degré de corrélation des données entre elles.
Diminuer le couplage
Le couplage est le nombre de liens entre les données de classes
ou fonctions différentes.
On minimise le couplage en maximisant la cohésion, et en
créant des interfaces qui seront les points centraux
d’accès aux autres données.
6. 6
Design Pattern : principe
Description d’une solution à un problème général et
récurrent de conception dans un contexte particulier
Description des objets communicants et des classes
Indépendant d’une application ou spécifique
Certains patterns sont relatifs à la concurrence, à la
programmation distribuée, temps-réel
Traduction : patron de conception
Tous les patrons visent à renforcer la cohésion et à
diminuer le couplage
7. 7
Historique & définition
Gang of Four : Erich Gamma, Richard Helm,
Ralph Johnson, John Vlissides
Un Design Pattern nomme, abstrait et
identifie les aspects essentiels d’une
structuration récurrente, ce qui permet de
créer une modélisation orientée objet
réutilisable
8. 8
Design Patterns : bénéfices globaux
Standardisation de certains concepts en
modélisation
Capture de l’expérience de conception
Réutilisation de solutions élégantes et
efficaces vis-à-vis du problème
Amélioration de la documentation
Facilité de maintenance
9. Types de patrons de conception :
Les patrons sont regroupés en 3 catégories qui sont :
Patrons de création
Concernent le processus de la création d'objets
Les patrons de création aident à créer des objets pour
vous, au lieu d’avoir à instancier les objets directement.
Patrons de structure
Concernent la composition de classes et d'objets
Les patrons de structure aident à composer des groupes
d’objets en des structures plus larges, telles que des
interfaces utilisateur complexes.
9
10. Types de patrons de conception :
Patrons de comportement
Concernent l'interaction des classes et des objets
Les patrons de comportement aident à définir la
communication entre les objets du système et définir
comment le flux est contrôlé.
10
12. Constitution d’un design pattern
Un design pattern est défini par :
un contexte : une situation qui engendre le problème
un problème : le problème récurrent qui apparaît dans
ce contexte
une solution : une résolution validée du problème Un
design pattern extrait les aspects statiques et dynamiques
de la structure et de la coopération entre les participants
clés de la conception d’application
12
13. Patrons de création
Un patron de création permet de résoudre les
problèmes liés à la création et la configuration
d'objets.
Par exemple, une classe nommée Ressources,
Application gérant toutes les ressources de
l'application ne doit être instanciée qu'une seule
et unique fois. Il faut donc empêcher la création
intentionnelle ou accidentelle d'une autre instance
de la classe. Ce type de problème est résolu par
le patron de conception "Singleton".
13
14. 14
Singleton (création)
Intention
S’assurer qu’une classe a une seule instance, et fournir
un point d’accès global à celle-ci.
Motivation
Un seul spooler d’imprimante / plusieurs imprimantes
Plus puissant que la variable globale
Champs d’application
Lorsque l’instance unique doit être extensible par
héritage, et que les clients doivent pouvoir utiliser cette
instance étendue sans modifier leur code
16. 16
Singleton (3)
Collaborations
Les clients ne peuvent accéder à l’instance qu’à travers
la méthode spécifique
Conséquences
Accès contrôlé
Pas de variable globale
Permet la spécialisation des opérations et de la
représentation
Permet un nombre variable d’instances
Plus flexible que les méthodes de classe
17. 17
Singleton (4)
Implémentation
Assurer l’unicité
Sous-classes (demander quel forme de singleton dans
la méthode instance() )
Utilisations connues
DefaultToolkit en AWT/Java et beaucoup de
bibliothèques abstraite de GUI
Patrons associés
Fabrique abstraite (Abstract Factory),Monteur(Builder),
Prototype
19. 19
Fabrique (création) (1)
Intention
Définit une interface pour la création d’un objet, mais en
laissant à des sous-classes le choix des classes à
instancier
Permet à une classe de déléguer l’instanciation à des
sous-classes
Synonymes : Factory method / Virtual Constructor
Motivation
instancier des classes, en connaissant seulement les
classes abstraites
20. 20
Fabrique (2)
Champs d’application
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
22. 22
Fabrique (4)
Implémentation
2 variantes principales :
La classe Creator est une classe abstraite et ne fournit pas
d’implémentation pour la fabrication qu’elle déclare ( les sous-classes
définissent obligatoirement une implémentation)
La classe ConcreteCreator est une classe concrète qui fournit une
implémentation par défaut pour la fabrication
Fabrication paramétrée :
La fabrication utilise un paramètre qui identifie la variété d’objet à
créer
Utilisations connues
Applications graphiques, Des hiérarchies de classes parallèles
, toolkits ou les frameworks…
Patrons associés
Abstract Factory, Template Method, Prototype
23. Fabrique (5)
Autres avantages et variantes :
l'utilisation de méthodes de fabrication ne laisse aucune
ambiguïté : (noms descriptifs ).
L’Encapsulation.
23
29. 29
Fabrique abstraite (création) (1)
Intention
Fournir une interface pour créer des familles d’objets
dépendants ou associés sans connaître leur classe réelle
Synonymes : Kit, Fabrique abstraite, Usine abstraite
Motivation
Un éditeur qui va produire plusieurs représentations d’un
document
Champs d’application
Indépendance de comment les objets sont créés,
composés et représentés
Configuration d’un système par une instance d’une
multitude de familles de produits
30. 30
Fabrique abstraite (2)
Conception d’une famille d’objets pour être utilisés
ensemble et contrôle de cette contrainte
Bibliothèque fournie avec seulement leurs interfaces,
pas leurs implémentations
32. 32
Fabrique abstraite (4)
Implémentation
Les fabriques sont souvent des singletons
Ce sont les sous-classes concrètes qui font la création,
en utilisant le plus souvent une Fabrique
Si plusieurs familles sont possibles, la fabrique concrète
utilise Prototype
Patrons associés
Singleton, Factory Method, Prototype
37. Prototype création (1)
Intention
Indiquer le type des objets à créer en utilisant une
instance (le prototype). les nouveaux objets sont des
copies de ce prototype (clonage)
Motivation
ce patron permet de créer un nouvel objet par recopie
d'un objet existant
Champs d’application :
37
39. 39
Prototype (3)
Implémentation
il faut déclarer une classe abstraite spécifiant une
méthode abstraite (virtuelle pure en C++)
appelée clone()
Toute classe nécessitant un constructeur
polymorphique dérivera de cette classe abstraite et
implantera la méthode clone().
Patrons associés
Singleton, Factory Method
43. 43
Monteur (création) (1)
Intention
séparer la construction d'un objet complexe de sa
représentation.
le même processus de construction peut créer
différentes représentations.
Synonymes : builder
Motivation
la création d'une variété d'objets complexes à partir d'un
objet source.
45. 45
Monteur (3)
Implémentation
Plutôt que de créer un objet de A à Z c'est à dire en appelant un
constructeur, puis en configurant la valeur de ses attributs
Encapsulez la création et l'assemblage des pièces d'un objet
complexe dans un objet Builder distinct.
Une classe délègue la création d'objet à un objet Builder au lieu de
créer les objets directement.
Une classe (le même processus de construction) peut déléguer à
différents objets Builder pour créer différentes représentations
d'un objet complexe.
Patrons associés
Fabrique, Fabrique Abstraite, Patron de méthode
51. Conclusion
Si nous n'étudions pas les patrons de
conception au niveau de la programmation
OO, nous ne pourrons pas améliorer les
logiciel, et il sera plus difficile de les
concevoir et réaliser.
51
52. 52
Sources
Design Patterns – Elements of Reusable
Object-Oriented Software, Addison Wesley, 1994
http://www.dofactory.com