TP - agence de location

Transcription

TP - agence de location
USTL Licence Informatique
2005–2006
UE Programmation Orientée Objet
TP - agence de location
On s’inspire du sujet du devoir surveillé (voir au dos) en y apportant les modifications et extensions suivantes :
• l’attribut voitures de la classe Agence est du type java.util.List
• on ajoute à la classe Agence la méthode :
public Iterator selectionne(Critere c)
dont le résultat est un itérateur sur la collection des voitures qui satisfont le critère c passé en paramètre.
Vous modifierez la méthode afficheSelection afin qu’elle utilise cette méthode.
• le critère intersection de la question Q6 peut maintenant regrouper un nombre quelconque de critères (et plus
seulement deux) qui sont ajoutés via la méthode addCritere. Son diagramme UML est le suivant :
InterCritere
-lesCriteres : List
+InterCritere()
+addCritere(c: Critere)
+estSatisfaitPar(v : Voiture)
• les questions Q5 et S7 sont à placer dans un main grâce auquel vous effectuerez quelques tests en créant
quelques objets voitures et en affichant les résultats de sélections.
• On ajoute à la classe Agence la gestion des locations des voitures. Un client ne peut louer qu’un véhicule
à la fois. On supposera pour simplifier que les clients sont identifiés par une chaı̂ne de caractères (leur nom
par exemple).
On décide de gérer ces locations par une table (java.util.Map) qui associe les clients (clés) avec les
voitures (valeurs) qu’ils ont louées. Un client n’est présent dans cette table que si il loue actuellement une
voiture.
Modifiez la classe Agence pour lui ajouter les méthodes ci-dessous.
– public void loueVoiture(String client, Voiture v)
throws java.util.MissingResourceException
permet au client client de louer la voiture v.
L’exception est levée soit si la voiture n’existe pas dans l’agence soit si elle est déjà louée (consultez la
documentation pour les paramètres du constructeurs de cette exception).
– public boolean estLoueur(String client)
renvoie true ssi client est un client qui loue actuellement une voiture.
– public boolean estLoue(Voiture v)
renvoie true ssi la voiture est actuellement louée.
– public void rendVoiture(String client)
le client client rend la voiture qu’il a louée. Il ne se passe rien si il n’avait pas loué de voiture.
– public Iterator lesVoituresLouees()
qui renvoie la collection des voitures de l’agence qui sont actuellement louées.
Devoir Surveillé
1 heure - documents écrits autorisés
jeudi 18 mai 2006
Exercice 1 : Location de voitures
(Les classes/interfaces de cet exercice seront à ranger dans un paquetage agence.)
Une agence de location de voitures offre à ses clients la possibilité de choisir la voiture louée en fonction de
différents critères.
Les voitures sont définies par une marque, un nom de modèle, une année de production et un prix de location à la
journée. Pour simplifier les deux premiers paramètres seront des objets de la classe String et les deux derniers
seront des int. Deux voitures sont considérées égales si tous leurs attributs sont égaux.
Q 1 . Donner le code de la classe Voiture pour laquelle on souhaite disposer des méthodes habituelles equals
et toString. La méthode toString retournant une chaı̂ne de caractères reprenant la marque, le nom du
modèle et le prix de location.
Il est possible de sélectionner parmi les voitures à louer toutes les voitures satisfaisant un critère donné.
On définit l’interface Critere ainsi :
public interface Critere {
/**
* @param v la voiture dont on teste la confirmité
* @return true si et seulement si la voiture est conforme au
* critère (on dit que v satisfait le critère)
*/
public boolean estSatisfaitPar(Voiture v);
}
Q 2 . Donnez le code d’une classe CritereMarque qui est un critère satisfait par toutes les voitures d’une
marque donnée. La marque est précisée à la construction du critère.
Q 3 . Donnez le code d’une classe CriterePrix qui est un critère satisfait par toutes les voitures dont le prix
est inférieur à un prix fixé à la construction du critère.
Q 4 . On suppose une classe Agence définie (au minimum) ainsi :
agence::Agence
- voitures : Voiture[]
...
+ Agence(...)
+ afficheSelection(c : Critere)
...
Donnez le code de la méthode afficheSelection qui affiche parmi toutes les voitures de l’agence
(contenues dans l’attribut voitures) celles qui satisfont le critère donné.
Q 5 . En supposant que la référence agence est de type Agence et a été initialisée, donnez la ou les lignes de
code permettant d’afficher toutes les voitures de cette agence dont le prix est inférieur à 100.
Q 6 . On peut naturellement souhaiter faire des intersections de critères, ce qui revient à appliquer le et logique.
On obtient alors un nouveau critère satisfait si tous les critères qui le composent sont satisfaits.
Définissez une classe InterCritere qui permet de définir des critères par intersection de deux critères.
Les critères dont on fait l’intersection sont précisés à la construction.
Q 7 . Donnez la ou les lignes de code permettant de créer un critère intersection d’un critère pour la marque
"Timoléon" et d’un critère pour un prix inférieur à 100.