HÉRITAGE ET POLYMORPHYSME Canard

Transcription

HÉRITAGE ET POLYMORPHYSME Canard
HÉRITAGE ET POLYMORPHYSME
Exercice #1 : Construire les classes selon les données du PowerPoint « Héritage » et
programmer l’application
Exercice #2 : Faire les modifications suivantes :
Classe Animal :
¾ Ajouter un message dans la méthode crier() : Je ne sais pas crier
¾ Fournir une méthode d’accès pour l’attribut vivant
Classe Oiseau :
¾ Ajouter 2 attributs : plumage, type String, accès protégé
dimension, type entier, accès privé
¾ Fournir une méthode d’accès pour chacun de ces attributs
Ajouter la classe Canard à la hiérarchie de classes élaborée précédemment.
Classe Canard :
¾ Élaborer cette nouvelle classe qui hérite de la classe Oiseau
¾ Diagramme de cette classe :
Canard
# type
: String
+ getType()
+ crier()
+ afficher()
: String
: void
: void
La méthode crier() redéfinit la méthode de la superclasse (Coin!Coin! est le cri d’un canard).
La méthode afficher () affiche à l’écran tous les attributs du canard incluant le cri.
Le constructeur affiche : Je suis un canard de type X. J'ai le plumage X
¾
L’application test devra donner comme sortie :
Résultat du programme test:
Résultat du programme test – suite
Un animal de 3 an(s) vient d’être créé
C’est un anniversaire! L’animal a maintenant 4 an(s).
Je ne sais pas crier
Afficher par la méthode “afficher” de la classe Canard
type : roux
plumage : jaune
dimension : 25 cm
Coin! Coin!
Cet animal est mort…
Un animal de 2 an(s) vient d’être créé
Je suis un oiseau!
C’est un anniversaire! L’animal a maintenant 3 an(s).
C’est un anniversaire! L’animal a maintenant 4 an(s).
Cui! Cui!
Cet animal est mort…
Afficher en utilisant les accesseurs
type : roux
plumage : jaune
dimension : 25 cm
Je ne peux plus crier, je suis mort
Un animal de 1 an(s) vient d’être créé
Je suis un oiseau!
Je suis un canard de type roux
J’ai le plumage jaune
C’est un anniversaire! L’animal a maintenant 2 an(s).
Exercices-héritage.doc
Programmation par objets – Mars 2006
Page 1
HÉRITAGE ET POLYMORPHYSME
Exercice #3 – Utiliser le dernier exercice (Animal – Oiseau – Canard)
¾
Méthode toString()
o D’où vient et que fait la méthode toString()?
Vérifier avec les instructions suivantes :
System.out.println(monCanard); appel implicite à la méthode toString()
System.out.println(monOiseau);
System.out.println(monAnimal);
o Redéfinir la méthode toString() dans la classe Oiseau de sorte qu’elle retourne une chaîne
contenant les attributs de la Classe – reprendre l’exécution des 3 instructions ci-dessus.
o Ajouter la méthode toString() dans la classe Canard en faisant appel à la méthode toString
de la classe Oiseau (super.toStrin()). - reprendre l’exécution des 3 instructions ci-dessus.
Ajouter des finaliseurs (méthode finalize) aux 3 classes de la hiérarchie.
Exemple pour la classe Oiseau :
protected void finalize() {
System.out.println("Fin de l'oiseau");
super.finalize();
}
Pourquoi utiliser protected comme accès à la méthode? …
¾
Pour vérifier l’appel des finaliseurs, ajouter à la fin de votre application-test les instructions suivantes :
monAnimal = null;
monOiseau = null;
monCanard = null;
Que signifient ces instructions?
System.gc();
¾
Est-il possible d’écrire
monCanard = monOiseau;
monCanard.crier();
monAnimal = monOiseau;
monAnimal.crier();
monOiseau.crier();
¾
Fonction instanceof
Permet de vérifier la classe dont un objet est l’instance :
Exemple : if (monOiseau instanceof Canard) {
monCanard = (Canard) monOiseau; // types incompatibles,transtypage
monCanard.crier();
}
else
System.out.println("\nPas d'affectation possible");
Prévenir l’erreur ci-dessus en ajoutant cette instruction.
¾
À partir de la classe Point de Deitel, écrire la classe Carre dérivée de Point et la classe Cube dérivée
de Carre. (Le carré a un périmètre et une aire) Le cube a un volume et une aire. (En référence voir
Deitel p. 465 Section 9.9)
Exercices-héritage.doc
Programmation par objets – Mars 2006
Page 2
HÉRITAGE ET POLYMORPHYSME
Attention : Exercices des pages 1 et 2 : à remettre mercredi le 22 mars
Polymorphisme (à lire : p. 472 – 486)
Exercice #4 – Classes « final » (p. 474)
¾
Ajouter la classe Bécasseau. Le bécasseau est un oiseau. La classe Bécasseau est composée des mêmes
attributs et méthodes que la classe Canard. Le cri du bécasseau cri est « tiou tiou ».
Déclarer cette classe final. Quelle en sera la conséquence?
Exercice #5
¾
Dessiner le diagramme de classes de la hiérarchie Animal.
Exercice #6 - Tableaux d’objets (p. 492)
¾
Créer une application test qui utilisera un tableau d’objets. ce tableau sera composé d’animaux,
d’oiseaux, de canards et de bécasseaux.
¾
Le tableau est de classe Animal. (supposer 5 animaux pour les fins de l’exercice).
¾
Pour créer le tableau, choisir la classe à instancier, lire les caractéristiques et instancier.
¾
Faire ensuite afficher le contenu du tableau c’est-à-dire les attributs de chacun des objets.
Exercice #7 – Superclasses abstraites (p.474)
¾
Transformer la classe Animal en classe abstraite
¾
L’application fonctionne-t-elle encore? Pourquoi?
¾
Faire les modifications nécessaires.
¾
Transformer la méthode crier() de la classe Animal en méthode abstraite. Cela a-t-il des conséquences
pour l’application?
¾
Transformer la méthode crier() de la classe Oiseau en méthode abstraite. Cela a-t-il des conséquences
pour l’application? Modifier l’application en fonction de cette dernière modification.
À remettre lundi 27 mars
Exercices-héritage.doc
Programmation par objets – Mars 2006
Page 3

Documents pareils