5
Travaux pratique d'Outils de Développement Logiciel 1 6.Patrons de conception : le distributeur de pizzas Cette séance de TP a pour objectif d'introduire l'emploi des patrons de conception (design pattern) dans le cadre de la programmation en Java. Les patrons étudiés au cours de cette séance de laboratoire sont : le patron composite (Composite pattern), le patron fabrique abstraite (Abstract Factory pattern), le patron singleton (Singleton pattern), le patron état (State pattern) et le patron décorateur (Decorator pattern). Les patrons de conception ne sont pas liés à un langage de programmation. Ils peuvent être implémentés dans n'importe quel langage tant que celui-ci prend en compte les notions d'orienté objet, d'héritage et d'interface. 6.1.Patrons de conception a) Le patron composite L'illustration 1 présente le diagramme de classe du patron de conception composite. Il contient une interface répertoriant l'ensemble des opérations qui sont implémentées à la fois par les « feuilles » et par l'objet composite. Cette interface permet de manipuler les feuilles ou l'objet composite de la même manière. Les feuilles fournissent donc une implémentation aux diverses méthodes de l'interface. L'objet composite contient une liste de feuilles et fournit des méthodes supplémentaires qui permettent de gérer cette liste (ajout, retrait et récupération d'éléments). Les opérations dans l'objet composite font généralement appel aux opérations de même nom pour chaque feuille présente dans la liste et agrègent les résultats que ces feuilles renvoient. Par exemple, le prix d'un harmonica serait la somme du prix de ses composants (capot, plancher, hanches …). b) Le patron fabrique abstraite (Abstract Factory) Ce patron utilise le patron fabrique. La fabrique crée et retourne des objets qui dérivent d'une même classe abstraite. L'appelant ne connaîtra donc pas le type exact de l'objet. La fabrique abstraite regroupe plusieurs fabriques et peut remplir plusieurs rôles. Dans un premier contexte, les fabriques permettent de construire des objets dérivant de différents type abstraits. A chaque type abstrait serait associé une fabrique et les types abstraits se partagent une interface commune. A nouveau, le rôle serait ici de masquer le type spécifique des objets créés afin de simplifier la programmation. Dans un second contexte, présenté dans l'Illustration 2, les fabriques ne sont pas associées à un type abstrait en particulier, mais à certaines classes dérivées d'un ou plusieurs types abstraits. Par exemple, dans un système d'exploitation fournissant plusieurs thèmes graphiques, une fabrique de composants graphiques peut être associée à chaque thème. Chaque fabrique renvoie ainsi des boutons, des fenêtres et autres dont les Université de Mons – Faculté Polytechnique Pierre Manneback, Sébastien Frémal, Olivier Debauche 2016-2017 Illustration 1: Diagramme de classe du patron de conception composite

6.Patrons de conception : le distributeur de pizzas - Université de … ·  · 2016-11-21arrive à cours de billets, ... Ce patron de conception permet d'attacher de nouvelles fonctionnalités

Embed Size (px)

Citation preview

Page 1: 6.Patrons de conception : le distributeur de pizzas - Université de … ·  · 2016-11-21arrive à cours de billets, ... Ce patron de conception permet d'attacher de nouvelles fonctionnalités

Travaux pratique d'Outils de Développement Logiciel 1

6.Patrons de conception : le distributeur de pizzasCette séance de TP a pour objectif d'introduire l'emploi des patrons de conception (design

pattern) dans le cadre de la programmation en Java. Les patrons étudiés au cours de cette séance delaboratoire sont : le patron composite (Composite pattern), le patron fabrique abstraite (Abstract Factorypattern), le patron singleton (Singleton pattern), le patron état (State pattern) et le patron décorateur(Decorator pattern). Les patrons de conception ne sont pas liés à un langage de programmation. Ilspeuvent être implémentés dans n'importe quel langage tant que celui-ci prend en compte les notionsd'orienté objet, d'héritage et d'interface.

6.1.Patrons de conception

a) Le patron composite

L'illustration 1 présente le diagramme de classe du patron de conception composite. Il contientune interface répertoriant l'ensemble des opérations qui sont implémentées à la fois par les « feuilles » etpar l'objet composite. Cette interface permet de manipuler les feuilles ou l'objet composite de la mêmemanière. Les feuilles fournissent donc une implémentation aux diverses méthodes de l'interface. L'objetcomposite contient une liste de feuilles et fournit des méthodes supplémentaires qui permettent de gérercette liste (ajout, retrait et récupération d'éléments). Les opérations dans l'objet composite fontgénéralement appel aux opérations de même nom pour chaque feuille présente dans la liste et agrègent lesrésultats que ces feuilles renvoient. Par exemple, le prix d'un harmonica serait la somme du prix de sescomposants (capot, plancher, hanches …).

b)Le patron fabrique abstraite (Abstract Factory)

Ce patron utilise le patron fabrique. La fabrique crée et retourne des objets qui dérivent d'unemême classe abstraite. L'appelant ne connaîtra donc pas le type exact de l'objet. La fabrique abstraiteregroupe plusieurs fabriques et peut remplir plusieurs rôles. Dans un premier contexte, les fabriquespermettent de construire des objets dérivant de différents type abstraits. A chaque type abstrait seraitassocié une fabrique et les types abstraits se partagent une interface commune. A nouveau, le rôle seraitici de masquer le type spécifique des objets créés afin de simplifier la programmation. Dans un secondcontexte, présenté dans l'Illustration 2, les fabriques ne sont pas associées à un type abstrait en particulier,mais à certaines classes dérivées d'un ou plusieurs types abstraits. Par exemple, dans un systèmed'exploitation fournissant plusieurs thèmes graphiques, une fabrique de composants graphiques peut êtreassociée à chaque thème. Chaque fabrique renvoie ainsi des boutons, des fenêtres et autres dont les

Université de Mons – Faculté PolytechniquePierre Manneback, Sébastien Frémal, Olivier Debauche 2016-2017

Illustration 1: Diagramme de classe du patron de conceptioncomposite

Page 2: 6.Patrons de conception : le distributeur de pizzas - Université de … ·  · 2016-11-21arrive à cours de billets, ... Ce patron de conception permet d'attacher de nouvelles fonctionnalités

Travaux pratique d'Outils de Développement Logiciel 2

fonctionnalités ne changent pas d'une fabrique à l'autre, mais dont le style graphique dépend du thèmeassocié à la fabrique.

c) Le patron singleton

L'Illustration 3 présente le diagramme de classe du patron singleton. Ce patron permet degarantir qu'il n'existera qu'une seule instance de la classe singleton au sein d'un programme. Pour ce faire,un pointeur statique du même type que la classe singleton est ajouté en son sein et le constructeur estrendu privé. Une méthode publique et statique est alors utilisée pour créer et renvoyer l'instance de laclasse. Lors de son premier appel, cette méthode instancie la classe, place l'adresse de cette uniqueinstance dans le pointeur statique de la classe et la renvoie à l'appelant. A tout autre appel, la méthode nefait que renvoyer la référence contenue dans le pointeur statique.

d)Le patron état (State)

Le patron de conception état permet d'implémenter un système qui passe d'un état à un autre (detype « machine à état ») et dont le comportement dépend de l'état dans lequel il se trouve. Dans l'exempled'un distributeur de billets, on peut imaginer une opération « retrait d'argent » qui, lorsque le distributeurest dans un état « normal », permet à l'utilisateur le retrait de son argent. Dans le cas où le distributeurarrive à cours de billets, son état est alors changé en « Retrait indisponible » et lorsque l'utilisateur faitappel à la fonctionnalité « retrait d'argent », un message d'erreur lui est communiqué pour lui indiquerl'absence de billets et l'impossibilité d'accomplir l'opération.

Le diagramme de ce patron de conception est présenté à l'Illustration 4. La classe Context estla classe qui doit utiliser une fonctionnalité dépendant de l'état du système. Cette classe contient une

Université de Mons – Faculté PolytechniquePierre Manneback, Sébastien Frémal, Olivier Debauche 2016-2017

Illustration 2: Diagramme de classe du patron de conception fabrique abstraite

Illustration 3: Diagramme de classe dupatron de conception Singleton

Page 3: 6.Patrons de conception : le distributeur de pizzas - Université de … ·  · 2016-11-21arrive à cours de billets, ... Ce patron de conception permet d'attacher de nouvelles fonctionnalités

Travaux pratique d'Outils de Développement Logiciel 3

instance de State, qui est l'interface définissant les méthodes dont l'exécution dépend de l'état dusystème. Chaque état du système sera donc représenté par une implémentation différente de l'interfaceState. Ces différents états sont inter-changés au sein de la classe Context. Ainsi, lorsque l'appelantcommunique une requête, comme « retrait d'argent », à Context, la réponse à cette requête dépenddirectement de l'état du système.

e) Le patron décorateur (Decorator)

Ce patron de conception permet d'attacher de nouvelles fonctionnalités à un objet sans changer lecomportement des autres objets du même type. Ce patron est présenté à l'Illustration 5. Le décorateur etl'élément à décorer doivent implémenter la même interface, Component dans l'exemple. Cette interfacepermet de spécifier les opérations qui seront modifiées par le décorateur. Le décorateur est une classeabstraite qui contient une instance de la classe qui sera « décorée ». Les classes concrètes qui héritent dudécorateur peuvent implémenter différemment les opérations de l'interface Component. Ainsi, lorsqu'unnouvel objet Component doit être construit, soit on renvoie directement une instance deConcreteComponent, adoptant ainsi le comportement standard de la classe, soit on renvoie uneinstance de ConcreteDecorator qui redéfinit ainsi les opérations de la classeConcreteComponent.

Par exemple, dans le cas d'un concessionnaire de voiture, on peut imaginer une interface Voiturequi fournit entre autres une méthode qui permet d'obtenir le prix d'une voiture. Il est alors possible decréer des décorateurs pour équiper la voiture d'options. Il peut ainsi y avoir le décorateurVoitureAvecToitOuvrant qui modifie la fonction getPrix() en renvoyant le prix standard de lavoiture incrémenté de 5000€.

Université de Mons – Faculté PolytechniquePierre Manneback, Sébastien Frémal, Olivier Debauche 2016-2017

Illustration 4: Diagramme de classe du patron de conception état

Illustration 5: Diagramme de classe du patron deconception décorateur.

Page 4: 6.Patrons de conception : le distributeur de pizzas - Université de … ·  · 2016-11-21arrive à cours de billets, ... Ce patron de conception permet d'attacher de nouvelles fonctionnalités

Travaux pratique d'Outils de Développement Logiciel 4

6.2.Énoncé

Il vous est demandé de concevoir un programme qui simule le comportement simplifié d'undistributeur de pizza. Les pizzas sont composées des aliments suivants : pâte (3€), sauce tomate (1,50€),crème blanche (1,50€), fromage (2€), champignons (1€), fruits de mer (2,50€), jambon (2€), olives (1€).

Les différentes pizzas disponibles sont :

• Margherita : pâte, sauce tomate, fromage.

• Prosciutto : pâte, sauce tomate, fromage, jambon.

• Frutti di mare : pâte, sauce tomate, fromage, fruits de mer.

• Carbonara : pâte, crème blanche, fromage, jambon.

Il vous est demandé d'utiliser le patron de conception composite pour implémenter les pizzas etleurs aliments.

Les pizzas peuvent venir de deux fast-foods différents : du Pizza Hut ou du Domino Pizza. Les pizza du Pizza Hut sont similaires à celles du Domino Pizza, mais elle contiennent aussi des olives. Il vous est demandé d'utiliser le patron de conception fabrique abstraite pour construire les pizza du DominoPizza et du Pizza Hut.

Les fabriques peuvent fabriquer au maximum 2 pizzas de chaque sorte. Il vous est demandé d'implémenter les fabriques à l'aide du patron de conception singleton afin qu'il n'existe qu'une seule instance de chaque fabrique au sein du système.

Indépendamment de leur fast-food d'origine, la pâte des pizzas peut être « décorée ». La pâte « cheesy crust » augmente le prix de la pizza de 2 € et change son nom en « Cheesy + 'nom de la pizza' ». La pâte « pan » augmente le prix de la pizza de 1,50€ et change son nom en « Pan + 'nom de la pizza' ». Ilvous est demandé d'employer le patron de conception décorateur pour implémenter cette fonctionnalité.

Enfin, les distributeurs de pizza connaissent deux états. A un distributeur est assigné une fabrique. Dans son état initial, « en service », le distributeur fournit les pizzas normalement. Lorsqu'un client (la classe de test) cherche à commander une nouvelle pizza alors que le stock est vide, l'état du distributeur change pour l'état « hors service ». Dans cet état, les distributeurs cessent de délivrer des pizzas et affiche un message d'état indisponible. Il ne vous est pas demandé d'implémenter le réapprovisionnement des distributeurs. Le changement d'état des distributeurs doit être implémenté en suivant l'architecture du patron de conception état.

Votre classe de test devra :

• implémenter un distributeur de pizza Pizza Hut et un distributeur de pizza Domino ;

• commander à chacun de ces distributeurs 3 pizzas margherita (une standard, une pan pizza et une cheezy pizza) ;

• afficher le nom, la composition et le prix de chacune des pizzas commandées.

6.1.Bibliographie

1. JAVA - Comment programmer – Quatrième édition, Harvey M. Deitel & Paul J. Deitel -Les éditions Reynald Goulet INC., 2002

2. Méthodologie et Langages de Programmation, Pierre Manneback, Année académique2005-2006.

3. Wikipedia - Diagrame de classe UML pour le patron de conception composite -https://upload.wikimedia.org/wikipedia/commons/e/e9/Composite_UML_class_diagram_fr.svg?uselang=fr

4. Wiki Minetti - Design pattern:Fabrique abstraite -

Université de Mons – Faculté PolytechniquePierre Manneback, Sébastien Frémal, Olivier Debauche 2016-2017

Page 5: 6.Patrons de conception : le distributeur de pizzas - Université de … ·  · 2016-11-21arrive à cours de billets, ... Ce patron de conception permet d'attacher de nouvelles fonctionnalités

Travaux pratique d'Outils de Développement Logiciel 5

http://www.minetti.org/wiki/Design_pattern:Fabrique_abstraite

5. Crunchify - Thread-Safe and a Fast Singleton Implementation – Singleton Design Patternin java - http://crunchify.com/thread-safe-and-a-fast-singleton-implementation-in-java/

6. Wikipedia - État (patron de conception) - https://fr.wikipedia.org/wiki/%C3%89tat_%28patron_de_conception%29

7. Wikipedia – Décorateur (patron de conception) -https://upload.wikimedia.org/wikipedia/commons/e/e9/Decorator_UML_class_diagram.svg

Université de Mons – Faculté PolytechniquePierre Manneback, Sébastien Frémal, Olivier Debauche 2016-2017