0% ont trouvé ce document utile (0 vote)
20 vues4 pages

Corbeille Design Patterns 1 (State, Observer) - Etudiants

Le document présente l'implémentation de deux design patterns : le Pattern State pour un distributeur automatique de billets et le Pattern Observer pour un arbre orienté. Le Pattern State est utilisé pour gérer les différents états de la machine, tandis que le Pattern Observer permet de mettre à jour automatiquement les valeurs des nœuds d'un arbre lorsque la valeur du nœud racine change. Des instructions détaillées sont fournies pour la création des classes et l'organisation du code en Java.

Transféré par

loic.tchana
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
20 vues4 pages

Corbeille Design Patterns 1 (State, Observer) - Etudiants

Le document présente l'implémentation de deux design patterns : le Pattern State pour un distributeur automatique de billets et le Pattern Observer pour un arbre orienté. Le Pattern State est utilisé pour gérer les différents états de la machine, tandis que le Pattern Observer permet de mettre à jour automatiquement les valeurs des nœuds d'un arbre lorsque la valeur du nœud racine change. Des instructions détaillées sont fournies pour la création des classes et l'organisation du code en Java.

Transféré par

loic.tchana
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Corbeille : 5/6 – Introduction aux design patterns

A- Le pattern state

Le Pattern State vous permet de créer une


interface souple de programmation pour des
machines d'état et autre. Après votre succès
auprès de la commune urbaine de douala, vous
venez d'être embauché par la commune de
Lemba pour mettre en place une machine à la
pointe de la technologie : un distributeur au-to-
ma-tique de billets !

« Vous devez réaliser le diagramme de classe et le code


java. »

1. On souhaite créer un distributeur de billets. Ce dernier peut être vu


comme une machine d'états avec trois états : pas de carte insérée, en
attente d'opération, et en attente de retirer des espèces. On pourra faire
quatre actions sur la machine : insérer une carte, entrer un code, retirer
des espèces, retirer la carte. Évidemment, selon l'état de la machine, les
actions auront différentes conséquences.
Voici un squelette du code de la machine :

La classe Carte est une classe avec un constructeur qui prend un code
secret, et une méthode qui répond si le code entré est bon.
Si le Client entre trois fois un mauvais code, sa carte doit être avalée.
Codez votre Distributeur.
La machine semble bien marcher, mais certains clients se plaignent. En
effet, certaines fois, la machine ne donne pas d'argent... Rapidement, les
ingénieurs de la machine comprennent que lorsque la machine n'a plus
Corbeille : 5/6 – Introduction aux design patterns
de billets, et ne peut pas donner d'argent. On doit donc rajouter un état à
la machine, qui sera l'état vide. Cependant, vous voyez bien que rajouter
un état change beaucoup de code et n'est donc pas très pratique.
Nous allons donc, avant de rajouter l'état vide, modifier les classes et
organiser mieux le projet.

2. Créez donc une interface (ou pourquoi pas une classe abstraite...) Etat
état qui contiendra les quatre méthodes de la machine (insérer la carte,
entrer code, retirer argent, reprendre carte). Créer trois classes Etat, une
par état possible de la machine et écrivez-y du code.
Le Distributeur devra posséder trois variables de classes (une par chaque
type d'état possible), plus une variable de classe de type Etat qui sera
son état courant. A chaque appel d'une méthode (insérer carte, ...), il
devra appeler la méthode sur son état courant. Ce sont les Etat qui
décideront de la marche à suivre. Cependant, le distributeur doit
posséder une méthode permettant de modifier son état courant.

Pour vous aider, voici le diagramme de classe que vous devriez obtenir.

Testez avec un Client que tout fonctionne.


Vous venez de mettre en place le Pattern State. L'objet n'est pas ses
états, mais possède ses états.
3. Ajoutez un état MachineVide pour empêcher de retirer de l'argent
quand la machine est vide. Vous allez donc ajoutez au Distributeur une
variable de classe permettant de connaître son stock d'argent, et vous
vérifierez, lorsque vous donnerez de l'argent à un Client, qu'il y a assez
d'espèces dans le Distributeur.

4. Ajoutez aussi une méthode lire_solde_compte, qui permettra au client


d'accéder à son solde lorsque le Distributeur est en mode
En_Attente_Pour_Retirer_Argent.

Réponse :
Corbeille : 5/6 – Introduction aux design patterns

B- Le pattern Observer

On souhaite gérer un arbre orienté dont les valeurs des nœuds sont
automatiquement mises à jour lorsqu’on modifie la valeur du nœud
racine. Chaque nœud est représenté par un triplet (nom, valeur,
coefficient) comme dans l’exemple suivant :

transmise par son nœud père, sa valeur devient valeur + v ∗


Chaque fois qu’un nœud (nom, valeur, coefficient) reçoit une valeur v

coefficient. Le nœud transmet alors sa nouvelle valeur à ses nœuds fils.

la valeur 1, la valeur de n0 devient 0 + 1 ∗ 2 = 2.


Par exemple, si le nœud racine de l’arbre précédent reçoit (de l’extérieur)

- la valeur de n1 devient 1 + 2 ∗ 1 = 3,
La nouvelle valeur de n0 est propagée à ses fils :

- la valeur de n2 devient 3 + 2 ∗ 4 = 11.


La propagation se poursuit de la même façon à partir des fils de n1 et n2
jusqu’au nœuds feuilles de l’arbre.

On dispose du diagramme de classes suivant :

Utiliser le design pattern Observateur pour compléter ce diagramme de


façon à pouvoir modéliser un arbre possédant un unique nœud racine et
Corbeille : 5/6 – Introduction aux design patterns
plusieurs nœuds fils comme dans l’exemple suivant (le nombre de fils est
en fait indéterminé) :

Distinguer deux types de nœuds : NoeudSujet qui transmet sa valeur à


ses fils et NoeudObservateur qui reçoit une valeur de son père.

Traduire le diagramme de classe UML en java en commençant par créer


et tester la classe Noeud.
Créer une classe TestObservateur qui modélise l’arbre présenté à la
question 1 de la partie UML.

Réponse :

Vous aimerez peut-être aussi