Vous êtes sur la page 1sur 5

Université Claude Bernard Lyon 1 4A, 2012-2013

Département Informatique - Polytech Lyon

SIMA
TD04. Design patterns (correction)
Laëtitia Matignon

1 Modélisation d’une unité d’un jeu de stratégie

On s’intéresse à la modélisation d’une unité d’un jeu de stratégie 1 . Une unité peut
être un soldat, un char, un avion, ... Les unités ont des capacités de déplacement et de
combat variables. Par exemple, un soldat peut être équipé d’un fusil mitrailleur, d’un
lance-flamme, d’un lance-missile ...

Question 1 Proposer une architecture pour modéliser ces unités aux comportements
interchangeables.

On utilise le pattern Strategie.

1. Exercice extrait de L. Audibert, UML2 de l’apprentissage à la pratique, 2009.

1
2 Système de vente de véhicules

Au sein d’un système de vente de véhicules, nous voulons représenter les sociétés clientes,
notamment pour leur proposer des offres de maintenance de leur parc de véhicules.
Pour cela, il faut calculer le coût d’entretien de leur parc qui est fonction du nombre
de véhicules du parc et du cout d’entretien unitaire. Ces sociétés cliente peuvent être
sans filiales ou être des sociétés mères auxquelles on peut ajouter des filiales. Il doit être
possible d’ajouter des véhicules aux sociétés mères et sans filiale.

Question 2 Modéliser ces sociétés clientes à l’aide d’un pattern. Préciser comment
sont implémentées les classes.

On utilise le pattern Composite.

public c l a s s S o c i e t e S a n s F i l i a l e extends Societe


{
public boolean a j o u t e F i l i a l e ( S o c i e t e f i l i a l e )
{
return f a l s e ;
}
p u b l i c double c a l c u l eC o u t En t r e ti e n ( )
{
return nbrVehicules ∗ coutUnitVehicule ;
}
}

public c l a s s SocieteMere extends Societe


{
p r o t e c t e d L i s t <S o c i e t e > f i l i a l e s = new A r r a y L i s t <S o c i e t e >() ;
public boolean a j o u t e F i l i a l e ( S o c i e t e f i l i a l e )
{
r e t u r n f i l i a l e s . add ( f i l i a l e ) ;
}
p u b l i c double c a l c u l eC o u t En t r e ti e n ( )
{
d o u b l e count = 0 . 0 ;
for ( Societe f i l i a l e : f i l i a l e s )
cout = cout + f i l i a l e . calculeCoutEntretien ( ) ;
return cout + nbrVehicules ∗ coutUnitVehicule ;
}
}

2
3 Répertoires et fichiers

On dispose des classes présentées sur la figure suivante :

Question 3 Une application est écrite en fonction de l’interface IRépertoire. On


souhaiterait y intégrer une gestion de répertoires comprenant des fichiers manipulés via
la classe File. Proposer une architecture permettant cela en maximisant l’utilisation
du code déjà existant. On précisera comment peut être implémentée chaque nouvelle
méthode introduite.

En utilisant le pattern adaptateur pour « adapter » la classe File à l’interface IFichier,


on peut utiliser l’architecture suivante :

Notons que l’on a utilisé ici un adaptateur de classe.

Question 4 Modifier cette architecture pour prendre en compte une classe abstraite
FichierAbstrait à la place de l’interface IFichier.

On peut utiliser exactement le même principe que précédemment, mais afin d’éviter
l’héritage multiple on utilisera un pattern d’adaptateur d’instance (d’objet) : on in-
troduira une classe Fichier héritant de la classe FichierAbstrait et utilisant une
instance de la classe File par délégation.

3
4 Document HTML

On suppose que l’on dispose des classes de la figure pour manipuler des documents
HTML. Par exemple, si l’on crée un élément de type Balise avec le nom « h1 »,
la méthode codeHTMLOuvrant retournera « <h1> » et la méthode codeHTMLFermant
retournera « </h1> ». Les éléments de type Ancre sont les balises <a href=“...”>, ceux
de type entête correspondent à une balise <head>, ceux de type image correspondent
à une balise <img src=“...” title=“...”>. Les éléments de type BaliseVide sont ceux tels
que <br />.

Question 5 Proposer une modélisation d’un ArbreBodyHTML s’appuyant sur les


classes ci-dessus et permettant de représenter des éléments HTML imbriqués de façon
quelconque, par exemple :

<p>

Cliquez <a href=“index.html”>ici <em>vite</em></a>.

<br />

C’est <em>urgent</em>.

</p>

Quel pattern utilisez-vous ?

4
5