Вы находитесь на странице: 1из 5

TP4 Thme : Le Tour de France Vector Interfaces - Exceptions

Objectifs :
Comprendre les Exceptions Les Interfaces principalement Comparable et Comparator Encore la classe Vector La modlisation UML ( rendre avec le CR)

Problme COURSE CYCLISTE TOUR DE FRANCE


Le Tour de France est une course cycliste qui parcourt un certain nombre dtapes. Le fil directeur de ce sujet est la modlisation dun programme qui permet de grer le classement du Tour de France. Cependant les rponses aux exercices sont indpendantes et il est possible dutiliser les rponses une question non traite pour rsoudre les autres questions (au sein dune mme question, les lments peuvent dpendre les uns des autres). Le Tour de France est donc une course tapes. Dans une telle course, le rsultat dun coureur est dtermin par le cumul des temps quil a ralis a chacune des tapes et le cumul des points quil a obtenu lors de ces tapes dans diffrents classements. Diffrents classements existent selon diffrents critres : meilleur temps (maillot jaune, plus petit temps cumul), meilleur sprinter (maillot vert, plus grand nombre de points verts), meilleur grimpeur (maillot pois rouges, plus grand nombre de points montagne)Nous allo ns mettre en place une modlisation simple du tour.

Manipulation 1 : la classe Temps Interface Comparable, mcanismes de Tri


Temps Le temps ralis par un coureur est dfini par la donne de 3 entiers reprsentant respectivement un nombre dheures, de minutes et de secondes. Le nombre dheures nest pas born, alors que les nombres de minutes et secondes sont strictement infrieures 60. De manire vidente 63 minutes correspondront 1 heure et 03 minutes. On supposera quil nexiste aucune exception sur le temps. Il doit tre possible de comparer 2 temps entre eux (pensez tout transformer en secondes) et dajouter un temps un autre. La classe dispose de la mthode toString retournant lheure sous la forme xHyMNzESC . Question 1. Donnez le code JAVA dune classe Temps respectant ces contraintes savoir : comparer deux temps l'aide de la mthode compareTo (de l'interface Comparable) ajouter un temps un autre temps toString

Saloua Ben Yahia

1 sur 5

mthode afficher qui appellera toString 2 constructeurs : lun sans paramtre met le temps 0 et le second prend pour paramtre les valeurs initiales des nombres dheures, mn et sec. Mthode equals & hashcode (remettre leurs utilits dans le Compte Rendu) Cette classe implmentera donc linterface java.lang.Comparable (consulter le javadoc et les annexes de la mthode compareTo) pour indiquer si le temps pass en paramtre est suprieur gal ou infrieur au temps courant (Remettre l'utilit dans le CR) Question 2 : Soit la classe de TestTemps suivante, sur quel mcanisme ou interface se base la mthode sort (statique) de la classe Collections ? Si on met l'instruction sort en commentaire que produit l'affichage, le vector est-il toujour tri ? Si la classe temps n'implemente pas Comparator le mcanisme fonctionne t-il ? selon qu'elle bases ?
class TestTemps { public static void main(String args[]) { Temps t1=new Temps(10, 10, 10); Temps t2=new Temps(1,1,1); Vector v = new Vector(); v.add(t1); v.add(t2); Collections.sort(v); System.out.println(v); }}

Question 3 : Modifier le constructeur de la classe Temps de manire a ce quil lance ou jette une exception de type TempsException (quil ne traitera pas) si les heures, les minutes et les secondes ne correspondent pas a un temps valide. Crer bien entendu la classe TempsException (simplement comme suit) . Corriger le main prcdent pour traiter l'exception et afficher un message d'erreur en cas d'exceptions. class TempsException extends Exception {} Question 4 : Dessiner le diagramme de classe UML de Temps

Manipulation 2 : La classe Resultat


Rsultat : Le rsultat reprsente les performances dun joueur dans la course. Il est dfini par un Temps, un nombre de point verts et un nombre de points montagne qui sont des entiers. Il doit tre possible de cumuler deux rsultats en rajoutant les points verts, les points montagne et les temps. Les rsultats dun coureur sont donns par une instance de la classe Resultat galement suppose donne et dont le diagramme de classe est donn ci-dessous. - La mthode ajouter(Resultat r) permet de cumuler lobjet Resultat sur lequel cette mthode est invoque les scores dfinis dans le nouveau resultat r. - La mthode toString renvoie une chane dcrivant les performances du joueur

Saloua Ben Yahia

2 sur 5

La classe Rsultat doit implmenter Comparable et Comparator. Deux rsultats sont identiques si tous les paramtres sont identiques. Crer les mthodes equals, hashcode Crer les interfaces TempsComparator, PointVertComparator, PointMontagneComparator Resultat +Resultat(t:Temps, pointsVert :int, pointsMontagne :int) +Resultat() +ajouter(r:Resultat):void + toString():String +

Q 1. Donnez le code JAVA dune classe Resultat respectant ces contraintes. Q2. Crer un main et tester le fonctionnement de cette classe : ajouter deux rsultats ou n resultats quelconques un Vector, trier des resultats selon le temps, les points verts, les points montagnes(utiliser l'annexe pour vous aider) Question 3 : Dessiner le digarmme de classe UML de Rsultat (ventuellement tester le Revers Engeneering qui consiste a retrouver le diagramme UML partir du code avec des plugins NetBeans ou Eclipse ou RationalRose

Manipulation 3 : La classe Coureur


Coureur Les coureurs participant une course sont dfinis par la donne, la cration, de leur nom et prnom reprsents par des chanes de caractres, leur numro de licence (suppos unique pour chaque coureur 1 ), une chane de caractres, leur ge en annes, un entier. Les coureurs ont aussi : - Un Tableau de Resultat qui stocke leur rsultat pour chaque tape courue. On suppose que les tapes ont un numro. Exemple le rsultat de lEtape numro 10 sera stock dans la case 10. - Un resultatGlobal de type Resultat qui est le cumul des performances dun Coureur sur les tapes disputes. - Un Coureur peut aussi un moment donn abandonner la course. Un attribut servira dcrire si un joueur a abandonn ou pas. - Si le joueur a abandonn un attribut entier servira indiquer le numro la dernire tape courue. - Une mthode toString() qui affiche les infos sur un Coureur (nom, prenom) et affiche son resultatGlobal uniquement sil na pas abandonn (voir exemple IHM page 4). - Une mthode public void resultatEtape(Etape e, Resultat r). Cette mthode stocke le nouveau rsultat r dans le tableau de rsultats et ajoute le nouveau rsultat r au resultatGlobal. La classe Coureur emplus doit tre Triable selon les noms, le numro de license et selon leurs rsultats en terme de Temps, Points verts et Point Montagne : implmenter les mcanismes ncssaires. Q 3 . 2 (1,5 pts) Donnez le code Java de la classe Coureur et son diagramme UML

Saloua Ben Yahia

3 sur 5

Manipulation 4 : La classe ListeCoureur


Liste de coureurs On souhaite disposer dune classe ListeCoureurs qui permette de grer une liste de coureurs et qui respecte (et complte) le diagramme UML ci-dessous, seuls les attributs ont t omis, vous de les proposer. - La mthode ajouter permet de rajouter un nouveau coureur dans la liste en s'assurant qu'il n'existe pas dj : sinon une exception CoureurExisteDj est jete - La mthode rcuprer renvoie le coureur encore en course qui possde le numro pass en paramtre. Si le coureur est trouv mais a abandonn elle lve une exception contrle dfinir AbandonException. Si le coureur nest pas trouv elle lve CoureurInconuException. - La mthode abandon va spcifier que le coureur dont le numro est lindice entier pass en paramtre a abandonn la course. - La mthode listeAbandon retourne la liste des Coureur ayant abandonn. - La mthode taille renvoie le nombre de Coureur dans la liste. - La mthode afficher qui affiche (System.out) les informations sur tous les coureurs (voir affichage Annexe 2). - Une mthode de tri : selon le type de paramtre (temps, points montagne, points verts, nom )

ListeCoureurs
listeCoureur: Vector +ListeCoureurs() +ajouter(c:Coureur):void +recuperer(int indiceCoureur):Coureur +abandon(int indiceCoureur):void +listeAbandon():Vector +affiche():void +taille():int Q 1 (2 pts). Donnez le code JAVA de la classe ListeCoureurs.

Manipulation 4 : La classe Etape


Course tapes On suppose donne la classe Etape (voir ci-dessous) qui SIMULE le droulement dune tape en attribuant des rsultats alatoires aux coureurs grce la mthode disputer et en liminant un Coureur au hasard pour chaque tape avec la mthode abandon : Q1 Dans linstruction en gras de la classe Etape ci-dessous Que faut il crire la place du ?
import java.util.*; public class Etape { private int numEtape; public Etape(int numEtape){this.numEtape=numEtape;} public void disputer(ListeCoureur lc) {

Saloua Ben Yahia

4 sur 5

// Simule le droulement dune tape en attribuant un rsultat alatoire a chaque Coureurs pour cette tape. Cette mthode appelle la mthode abandon qui limine de manire alatoire un Coureur un debut de letape. abandon(lc); int h,m,s,pv,pm=0; for (int i=0;i<lc.taille();i++) { //debut for try{ Coureur c = lc.recuperer(i); h=(int)(Math.random()*5); m=(int)(Math.random()*60); s=(int)(Math.random()*60); Temps t = new Temps(h,m,s); pv=(int)(Math.random()*100);pm=(int)(Math.random()*100); c.setResultat( ?, new Resultat(pm,pv,t));} catch(AbandonException e){// le joueur a bandonn il ne dispute pas la course, on passe au joueur suivant.} }//fin for}//fin methode public void abandon(ListeCoureur lc) {//choix alatoire dun Coureur qui va abandonner la course durant une tape - Le cas ou le tirage alatoire dsigne un Coureur dj //limin nest pas pris en Compte. int numAleatoire=(int)(Math.random()*lc.taille()); lc.abandon(numAleatoire);}}

Manipulation 4 : La classe TourDeFrance


On souhaite la classe TourDeFrance telle que : - le constructeur prenne en paramtre une liste dtapes et une liste de coureurs, chaque coureur aura initialement un temps de 0h0mn0s et 0 point dans chacun des classements. - lon ait une mthode disputeCourse, sans paramtre, qui fait disputer successivement chacune des tapes aux coureurs. - lon ait une mthode disputeEtape qui prend en paramtre une tape, fait disputer cette tape tous les coureurs et modifie leurs rsultats en consquence. Les coureurs ayant abandonn en cours dtape sont limins et donc supprims des coureurs participant la course. - lon ait une mthode public Coureur maillotJaune() qui renvoie le coureur dtenteur du maillot jaune. En cas dgalit, nimporte quel coureur meilleur temps conviendra. - Mthode public Coureur maillotPois() (meileurs grimpeur selui qui a le plus de points Montagne) - Mthode public Coureur maillotVert() celui qui a le plus de points Q 1. Donnez le code JAVA ncessaire la classe TourDeFrance. Q 2. Donnez le code JAVA dune classe de test du TourDeFrance qui fait disputer une Course de trois tapes pour 6 Coureurs (voir Annexe 2). Lexcution du test doit donne un affichage oragnis et explicite sur le droulement de la course..

Saloua Ben Yahia

5 sur 5

Вам также может понравиться