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).