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