Vous êtes sur la page 1sur 12

INGESUP-Paris Design Patterns - 0

Introduction
Bertrand LIAUDET

SOMMAIRE
SOMMAIRE LES DESIGN PATTERNS Bibliographie Pr-requis Outils pour le cours et les TP Les paradigmes de programmation de Stroustrup (crateur du C++) Paradigme 0 : pdg. du dbutant : Tout dans le main Paradigme 1 : pdg. de la programmation procdurale Paradigme 2 : pdg. de la programmation modulaire : masquer linformation Paradigme 3 : pdg. de labstraction des donnes : type structurs = classe Paradigme 4 : pdg. de lhritage Paradigme 5 : pdg. de la gnricit (type variable) Paradigme final : pdg. de la productivit : factoriser encore plus le code Principes de POO (daprs Morelle et Design pattern tte la premire) Principes de base de la programmation structure Principes de base de la POO Principes avancs de la POO Gnralits sur la notion de pattern Prsentation Familles de pattern Les design patterns
Premire dition : mai 2011 mise jour juin 2012

1 2 2 2 2 3 3 3 3 3 4 4 4 5 5 5 5 7 7 8 8

INGESUP-Paris Design Patterns en JAVA Introduction - page 1/12 - Bertrand LIAUDET

LES DESIGN PATTERNS


Bibliographie Design Patterns: Elements of Reusable Object-Oriented Software - Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. 1994. Cest louvrage de rference. En anglais uniquement. http://www.amazon.fr/Design-Patterns-Elements-Reusable-ObjectOriented/dp/0201633612/ref=pd_rhf_cr_p_img_1#reader_0201633612 Design pattern tte la premire. 2004 O-Reilly Media. 2009-Digit Books version franaise. http://www.digitbooks.fr/catalogue/9782815000031.html A consommer sans modration ! Design patterns pour Java Debrauwer ENI - 2009 http://www.editions-eni.fr/_Download/9125aeb1-b29c-4632-b9c3-5a10e8be5997/DesignPatterns-pour_%28Extrait-du-livre%29.pdf Dvelopper.com : Design pattern du GoF appliqus Java http://rpouiller.developpez.com/tutoriel/java/design-patterns-gang-of-four/?page=page_2 Design pattern 14 pattern de conception dtaills. ENI. 2011. Modlisation objet avec UML Muller et Gaertner p.77 et suivantes.

Pr-requis Programmation objet : hritage, polymorphisme, classe abstraite, interface. UML : diagramme de classes : hritage, implmentation, dpendance, classe abstraite, interface

Pr-requis avanc Interface et gnricit en Java. Exemple avec les classes Comparable et Comparator.

Outils pour le cours et les TP SDK Java Power-AMC

INGESUP-Paris Design Patterns en JAVA Introduction - page 2/12 - Bertrand LIAUDET

Les paradigmes de programmation de Stroustrup (crateur du C++) Paradigme 0 : pdg. du dbutant : Tout dans le main Codez tout dans le programme principal. Fates des tests jusqu ce que a marche ! Ce paradigme est celui du dbutant. Cest ce quon fait quand on commence la programmation. Paradigme 1 : pdg. de la programmation procdurale Choisissez les procdures (=fonctions). Utiliser les meilleurs algorithmes que vous pourrez trouver. Le problme est celui du bon dcoupage du main en procdures. Il faut dfinir les entres et les sorties pour chaque procdure. Un principe gnral est de distinguer entre linterface utilisateur (la saisie et laffichage) et le calcul. Paradigme 2 : pdg. de la programmation modulaire : masquer linformation Choisissez vos modules (fichiers avec des fonctions). Dcoupez le programme de telle sorte que les donnes soient masques par les modules Le paradigme de la programmation modulaire est un aboutissement de la programmation procdurale. Il consiste regrouper les fonctions dans des fichiers et organiser ces fichiers en modules (un module est un ensemble de fichiers) qui permettent de masquer les donnes du programme. Techniquement, il conduit lutilisation de variables globales, de static, dextern, de compilation conditionnelle, despace des noms, dorganisation du type : outils.c, outils.h (interface), utilisation.c. Ce paradigme est rendue obsolte par lusage de la programmation objet. Paradigme 3 : pdg. de labstraction des donnes : type structurs = classe Choisissez les types dont vous avez besoin. Fournissez un ensemble complet doprations pour chaque type. Une classe est un type, en gnral structur, auquel on ajoute des procdures. Fabriquer un type structur consiste regrouper des types (simples ou dj structurs) dans un mme type structur : cest dj un mcanisme dabstraction.

INGESUP-Paris Design Patterns en JAVA Introduction - page 3/12 - Bertrand LIAUDET

Une classe en tant que type qui peut donner lieu la fabrication dune variable (dun objet) est un type est tout fait concret (et non pas abstrait : il est aussi rel que int et float. Principe dencapsulation Le principe dencapsulation est le principe de fonctionnement du paradigme dabstraction. Y sont associes les notions de : visibilit des attributs et des mthodes, constructeur, destructeur, surcharge. Paradigme 4 : pdg. de lhritage Choisissez vos classes. Fournissez un ensemble complet doprations pour chaque classe. Rendez toute similitude explicite laide de lhritage. Principe de substitution Le principe de substitution est le principe de fonctionnement de lhritage. Y sont associes les notions de : polymorphisme, redfinition, interface, implmentation, classe et mthode abstraites. Paradigme 5 : pdg. de la gnricit (type variable) Choisissez vos algorithmes. Paramtrez-les de faon quils soient en mesure de fonctionner avec une varit de types et de structures de donnes appropries. La gnricit au sens stricte consiste ce que le type des paramtres des algorithmes devienne un paramtre lui aussi. Elle sappuie souvent sur lutilisation dinterfaces. Paradigme final : pdg. de la productivit : factoriser encore plus le code Les interfaces : elles permettent dlargir la possibilit de coder de la gnricit stricte et sont largement utilises dans les design patterns. Une interface est un type abstrait (tandis que la classe est un type concret). Ce type abstrait est utilis de faon gnrique dans le code. Seule linstanciation concrte diffrencie ensuite les comportements. Les design patterns : ce sont des solutions classiques des petits problmes de codage. Ils sappuient souvent sur les interfaces. Les patterns darchitecture : ce sont des solutions classiques darchitecture. Le MVC est un pattern darchitecture. Les bibliothques : elles offrent des mthodes permettant dviter de les rcrire et organisant mme la faon de rflchir la solution des problmes rsoudre. Lees framework : ce sont des architecture semi-finies quon peut va ensuite paramtrer et complter en fonction des spcificits du produit raliser.

INGESUP-Paris Design Patterns en JAVA Introduction - page 4/12 - Bertrand LIAUDET

Principes de POO (daprs Morelle et Design pattern tte la premire) Principes de base de la programmation structure Evitez la duplication du code Tout ce qui se rpte doit tre factoris ! Recherchez une cohsion forte Une fonction, une mthode, une classe, une bibliothque, un package doivent avoir une unit logique forte. La cohsion est forte quand chaque fonctions, mthodes, classe, bibliothque, package a des responsabilits bien dfinis. Dcouplez entres, traitements et sorties Il faut sparez la saisie, le calcul et laffichage. Limitez la taille et la complexit Une fonction, une mthode ne doit pas tre trop longue. Une mthode est trop longue ds quelle fait plus quune tche logique. Une classe ne doit pas non plus tre trop complexe : une classe est trop complexe ds quelle ne correspond plus une entit logique. Cherchez faciliter les changements localiss, cest--dire lvolution du code La localisation du changement est un des buts recherche dans toute programmation. Elle sera le produit dun couplage faible et dune forte cohsion. Principes de base de la POO Encapsulation Le principe dencapsulation concerne la visibilit : il sagit de choisir bon escient quelles seront les mthodes qui seront publiques. Substitution Le principe de substitution met en uvre les notions dhritage, de redfinition, de polymorphisme, dabstraction Principes avancs de la POO Encapsulez ce qui varie, que ce soit des attributs ou des mthodes En gnral, on encapsule les attributs. Il faut aussi penser encapsuler les mthodes si celles-ci varient en se regroupant en famille.

INGESUP-Paris Design Patterns en JAVA Introduction - page 5/12 - Bertrand LIAUDET

Il faut se poser la question suivante : le changement est-il bien encapsul ou entrainera-t-il de nombreuses modifications dans le code ? Prfrez la composition lhritage Utiliser lhritage bon escient Lhritage est une relation est_un , pas une relation a_un . Dans une hirarchie dhritage, les objets doivent avoir une relation est_un avec leur classe de base, afin que lhritage de tous les attributs, proprits et mthodes de la classe de base garde sens (mme si la sous-classe en spcialise ou les complte). Les objets ne relevant pas strictement dune relation est_un doivent se traduire par des classes ou interfaces sans relation dhritage entre elles. Particulirement une relation a_un_comportement_de ne doit pas tre considre comme un hritage. Couplez faiblement, autant que possible, les objets qui interagissent Une classe dpend dune autre classe quand elle y fait rfrence. Le couplage entre 2 classes est lensemble des rfrences entre les 2 classes. Il faut limiter le couplage au maximum en le factorisant le plus possible les rfrences. Le couplage est faible quand il est limit au maximum une dpendance avec une interface. Couplez faiblement, cest donc couplez au maximum avec des interfaces. Linstanciation concrte oblige toutefois le plus souvent dpendre aussi dune classe concrte. Dpendez des abstractions. Ne dpendez pas des clases concrtes. Programmez des interfaces et non des implmentations Autrement dit, adoptez une conception dirige par les responsabilits. Lattribution des bonnes responsabilits aux bonnes classes est lun des problmes les plus dlicats de la conception oriente objet. La programmation dirige par les responsabilits est un processus de conception de classes par attribution de responsabilits bien dfinies chaque classe. Une conception dirige par les responsabilits contribue rduire le couplage.

INGESUP-Paris Design Patterns en JAVA Introduction - page 6/12 - Bertrand LIAUDET

Gnralits sur la notion de pattern Prsentation Gnralits La notion de pattern vient ds quon est amen rpter plusieurs fois le mme genre de tche, par exemple le mme genre de dveloppement logiciel avec le mme genre de problme rsoudre. Les patterns synthtisent llaboration itrative de solutions prouves qui ont volues au cours du temps pour fournir des structures toujours plus flexibles et facilement rutilisables. Ce sont des solutions qui dcrivent et rsolvent un problme gnral et qui est adaptable un contexte particulier. Pattern et framework Un pattern est une micro-architecture finie son niveau (on parle aussi de patron au sens du patron dune couturire). Un framework est une architecture semi-finie. Classes Pattern Framwork Granularit croissante

Pattern et langage de programmation Un pattern est indpendant des solutions techniques terminales, donc des langages de programmation : dans une terminologie Merise, il est de niveau conceptuel ou logique tandis que son adaptation un contexte particulier serait de niveau physique. Toutefois, certains patterns concernent directement limplmentation dans un langage particulier. Intrt des patterns Lindpendance des patterns vis--vis des langages de programmation leur confre une grande gnricit mais en contrepartie un effort dapprentissage est requis pour pouvoir les mettre en uvre. Ils permettant lusage dun vocabulaire commun (le nom des patterns) pour dcrire des problmes classiques plus ou moins complexe. Lintrt des patterns rside dans le fait dapporter une solution pour un problme particulier. Ils facilitent lanalyse et acclre la ralisation et aussi la maintenance.

INGESUP-Paris Design Patterns en JAVA Introduction - page 7/12 - Bertrand LIAUDET

Familles de pattern

Langage de pattens * 1

Pattens

Pattern d'implmentation

Patterns Informatiques

Pattern d'architecture

Pattern d'anlyse = Pattern mtier

Pattern de conception = Design Patterns

Pattern organisationnel

Les design patterns ou patterns de conception sont les plus rpandus des patterns. Les patterns dimplmentation fournissent des solutions typiques pour un petit problme dans un langage donn. Les patterns darchitecture fournissent des solutions architecturales en terme dorganisation du code, que ce soit au niveau des sous-systmes, des packages, des fichiers, etc. Larchitecture MVC (modle-vue-contrleur) est un pattern darchitecture. Les patterns danalyse ou pattern mtier fournissent des solutions correspondant un domaine dapplication particulier ( un mtier particulier). On peut trouver des pattern mtier dans la modlisation des bases de donnes. Les patterns organisationnels fournissent des solutions des problmes dorganisation des activits du dveloppement logiciel.

Les design patterns Prsentation Les design patterns ou patterns de conception sont les patterns les plus utiliss. Les design patterns sont des petits diagrammes de classes (micro-architectures) fournissant des solutions des problmes rpertoris. En tant que solutions gnriques certain problmes, ils sappuient souvent sur le polymorphisme et donc sur lhritage, les classes abstraites et les interfaces. Les design patterns ont t introduits en 1995 dans le livre dit GoF pour Gang of Four : Gamma, Helm, Johnson et Vlissides. Le GoF est louvrage de rfrence des design patterns.

INGESUP-Paris Design Patterns en JAVA Introduction - page 8/12 - Bertrand LIAUDET

Classification Le GoF prsente 23 design patternq organiss en 3 classes : Les 5 patterns de construction traitent de la cration des objets. Les 7 patterns de structuration traitent de la hirarchie des classes et de leurs relations. Les 11 patterns de comportement organisent la rpartition des traitements entre les objets.

Vocabulaire Un design pattern est un micro-diagramme des classes. Ce diagramme a vocation tre utilis par une ou plusieurs autres classes. Quand on teste un design pattern, la classe qui le teste et qui contiendra le main est souvent appele client ou utilisateur . Classification empirique Lusage montre que certains patterns sont plus utiliss que dautres. DP-TLP dfinit les 14 patterns les plus populaires. On peut y ajouter le pattern compos ou pattern de patterns ou pattern darchitecture MVC.

Les 14 + 1 patterns les plus populaires Stratgie Observer Decorateur Mthode de fabrique Fabrique abstraite Singleton Commande Etat Adapteur Faade Patron de mthode Composite Itrateur

Les 9 design patterns restants Chaine de responsabilits Interprte Mdiateur Mmento Monteur Poids-mouche Pont Prototype Visiteur

Proxy +1 : MVC

INGESUP-Paris Design Patterns en JAVA Introduction - page 9/12 - Bertrand LIAUDET

Les 14 + 1 patterns les plus populaires dtaills avec niveau de difficult (***)

Type

Nom

Description (ou objectif ou dfinition) dite de plusieurs manires


Encapsule des comportements dune mme famille (des mthodes plutt que des attributs) et utilise la dlgation pour savoir lequel utiliser. Sette des mthodes travers une interface. Adapter le comportement dun objet en fonction dun besoin sans changer les interactions, et donc indpendamment du client. Dfinir une famille d'algorithmes interchangeables et permettre de les changer indpendamment de la partie cliente. Stratgie et Etat sont des patterns jumeaux.

1 Comportement Stratgie ***

2 Comportement Observer ***

Dfinit une relation entre objets de type un-plusieurs, de faon que lorsque un objet change dtat, tous ceux qui en dpendent en soient notifis et soient mis jour automatiquement. Met vos objets au courant quand il se passe quelque chose qui pourrait les concerner Permet de notifier des changements dtat des objets. Construit une dpendance entre un sujet et des observateurs de sorte que chaque modification du sujet soit notifie aux observateurs afin quils puissent mettre jour leur tat.

3 **

Structuration

Decorateur

Donne de nouvelles responsabilits aux objets sans modifier les classes sous-jacentes. Attache dynamiquement des responsabilits supplmentaires un objet. Il fournit une alternative souple la drivation, pour tendre les fonctionnalits.

4 * 5 * 6 *

Structuration Structuration

Adapteur Faade

Adapteur et Faade sont des patterns jumeaux. Adapteur et Faade sont des patterns jumeaux. Template Method permet de dfinir une mthode en dlguant une partie de lalgorithme dans des classes drives. La mthode est donc un patron concrtis grce aux classes drives. Mthode de fabrique et fabrique abstraite sont des patterns complmentaires.

Comportement Patron de Mthode Mthode de fabrique

7 Construction ***

INGESUP-Paris Design Patterns en JAVA Introduction - page 10/12 - Bertrand LIAUDET

Le pattern Factory Method (pattern de fabrication ou mthode de fabrique ou patron de mthode de fabrique) a pour objectif de dfinir une classe de fabrique dun produit avec une mthode de cration abstraite du produit, la mthode abstraite tant concrtise dans des classes de fabrication spcifiques. Les patterns Template Method et Factory Method sont des patterns jumeaux. 8 Construction *** Fabrique abstraite Mthode de fabrique et fabrique abstraite sont des patterns complmentaires. Fournit une interface proposant des mthodes de cration de produits regroups en familles. La diffrence avec le pattern Mthode de fabrique est que la fabrique abstraite gre plusieurs familles de produits et quon gre une interface plutt quune classe abstraite 9 * Construction Singleton Le pattern singleton permet de sassurer quune classe ne possde quune seule instance. Encapsule une requte comme un attribut permettant ainsi de faire fonctionner nimporte quel objet tout en en tant dcoupl. Le pattern Commande et une fusion du pattern Stratgie ( Sette des mthodes travers une interface) et du pattern Adapteur (ajouter une nouvelle classe ou un nouveau composant un modle en faisant en sorte que linterface du modle ne change pas et donc que le client puisse continuer fonctionner identiquement). 11 ** 12 ** 13 ** 14 ** Comportement Etat Structuration Composite Stratgie et Etat sont des patterns jumeaux. Itrateur et Composite sont des patterns jumeaux. Itrateur et Composite sont des patterns jumeaux.

10 Comportement Commande ***

Comportement Itrateur Structuration Proxy MVC

+1 Pattern de *** patterns

Obervateur (modle), Stratgie (vue et contrleur), Composite (vue).

INGESUP-Paris Design Patterns en JAVA Introduction - page 11/12 - Bertrand LIAUDET

Les 14 patterns les plus populaires regroups en famille Stratgie Etat Observer Decorateur Composite Itrator Mthode de fabrique Fabrique abstraite Singleton Adapteur Faade Patron de Mthode Proxy Commande Comportement Comportement Comportement Structuration Structuration Comportement Construction Construction Construction Structuration Structuration Comportement Structuration Comportement

INGESUP-Paris Design Patterns en JAVA Introduction - page 12/12 - Bertrand LIAUDET