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.