Vous êtes sur la page 1sur 4

Université Ibnzohr 4ième Année G.

Informatique
ENSA Agadir Année 2013/2014
Prof. R. EZZAHIR

Série de TP de Révision N°1

Objectif
L’objectif ce TP est de présenter l’héritage, le polymorphisme, l’utilisation des interfaces, et les E/S. Les collections et la
généricité en Java vont être traitées dans la série de révision N°. Ce pendant les programme que vous allez développer dans
cette série seront utilisés en série N°. Vous devez écrire la javadoc http://java.sun.com/j2se/javadoc/writingdoccomments/ au
fur et à mesure de l’avancement et il est fortement conseillé d’avoir le documentation de java sous les yeux
:http://java.sun.com/j2se/1.5.0/docs/api/index.html

Appel d'une méthode la classe mère


Dans cet exercice nous allons modéliser les êtres vivants sur une ferme : des plantes, des animaux, des mammifères et
des oiseaux mais aussi des hommes, des moutons, des chèvres, des vaches des chiens, des loups, et des lapins.

I. Modélisation par héritage et Instanciation


Une des caractéristiques communes entre les êtres vivants est qu’ils exigent de l’énergie. Il y a ce qui tire leur énergie du
Soleil (plantes) et ce qui tire leur énergie par consommation de produits extraits d’autres vivants. Cependant, on peut dire
d’une manière générale ou abstraite « qu’un être vivant a une source d’énergie », mais on ne peut pas répondre à la
question « quelle est la source d’énergie d’un vivant ? », sans le spécifie. Donc les être vivants peuvent être modélisés en
java par une classe abstraite soit par une interface EtreVivant qui définie la méthode abstraite String
getSourceEnergie() ;
1. Utiliser une interface est un bon choix, pourquoi ?
…………………………………………………………………………………………………………………………………………….
…………………………………………………………………………………………………………………………………………….
…………………………………………………………………………………………………………………………………………….
2. Créer le fichier EtreVivant.java qui définit cette interface.
3. Créer deux classes Animal et Plante qui implantent l’interface EtreVivant ayant chacune les attributs nom, et
dateDeNaissance, un constructeur avec un seul argument nom et deux méthode getNom(), getAge(). La date de
naissance d’une instance d’un ’être vivant est affectée à l’instante de sa création System.currentTimeMillis(). Donc la
méthode getAge() va retourner (System.currentTimeMillis()-dateDeNaissance).
4. Ces deux classes doivent être déclarées abstraites pourquoi ? ………………………………………………………………..
………………………………………………………………………………………………………………………………………….
5. En analysant les codes des classes Animal et Plante qu’est ce que vous remarquez ?......................................................
6. Que faut-il faire pour éviter ceci ?.........................................................................................................................................
………………………………………………………………………………………………………………………………………….
Modifier votre code en ajoutant la classe Creature qui s’intercale entre Animal et Plante sur la quelle vous devez définir le
code commun. Comment déclarer cette classe, son constructeur et les constructeurs ces deux classes filles
……………………………………………………………………………………………………………………………………...
…………………………………………………………………………………………………………………….………………...
………………………………………………………………………………………………………………………………………...
7. Pouviez-vous instancier la classe Plante? Comment faut-il la déclarée.........................................................................
8. La classe Animal doit définir la méthode String getSexe() et la méthode String getVoix() qui retourne le moyen
d’expression de l’animal. La chaîne retournée est de la forme : "aboie”, ou ”fais-des-bulles” (voir la table ci-
dessous).
9. Est-ce que le corps de la méthode getVoix() peut être définit dans la classe animal? ………, Si non comment faut-il
déclaré cette méthode ?......................................................................................................................................................
10. Créer deux package ferme.animaux et ferme.plantes.
11. Dans le package ferme.plantes, créer les classes Arbre, Fleur, Arbuste, qui héritent de la classe plante. La classe Arbre a
un attribut boolean (fruitier) qui indique est ce que l’arbre est fruitier ou non, Fleur a l’attribut (String origine), et Arbuste a
l’attribut boolean (arrose). Les méthodes getter doivent être définies dans chacune des 3 classes. Comment faut-il
déclarer les constructeurs de ces classes ?............................................................................................................................
….......................…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………………………….
…………………………………………………………………………………………………………………………………………….
12. Dans le package ferme.animaux, créer les classes : Cheval, Vache, Chevre, Mouton, Coq, Chien, Lapain,

classe Cheval Vache Chevre Mouton Coq Chien Loup Aigle Lapin
attributs Couleur (java.awt.Color) race race race origine race
Race (String)
13. Ajoutez la classe exécutable Ferme et créez des instances de 2 classes Cheval et Fleur. Affichez les avec la
méthode System.out.println(). Qu’est ce qu’est affiché? Expliquer le résultat en étudiant la classe Object ?
………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………..
……………………………………………………………………………………………………………………………………..
…………………………………………………………………………………………………………………………………………..
…………………………………………………………………………………………………………………………………………..
…………………………………………………………………………………………………………………………………………..
…………………………………………………………………………………………………………………………………………..

14. Redéfinissez la méthode toString() (héritée de Object, voir la documentation) de la super classe pour qu’elle affiche
”Je suis un animal” (ou ”Je suis une plante”). Exécutez la classe Ferme. Quel est le résultat d’affichage de
l’instance cheval
…………………………………………………………………………………………………………………………………………..
…………………………………………………………………………………………………………………………………………..

15. Modifiez la méthode précédente pour qu’elle affiche pour l’instance Cheval(Jawhar, "male", Color.DARK_GRAY)
”Animal : Cheval, Identifiant : Jawhar, Sexe : Male, Couleur : darkGray, Age : xxxx"

II. Polymorphisme simple


16. Avec quels types de références pouvez-vous manipuler les classes précédentes. ?............................................
............................ .................. ................................................................................................................................
............................ .................. ................................................................................................................................
............................ .................. ................................................................................................................................
............................ .................. ................................................................................................................................

17. Dans la méthode main la classe Ferme, créez deux tableaux qui contient les animaux et les plantes crées dans la section
précédente comme des collections (de taille fixe) d’animaux.

18. Afficher ces deux tableaux en utilisant la méthode static toString de la classe java.util.Arrays ? Comment faire pour afficher
instance par ligne ?...................................................................................................................................................................

19. Écrivez une méthode crisAnimaux(Animal[] t) dans la classe Animal qui prend en paramètre un tableau d’animaux et
qui affiche leur référence (Cheval, Vache,…) et leur cri. Testez-la sur le tableau de la question précédente.

20. Supposons que l’on souhaite connaitre le nombre d’animaux et de plantes qui vivent dans la ferme que faut-il ajouter aux
Classes Animal et Plante………………………………………………………………………………………………………………

21. Modifiez la classe Animal pour que l’on garde automatiquement des références (dans un tableau) vers tous les animaux
créés (Vous vérifierez aussi que l’on ne crée pas plus de NB_MAX_ANIMAUX=20). Comment peut-on faire cela ?.....................
.......................................................................................................................................................................................................
.....................................................................................................................................................................................................
.....................................................................................................................................................................................................
22. Faire la même chose avec la classe Plante.

23. Commenter les tableaux de la classe Ferme, vous allez utiliser ceux créer dans les classes Animal et Plantes. Exécuter
votre code pour afficher la description complète de tous les animaux et plantes crées, ensuite les cris de chaque animal.

24. Créer un fichier .jar exécutable de votre projet, exécuter ce jar par la commande : java ferme.jar (optionnelle).

25. Créer un fichier .bat qui permet d’exécuter ce fichier (modifier la variable d’environnement path pour faire connaitre votre
commande .bat (optionnelle).
II. Polymorphisme encore

1. On souhaite maintenant considérer que certains animaux (pas forcément tous) sont des carnivores (ils comportent la
méthode void manger() avec comme paramètre un autre animal) ou des herbivores (ils comportent la méthode void
manger() avec comme paramètre une plante) ou les deux. En général, il y a deux façons pour décrire ces
comportements : utiliser des classes et les faire héritées par les sous classes d’Animal ou de créez deux interfaces et les
faire implantées par les sous classe d’Animal. Quelle est la solution possible en JAVA ? et pour quoi ?
…………………………………………………………………………………………………………………………………….
…………………………………………………………………………………………………………………………………….
…………………………………………………………………………………………………………………………………….
2. Modifiez vos classes pour qu’elles implantent les interfaces IHerbivore et ICarnivore :
 Les carnivores : quand ils mangent, les chiens affichent ”Je mord X”, et les aigles affichent ”Je déchire X”.
 Les herbivores : les vaches affichent ”Je broute X”, et les lapins ”Je grignotte X”.

3. Les hommes sont à les fois carnivores et herbivores, proposez deux solutions pour le représenter :
 Dans un premier temps, sans créer de nouvelle interface (aucune implantation n’est demandée).
…………………………………………………………………………………………………………………………………….

 Dans un second temps en créant une nouvelle interface IOmnivore (aucune implantation n’est demandée).
……………………………………………………………………………………………………………………………………..

4. Le polymorphisme est aussi utilisable avec les interfaces :


 Appliquez la méthode manger(unePlante) sur l’instance de Vache que avez déjà créée en la voyant à travers une
référence de type IHerbivore. comment?
………………………………………………………………………………………………………………………………………
Peut-on appliquer la méthode getVoix() sur cette référence ?……………………………………………………….……
..…………………………………………………………… ……………………………………………………………………
5. Créez deux tableaux lesCarnivores et lesHerbivores pour manipuler les animaux existants. Créez un lapin, et faites le
manger par tous les carnivores, créez une plante et faites la manger par les herbivores.

III. Les entrées/Sorties


6. Enregistrer tous les sorties de votre programme dans un fichier ferme-out.txt ( i.e. rediriger la sortie vers un fichier texte) ?
Comment peut-on faire cela ?....................................................................................................................................................
……………………………………………………………………………………………………………………………………………..
7. Qu’est ce qu’il faut ajouter pour enregistrer les objets de type Animal et Plante dans un fichier sous forme binaire (i.e objet)
et les lire par la suite sous forme d’objet ?...............................................................................................................................
……………………………………………………………………………………………………………………………………………..
…………………………………………………………………………………………………………………………………………….
…………………………………………………………………………………………………………………………………………….
8. Ecrire une méthode static qui permet de charger une ferme à partir d’un fichier texte contenant (table 1 colone1):

Fichier ferme.text Cris de qq animaux

L'aigle glatit, trompette


Animaux:
Le canard cancane, caquette, nasille
Cheval, Jawhar, male, 12, 11, 54, Arabe Le cerf brame, rait, rée
Vache, Sophie, femelle, Holstein Le chameau blatère
Chevre,Chevrolet, femelle, Atlas Le chat miaule, feule, ronronne
Mouton, Masaoud, male , Sardi Le cheval hennit, s'ébroue
La chèvre béguète, bêle, chevrote,
Coq coq, Coki, male, Turc
Le chevreuil brame, rait, rée
Chien, Riks, male, Berger Le chien aboie, jappe, hurle,
Loup, Loupid, male Le coq chante, coquerique
Lapin, Lapin-Angora, male Le moineau piaille, pépie
Aigle, Aigloti, male Le mouton bêle
Le lapin glapit, clapit, couine
Plantes:
Le loup hurle,
Arbre, Pommier, true Le pigeon roucoule, caracoule
Arbre, Caliptuse, false Le pingouin brait
Arbuste, Jasmin de nuit La souris chicote, couine
Fleur, Géranium lierre, Amérique du Sud Le taureau meugle, beugle
Le tigre feule, râle, ronronne, miaule
La vache meugle, beugle, mugit
Faille d’encapsulation et Exception
1. Chaque être vivant de la ferme a un réservoir d’eau. Créer une classe ReservoirDeau qui contient deux attributs entiers
quantite et QUANTITE_MAX et deux méthode augmenter (int nbLitre) et reduire(int nbLitre). La méthode augmenter lève
l’exception OutOfCapacityException, et la méthode reduire lève l’exception NegativeQuantiteException.

2. Ecrire une méthode main dans la classe ReservoirDeau pour la tester (générer les situations d’exceptions).

3. Modifier l’interface EtreVivant en rajoutant les méthodes : void setReservoirDeau(), getReservoireDeau() et void boire().
Sauvegarder et compiler. Qu’est ce que vous remarquez ?.................................................................................................

4. Dans quelles classes faut-il définir le corps de ces méthodes ?..........................................................................................


……………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………
5. Dans la fonction main de la classe ferme créer une instance de la classe Reservoir avec la quantité initiale égale à 4 ;
6. Affectez la référence de cette instance à tous les animaux de la ferme (utiliser setReservoire).
Comment ?...................................................................................................................................................................................
.....................................................................................................................................................................................................
7. Appelez la méthode boire sur tous les animaux. Quel est le résultat ?.......................................................................................
Expliquez?...................................................................................................................................................................................
………………………………………………………………………………………………………………………………………………

Si vous avez déjà fini...


 Vous pouvez garder une copie de votre projet eclipse pour l’étendre la prochaine séance.

Vous aimerez peut-être aussi