TP N°4 UML Et Design Patterns
TP N°4 UML Et Design Patterns
TP N°4 UML Et Design Patterns
TP N°4
UML et design patterns
Exercice 1 :
Nous souhaitons développer un ensemble de classe permettant à un touriste d’acheter des souvenirs et
de visiter pour la première fois des zones touristiques. Une zone touristique peut être soit :
- Une ville (qui peut être aussi composée d’autres zones touristiques).
- Un musé
- Un parc
Pour représenter une zone touristique, on peut utiliser une structure d’arbre. Un diagramme de classe
est proposé ci-dessous utilisant le design pattern « Composite » pour représenter la structure
arborescente de cette structure.
La question que nous pouvons poser est : quelles critiques peut-on émettre sur ce modèle ? Nous
réfléchissons en particulier à l'ajout d'une nouvelle opération (autre que « acheterSouvenir » et
« visiterPourLaPremièreFois ») sur les zones touristiques. Effectivement, le modèle proposé est
difficile à faire évoluer si on décide de réécrire une opération ou si on décide de l’ajouter. A chaque
fois, il faudra revenir dans toutes les classes filles pour réécrire une méthode existante ou pour
implémenter la nouvelle opération.
1) Proposez un design pattern pour pallier aux problèmes évoqués.
2) Modifiez les classes décrites ci-dessus et ajoutez les classes nécessaires à la réalisation du nouveau
design pattern proposé.
3) Programmez ce diagramme de classe en Java. Le programme principal doit pouvoir afficher ceci :
La ville a accepté votre visite.
Je visite pour la première fois la ville !
Le musé a accepté votre visite.
J’achète un souvenir du musé !
Le parc a accepté votre visite.
Je visite pour la première fois le parc !
Exercice 2 :
Considérons une porte de garage motorisée. L’utilisateur dispose d’une télécommande comportant un
bouton unique permettant d’actionner cette porte. Une pression sur le bouton a pour effet :
- D’ouvrir la porte si celle-ci est fermée ;
- De la fermer si elle est ouverte ;
- De demander son ouverture si elle est en cours de fermeture ;
- De demander sa fermeture si elle est en cours d’ouverture.
La porte dispose, en outre, d’un capteur de butée qui indique, selon le type de la porte, que cette
dernière a atteint sa butée haute/gauche (porte ouverte) ou basse/droite (porte fermée). Cette porte de
garage motorisée est modélisée par une classe nommée PorteDeGarage. Son comportement varie en
fonction de l’état où elle se trouve. Notamment, elle ne peut pas encore s’ouvrir si elle est déjà ouverte
ou se fermer si elle est déjà fermée.
1) Quel design pattern est le mieux adapté pour décrire une porte de garage ?
2) Concevez le diagramme de classes décrivant la porte de garage en utilisant ce pattern.
Introduisez les méthodes ouvrir et fermer dont le comportement dépend de l’état. La méthode permet
d’afficher une chaine de caractère mentionnant que le moteur de la porte s’active pour l’ouvrir et la
méthode fermer affiche une chaine de caractère pour mentionner que le moteur est en train de fermer
la porte.
3) Afin d’éviter un accident lors de la mise sous tension de la porte, il faut préciser que lorsqu’une
instance de la classe porte est créée, elle se trouve dans l’état fermée. Programmez ce diagramme de
classe. Imaginez un scénario pour le programme principal.
Il s’agit maintenant de créer une interface graphique qui affiche sur un écran placé dans la cuisine la
porte du garage ainsi que son état. Chaque fois que les données de la porte ou de son état sont changés,
les données affichées dans l’interface graphique sont mises à jour automatiquement. Il s’agit ici de
l’état de la porte du garage.
4) Quel design pattern est le mieux adapté pour concevoir cette interface graphique ?
5) Concevez le diagramme de classes correspondant en intégrant le diagramme de la question 2.
6) Développez le reste des classes et modifiez le programme principal pour prendre en compte cette
modification.