Académique Documents
Professionnel Documents
Culture Documents
Cédric Lelong
Sommaire
6 URLOGRAPHIE ........................................................................................................................... 19
7 BIBLIOGRAPHIE ......................................................................................................................... 20
L’origine des design pattern se retrouve dans les travaux d’un architecte en batiment du nom
de Christopher Alexander, qui publie deux livre en 1970: A Pattern Language et A Timeless
Way of Building. Dans ces ouvrages, C. Alexander développe une nouvelle approche de
l’architecture, basée sur l’intuition qu’un ensemble de règles générales peuvent définir tout
aussi bien la structure d’une ville, d’une maison ou même d’une simple pièce. Etonnement,
ses théories auront finalement certainement plus d’impact dans le domaine de l’Informatique
que de l’architecture.
L’intérêt pour les design patterns en informatique reste très discret jusqu’en 1987, année où
il fait surface lors d’une des conférence annuelle « Object-Oriented Programming, Systems,
Languages & Applications » [OOPSLA]. Dès lors, beaucoup de publications traitent du sujet.
L’une d’elle, Design Patterns: Elements of Reusable Object-Oriented Software, parue en
1995, s’impose très rapidement comme l’un des ouvrages de référence traitant des design
patterns.
Ces deux définitions le font bien ressortir, les design patterns sont avant tout un outil,
d’expression d’une expérience de programmeur. Partant du postulat qu’un informaticien sera
amené dans son quotidien professionnel, à rencontrer de façon récurrente un certain nombre
de situations génériques, les design patterns permettent de nommer et étudier cette situation
pour tacher d’en retirer une expérience réutilisable. En se plaçant à un niveau d’abstraction
suffisant, il est en effet possible de définir une solution possible à un problème générique de
conception, dans un contexte donné. La question du « comment vais-je résoudre ce
problème » devient alors « comment vais résoudre ce problème cette fois ci ».
Un des ouvrage largement reconnu comme central dans le domaine des design patterns est
le livre “ Design Patterns: Elements of Reusable Object-Oriented Software ” coécrit par Erich
Gamma, Richard Helm, Ralph Johnson et John Vlissides, surnommés le Gang Of Four
[GOF]. Cet ouvrage définit une méthodologie de description de patterns et un « catalogue »
de 23 d’entre eux. Comme le précisent ses auteurs, ce livre « ne fait que documenter des
designs existants ». Mais l’objectif est en fait beaucoup plus ambitieux : « lancer un
mouvement de documentation de l’expertise des informaticiens ».
1. Les Creational Patterns : ces patterns ont pour but de permettre une abstraction du
processus d’instanciation d’un objet.
3. Les Behavioral Patterns : Ils traitent du comportement des objets lors de l’exécution
du programme.
Une « portée » [scope] est aussi attribuée à chaque pattern, précisant si le modèle
s’applique à l’architecture des classes ou à l’organisation des objets.
Champ d’application
Cette question si elle se réfère à la forme plus qu’au fond du sujet est pourtant bien centrale.
En effet, plus on rentre dans le sujet des design patterns plus il devient évident qu’au delà
d’un outil technique, les modèles de conceptions sont avant tout un outil de communication
au sein d’un projet.
Le GOF propose donc de donner à un pattern une définition comportant au moins ces 4
points :
Un objectif à atteindre : Il est la raison d’être du pattern. Il peut s’agir de la résolution d’un
problème d’algorithmique ou plus largement d’un problème architectural, voire d’une liste de
conditions conditionnant l’utilisation du pattern
Une Solution : La solution doit être aussi générique que possible. En effet, il est impensable
de définir une méthode de résolution à la fois très précise et pourtant applicable à un très
grand nombre de cas. Dans ce domaine, la solution sera souvent exprimée sous forme d’un
diagramme de classe UML, permettant ainsi un niveau d’abstraction naturel par rapport au
langage utilisable.
Des conséquences : Le choix d’utilisation d’un pattern n’est pas anodin. Il va entraîner la
résolution d’un problème de conception mais ne comportera pas seulement des avantages.
Ainsi, si l’utilisation d’un pattern se traduit en général par une meilleure évolutivité, et
réutilisabilité du développement, elle peut aussi induire une perte de performance du code
en temps ou espace mémoire.
Cette structure de présentation des design patterns a été largement adoptées dans la
littérature. Elle est toutefois parfois complétée par d’autres qualificatifs :
Nom Singleton
Objectif On souhaite s’assurer qu’une classe ne peut être instanciée qu’une seule
et unique fois (ou par extension, un nombre de fois contrôlé) et offrir un
point d’accès à cette instanciation.
Solution
import java.util.* ;
class Singleton{
private static Singleton instance;
private List maList;
private boolean etat;
private Singleton(){
maList= new ArrayList();
etat = true;
}
public static Singleton Instance(){
if (instance==null) //1
instance=new Singleton(); //2
return instance; //3
}
}
Thread 1 appelle Instance() et détermine que instance est null en ligne //1
Thread 1 entre dans le bloc if puis est préempté par le thread 2 avant l'exécution de la ligne //2
Thread 2 appelle Instance() et détermine que instance est null en ligne //1
Thread 2 entre dans le bloc if, crée un nouveau Singleton et assigne ce nouvel objet à la
variable instance en ligne //2
Thread 2 retourne la référence au Singleton en ligne 3
Thread 2 est préempté par le Thread 1
Thread 1 reprend où il s'était arrêté et exécute la ligne //2 créant alors une autre instance de
Singleton
Thread 1 retourne cette nouvelle instance en ligne //3
Le modèle MVC (Modèle Vue Contrôleur) est un modèle de conception d' interfaces très
répandu. Il a été créé dans les années 1980 pour Smalltalk-80. Il a été recommandé par Sun
pour la plate-forme de développement J2EE. Le modèle MVC représente un complément fort
utile aux outils du développeur, quel que soit le langage utilisé. Ce modèle d' architecture
impose la séparation entre les données, les traitements et la présentation, ce qui donne trois
parties fondamentales dans l' application finale : le modèle, la vue et le contrôleur.
Le modèle MVC peut être décrit sous la forme du modèle de conception suivant :
Solution
Schéma
extrait
de :
http://jav
a.sun.co
m/bluepr
ints/patte
rns/MVC
-
detailed.
html
Un autre design pattern souvent rencontré dans l’implémentation du modèle MVC est le
pattern composite.
Nom Composite
Objectif • Permettre à une classe de composer et d’utiliser de façon simple
(cohérente, unique) une hiérarchie complexe d’objets
Solution
Ils sont au premier abord un outil très puissant de conception. Ils apportent en effet une
partie de la matière première nécessaire à l’élaboration d’une architecture logicielle en
fournissant une base d’exemples éprouvés et récurrents, commentés dans leurs avantages
et inconvénients pour résoudre un problème de conception général. Mais ils sont surtout un
extraordinaire outils de communication projet : Ils permettent en effet de définir un langage
commun à une équipe, de nommer des concepts, de les discuter. Ils sont ainsi un outil
efficace de capitalisation et de transmission d’une expérience acquise sur un projet. Celle-ci
sera d’autant plus réutilisable qu’elle est découplée d’un quelconque langage.
Le concept de design pattern peut être utilisé à divers niveau : Il couvre certes des modèles
d’organisation de classes résolvant des problèmes précis. C’est par exemple le cas des
patterns du catalogue défini par le Gang Of Four. Mais certains utilisent aussi le terme de
design pattern pour décrire une architecture globale, le pattern MVC en est un exemple.
Enfin, les GRASP nous montrent qu’il est même possible d’utiliser le formalisme « pattern »
pour énoncer des principes généraux de programmation.
L’analyse des design patterns peut se révéler complexe pour un développeur débutant. Elle
nécessite en effet un haut niveau de compréhension des concepts de la programmation
orientée objet, et une maîtrise avancée d’UML. D’autre part, la représentation des design
patterns correspond à un tel niveau de synthétisation de la culture de la conception en
orienté objet, que l’ensemble des tenants et aboutissants d’un pattern ne sont jamais aisés à
appréhender.
Mais cette complexité correspond aussi à la puissance des patterns. Quelle force de pouvoir
détenir un outil à la fois pont entre divers activité du génie logiciel : la conception, la
conception détaillée, la modélisation, la programmation… et permettant d’acquérir des
repères résultants d’une culture collective de la programmation orientée objet !
Au final, cet exposé m’aura permis de réaliser une première approche du concept des design
patterns en orienté objet. Il appelle une réflexion plus exhaustive sur l’ensemble des patterns
non abordés ici, et également plus poussée sur l’application souhaitable ou non de chaque
pattern proposé.
Cet exposé est largement basé sur des ressources trouvées sur Internet. Voici une courte
liste des plus utilisées :
http://www-eleves-isia.cma.fr/documentation/DesignPatterns/
Version HTML du livre « Design Pattern » par Erich Gamma, Richard Helm, Ralph Johnson
et John Vlissides surnommé « Gang Of Four ».
Cette ouvrage est l’œuvre centrale dans le domaine des design patterns. Elle définit un
formalisme de description des patterns et propose un catalogue de 23 design patterns
récurrents.
http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/DEA2e
TOC.html
Pet store - Designing Enterprise Applications with the J2EETM Platform, Second Edition.
Une étude complète de la conception d’une application de ecommerce, le fameux PetStorte,
basée sur un modèle à 3 couches implémenté en java. Cette étude met en avant de
nombreux patterns.
http://www.dofactory.com/patterns/patterns.aspx
Une liste complète et synthétique des 23 patterns du GOF
http://wpetrus.developpez.com/uml/grasp/grasp.pdf
Introduction aux patterns GRASP par Pierre Chauvin
www.wikipedia.org
Un projet de construction collective d’une encyclopédie gratuite. Un bon point de départ pour
tout étude.
http://perso-info.enst-bretagne.fr/~beugnard/cours/DP.pdf
Cours sur les design patterns par A. Beugnard
http://www.math.utsa.edu/sphere/salingar/Chris.text.html
SOME NOTES ON CHRISTOPHER ALEXANDER par Dr. Nikos A. Salingaros.
La bibliographie de l’ancêtre “malgré lui” du concept des design patterns en informatique.
• Javarome.net http://javarome.free.fr
développeurs francophones
• Hillside.net - Your Patterns Library http://hillside.net/patterns/