Déplacer Nager Marcher Voler
Transcription
Déplacer Nager Marcher Voler
Devoir 2 - IFT1025, Hiver 2006 Travail individuel Remise électronique : remise ift1025 ex2 vos_fichiers Date limite de la remise : jeudi 2 février 23:59 Cet exercice vise à pratiquer l’organisation et l’utilisation des interfaces en combinaison avec des classes. Vous explorez les utilisations possibles de ces deux notions, et obtenez une idée concrète sur les différences entre elles. Le problème Nous voulons d’abord établir une hiérarchie de classes pour des animaux. Cette hiérarchie est illustrée dans la figure suivante : Animal Vertébré Poisson Truite Carpe Amphibien Grenouille Oiseau Mammifère Chèvre Chauve-Souris Baleine Mouette Pingouin De plus, il y a une autre hiérarchie pour les capacité des animaux comme suit : Déplacer Voler Marcher Nager Note : « Marcher » est utilisé ici pour signifier « déplacer sur sol ». Ces capacités seront définies comme des interfaces. Voici des spécifications de chaque classe et interface. 1. Animal (classe abstraite) Possède un poids (float), et une méthode getPoids() qui retourne le poids. Tous les animaux savent se déplacer. 2. Vertébré (classe abstraite) Rien d’additionnel 3. Poisson (classe abstraite) Sait nager. 4. Amphibien (classe abstraite) Sait nager; Sait marcher. 5. Mammifère (classe abstraite) Rien d’additionnel 6. Oiseau (classe abstraite) Sait marcher 7. Truite Poids max (en kg): 10; Vitesse max à la nage (km/h) : 7; 8. Carpe Poids max : 25; Vitesse max à la nage : 6; 9. Grenouille Poids max : 1; Vitesse max à la nage : 3; Vitesse max sur sol : 5; 10. Chèvre Sait marcher; Poids max : 100; Vitesse max au sol : 15; 11. Chauve-souris Sait marcher; Sait voler; Poids max : 0.5; Vitesse max au vol : 30; Vitesse max au sol : 1; 12. Baleine Sait nager; Poids max : 50000; Vitesse max à la nage : 30; 13. Mouette Sait voler, Poids max : 1; Vitesse max au vol : 50; Vitesse max au sol : 4; 14. Pingouin Sait nager; Poids max : 10; Vitesse max au sol : 4; Vitesse max à la nage : 10; Pour les interfaces, chaque interface contient une méthode qui imprime un message approprié. Ces méthodes sont comme suit : 1. Déplacer int getVitesseMax () 2. Nager int getVitesseNage() 3. Marcher int getVitesseMarche() 4. Voler int getVitesseVol() Utilisation des classes dans une classe Test Vous êtes demandés à utiliser les classes et les interfaces comme suit : 1. On génère 10 animaux au hasard, correspondant aux sous-classes du plus bas niveau (Truite, Carpe, etc.). Ces 10 animaux sont stocké dans un tableau : Animal [] zoo. Pour chaque instance, selon les caractéristiques de la classe, on génère aussi un poids (float) au hasard entre 0 et le poids max, une ou des vitesse(s) de déplacement que l’animal peut atteindre. 2. Imprimer les caractéristiques de chaque animal généré. Par exemple Carpe : 4.56 kg, nage à 3 km/h. Baleine : 2756 kg, nage à 12 km/h. Mouette : 0.34 kg, vole à 15 km/h, marche à 2 km/h. … 3. Parmi ces animaux, déterminer celui qui est le plus lourd (selon son poids, et non le poids max de la classe). Afficher un message pour indiquer le résultat. Par exemple : L’animal le plus lourd est : Baleine : 2756 kg, nage à 12 km/h. 4. Parmi tous les animaux, déterminer celui qui peut se déplacer le plus vite. Afficher un message pour indiquer le résultat. 5. Parmi tous les animaux, déterminer ceux qui peuvent nager pour constituer un autre tableau Nager [] aquarium. Déterminer parmi ces animaux celui qui nage le plus vite. Afficher un message pour indiquer le résultat. 6. Pour ces mêmes animaux aquarium, déterminer celui qui est le plus lourd, et ceux qui peuvent marcher. Afficher des messages. Évaluation Cet exercice occupe 5% dans l’évaluation globale du cours. Les 5 points sont attribués de façon suivante : - Définition correcte des classes et des interfaces qui assure un bon fonctionnement minimal : 1 point - Bonne définition des classes, exploitant correctement la notion d’héritage et d’implantation des interfaces : 1 point - Programmation du test : 1 point - Affichage correct des informations à l’exécution (toString): 1 point - Structure globale, aspect globale de programmation orientée objet : 1 point Vous pouvez remettre votre programme après la date limite, mais on appliquera une pénalité de 1 point par jour de retard. Conseils - Il serait plus facile de créer une méthode getNom() dans chaque classe d’Animal, qui retourne le nom de la classe (e.g. Carpe). Cette méthode sera utile pour l’impression des messages. - Le poids max, la vitesse max sont des caractéristiques qui ne changent pas d’un objet à un autre dans la même classe. Ainsi, elles seront déclarées comme des constantes dans les classes correspondantes. - Vous n’êtes pas demandés à traiter les accents. Pour éviter des problèmes, vous pouvez utiliser Vertebre au lieu de Vertébré comme nom de classe.