Devoir Surveillé - fil

Transcription

Devoir Surveillé - fil
Université Lille 1 – Licence 2 Informatique
2014-2015
UE Programmation Orientée Objet
Devoir Surveillé
1 heure 12 h - documents de cours annotés autorisés
dictionnaire de langue étrangère autorisé
vendredi 27 février 2015
Précisez votre numéro de groupe sur votre copie.
Les tests et la javadoc ne doivent être fournis que s’ils sont demandés.
Les duréees pour chaque question sont données à titre indicatif.
Lecture sujet (10 mn)
Exercice : Parc d’Attractions
On s’intéresse aux attractions proposées à ses visiteurs par un parc d’attractions. L’accès à ces attractions peut être
contraint au respect de certaines conditions, comme l’âge ou la taille.
Chaque attraction a un coût fixe en Euro. Pour participer à une attraction il faut s’acquitter de ce coût ou utiliser
un ticket qui a pu être acheté précédemment. Le coût d’un ticket est constant et fixé par le parc par une constante
TICKET PRICE.
Moyen de paiement
Q 1 . (5 mn) Sachant que les deux seuls moyens de paiement (means of payment) possibles sont l’Euro et les
tickets, donnez le code java d’un type PaymentMeans permettant de représenter un moyen de paiement.
Ce type appartiendra au paquetage park.payment.
Ce type définira aussi la constante TICKET PRICE dont la valeur sera fixée à 1,50 Euro.
Les visiteurs
Les visiteurs du parc sont modélisés par une classe Person du paquetage park dont les instances sont caractérisées par
un âge (un nombre entier d’années), une taille (un nombre entier de centimètres) et un nom (une chaı̂ne de caractères).
Q 2 . (5 mn) Donnez un diagramme UML pour une classe Person du paquetage park qui disposera, en plus des
accesseurs, des méthodes equals et toString habituelles.
Deux instances de Person seront égales si elles ont le même nom et le même âge1 .
Q 3 . (7 mn) Donnez le code d’une méthode de test unitaire JUnit permettant de tester le bon fonctionnement de
la méthode equals de Person (on ne demande que le code de la méthode de test, pas de toute la classe de test).
Q 4 . (12 mn) Donnez le code de la classe Person.
Condition d’accès
Les conditions d’accès (access condition) à une attraction sont définies par l’interface :
package park;
public interface AccessCondition {
public boolean accessGranted(Person p);
public String getDescription();
}
La méthode accessGranted (accès accordé) renvoie la valeur true si et seulement si la personne p respecte la condition,
elle aura donc accès à l’attraction, et la méthode getDescription fournit une information textuelle sur la condition
d’accès.
Q 5 . (5 mn) Donnez le code d’une classe park.NoRestriction qui permet de représenter des conditions d’accès
qui autorisent l’accès à toute personne.
Q 6 . (7 mn) Donnez le code d’une classe park.MinimalAgeCondition qui permet de définir une condition d’accès
qui sera respectée si et seulement si l’âge de la personne est au moins égal à un âge minimum fixé à la construction
de la condition.
Par la suite on pourra supposer qu’il existe d’autres classes permettant de représenter d’autres conditions d’accès.
1 On
suppose donc qu’il n’existe pas deux personnes différentes de même âge et de même nom.
Les attractions
définie par
Les attractions sont modélisées par la classe Attraction du paquetage park. Une attraction est
• un nom (une chaı̂ne de caractères),
• un coût (en nombre d’euros) à payer pour utiliser l’attraction, ce coût est payé si le mode de paiement est l’euro,
sinon on peut utiliser un ticket,
• et une condition d’accès, qui permet de savoir si une personne peut avoir ou non accès à l’attraction.
Les propriétaires du parc souhaitent également disposer d’informations sur l’utilisation de chaque attraction et savoir :
• combien de personnes utilisent l’attraction,
• quelle est la recette (income) en euros de l’attraction. On tient bien sûr compte du mode de paiement, en euros
ou en ticket, de chaque visiteur.
Ces données sont actualisées dès qu’un visiteur (autorisé) utilise l’attraction.
Votre classe devra également disposer d’une méthode :
/** the person p uses (if granted) this attraction paying access cost with m.
*
Number of users and income are updated.
* @param p the person which wants to use this attraction
* @param m the means of payment used to access this attraction
* @exception AccessNotGrantedException if person p can not use
this attraction: access is not granted for p
*/
public void welcome(Person p, PaymentMeans m) throws AccessNotGrantedException
On suppose la classe AccessNotGrantedException définie dans le paquetage park.
Q 7 . (7 mn) Donnez le diagramme UML d’une classe Attraction correspondant à ce cahier des charges.
Q 8 . (5 mn) Donnez le code java de l’en-tête de déclaration de la classe Attraction.
Q 9 . (10 mn) Donnez le code java de la méthode welcome.
Q 10 . (7 mn) Donnez le code d’une méthode main qui
1. crée une attraction (choisissez son nom et son coût),
2. lui attribue une condition d’âge d’accès minimal fixé à 12 ans,
3. initialise une référence p1 avec un objet Person, d’âge 18 ans,
4. fait utiliser l’attraction par p1 qui paye avec un ticket,
5. initialise une référence p2 avec une instance de Person, d’âge 10 ans,
6. fait utiliser l’attraction par p2 qui paye en euro.
En cas d’impossibilité d’utiliser une attraction un message signalant le problème doit être affiché.
Q 11 . (10 mn) Un parc d’attractions (amusement park) est une instance de la classe AmusementPark dont voici
un extrait du diagramme UML :
park::AmusementPark
...
+AmusementPark(name : String)
+ allAttractions() : Attraction[]
+ totalIncome():float
...
• la méthode allAttractions donne accès à toutes les attractions du parc,
• la méthode totalIncome calcule la recette (income) du parc d’attractions qui correspond au cumul des
recettes de toutes les attractions.
Donnez la javadoc et le code de la méthode totalIncome (uniquement cette méthode).