Vous êtes sur la page 1sur 2

Université El-Manar class Test Cas {

Faculté des Sciences de Tunis public static void main (String [] args)
{/* un point est défini par ses coordonnées x et y */
Module : Programmation Orientée Objet Point p = new Point(2.0,2.0) ;
TD : Héritage et Polymorphisme System.out.println(« Point -> »+p) ;
Exercice 1 :
class A { /* un cercle est défini par ses coordonnées x et y de son centre et par son rayon*/
A() {System.out.println("bonjour de A");} Cercle c = new Cercle(2.0,2.0,3.0) ;
} System.out.println(« Cercle -> »+c + « , surface : + »+c.surface()) ;
class B extends A {
boolean verite;
int valeur;
/* un cylindre est défini par ses coordonnées x et y de son centre, par son rayon et par sa
B() { System.out.println("constructeur B()"); } hauteur*/
B(int valeur) { Cylindre cc = new Cylindre(2.0,2.0,3.0,10.0) ;
this(); System.out.println(« Cylindre -> »+cc+ « , surface : + »+cc.surface()) ;
this.valeur = valeur; }}
System.out.println("constructeur B(int)"); N.B. : La surface d’un cylindre est égale à 2* surface d’un cercle +2*3.14*rayon*hauteur .
}
B(boolean verite) { Exercice 3 :
this.verite = verite; Ecrire les classes nécessaires au fonctionnement du programme suivant, en ne
System.out.println("constructeur B(boolean)"); fournissant que les méthodes nécessaires à ce fonctionnement :
}
B(boolean verite, int valeur) {
class TestMetiers {
this(valeur); {public static void main (String [] args)
this.verite = verite; { Personne[] personnes= new Personne[4] ;
System.out.println("constructeur B(boolean, int)"); personnes[0]= new Personne (« Salah ») ;
}
public String toString() {
personnes[1]= new Forgeron(« Ali ») ;
return "B : (" + verite + ", " + valeur +")\n"; personnes[2]= new Meunuisier(« Mohamed ») ;
} personnes[3]=new Forgeron(« Nabil ») ;
} for (int i=0 ;personnes.length ;i++)
public class EssaiConstructeurs { personnes[i].affiche();
public static void main(String[] argv) {
B b = new B(true); }}
System.out.println(b); La sortie du programme :
b = new B(false, 5); Je suis Salah
System.out.println(b);
}
Je suis Ali le Forgeron
} Je suis Mohamed le Meunuisier
1. Donner les messages affichés par la méthode main() Je suis Nabil le Forgeron
Exercice 2 :
Compléter les clas ses suivantes : pour que la classe TestCas fonctionne Exercice 4 :
correctement. 1. Ecrivez une classe Figure. Cette classe a des attributs privés abscisse et
class Point {//…} ordonnée, ainsi qu’une couleur. Les couleurs seront représentées par des objets de
class Cercle extends Point {…} la classe java.awt.Color. Le constructeur de la classe instanciera chaque attribut
class Cylindre extends Cercle {…} privé. Des méthodes publiques permettront d’accéder aux valeurs de ces attributs.
1
Vous regarderez la documentation de la classe java.awt.Color pour choisir la 1. Décrivez les relations d’héritage entre les classes du programme sous la forme
constante correspondant à votre couleur préférée pour faire un test de votre classe d’un diagramme.
2. Ecrivez deux classes Cercle et Rectangle qui héritent de Figure. Cercle a un 2. Donnez une solution possible pour l’implémentation de ces classes, en justifiant
attribut rayon et Rectangle a des attributs hauteur et longueur. les responsabilités de chaque classe (quels sont leurs attributs, leurs méthodes).
3. Ajoutez à Figure une variable de classe privée Vector qui devra référencer toutes 3. Certaines classes gagneraient à être abstraites. Lesquelles et pourquoi ?
les instances de sa classe et de ses sous classes. Comment allez-vous remplir ce
vecteur ? Vous définirez également une méthode publique getInstances() qui Exercice 6 : Bibliothèque
permettra d’accéder à ce vecteur.
4. Cercle et Rectangle redéfinissent cette méthode getInstances() de manière à ne On veut modéliser la gestion d'une bibliothèque : on définira un certain nombre de
récupérer que les instances qui correspondent à leur type. Il n’est pas nécessaire classes : Main, Ouvrage, BiblioTab, Bibliotheque, Periodique, CD, Livre. Les
d’ajouter un attribut à ces classes ou de modifier leur constructeur. livres auront comme propriétés : auteur, titre, éditeur ; les périodiques : nom,
numéro, périodicité ; les CDs : titre, auteur. De plus tous les ouvrages auront une
Exercice 5 Terminator date d'emprunt (potentiellement nulle), une cote (le numéro par ordre de création).
Un Terminator est une machine programmée pour tuer. Il a donc un numéro de On implémentera également sur chaque objet une méthode toString() renvoyant
série, il est capable de se présenter, et est capable de ”terminer” sa cible. Il y a toutes les informations sur l'ouvrage sous forme d'une chaîne de caractères.
deux grandes familles de Terminators : les T800 et les métamorphes. Les T800 La classe BiblioTab permettra de stocker dans une structure les livres (ajout et
sont le modèle standard, se ressemblent tous, et peuvent être gentils ou méchants suppression, la suppression prenant en argument la cote de l'ouvrage). Elle aura
selon leur programmation. Les métamorphes, eux, sont capables d’emprunter également une méthode toString() affichant le nombres d'ouvrages, puis chaque
l’apparence d’un être humain. Il y a deux sortes de métamorphes, les T1000 et les ouvrage successivement. La classe Bibliotheque sera simplement une version
TX. Le TX a comme particularité de pouvoir reprogrammer un terminator T800 abstraite déclarant les mêmes méthodes que BiblioTab mais sans les implémenter.
pour le rendre méchant. Nous allons créer les classes Terminator, T800, BiblioTab héritera de Bibliotheque.
Metamorphe, TX et T1000 permettant de représenter des terminators selon les La classe TestBibliotheque ne contiendra que la méthode main et testera la
spécifications suivantes : bibliothèque en y insérant et supprimant quelques ouvrages, puis en affichant le
– Tous les terminators ont un numéro de série donné à la construction, ils contenu de la bibliothèque.
sont capables de se présenter, en écrivant sur la console : « Je suis un 1. Représentez les différentes classes dans un graphe d'héritage. On mettra en
terminator et mon numéro de série est .... » évidence pour chaque classe les méthodes et les champs qu'elle définit, redéfinit ou
– Tous les terminators peuvent terminer un humain ou un autre terminator. hérite. On souhaite que tous les champs soient déclarés privés et que l'on puisse y
Dans ce cas, ils écrivent sur la console : « Vous êtes terminé ». Sauf les accéder de l'extérieur que par des méthodes.
T800 gentils qui disent plutôt : Hasta la vista Baby. 2. Implémentez les classes ci-dessus. Pour la classe BiblioTab on utilisera un
– Les T800 ont une caractéristique, ils peuvent être gentils ou méchants (un tableau de longueur suffisante (on vérifiera quand même à chaque opération
attribut booléen). Lors de leur construction, ils sont gentils. d'insertion que l'on ne dépasse pas les bornes du tableau). Quel sont les
– Les Métamorphes ont une caractéristique, ils peuvent prendre l’apparence inconvénients de cette méthode ?
d’une personne (un attribut chaîne de caractère). Lors de leur construction, Dans ce qui suit, on veut implémenter une deuxième version de la bibliothèque,
ils ne ressemblent à personne en particulier, mais ils sont capables de se que l'on appellera BiblioList et qui héritera également de Bibliotheque. Cette
métamorphoser, et de se décrire en imprimant sur la console leur nouvelle implémentation utilisera la classe LinkedList définie dans l'API Java
apparence actuelle. standard.
– Le TX est un métamorphe qui au départ a toujours l’apparence d’une jolie 1. Modifiez le minimum de choses dans la classe TestBibliotheque pour permettre
blonde, et qui peut reprogrammer des T800 : quel que soit leur alignement, l'utilisation de BiblioList.
un T800 reprogrammé devient méchant.
2

Vous aimerez peut-être aussi