Vous êtes sur la page 1sur 2

USTHB Nassim ZELLAL

Faculté d'Informatique POO


Département SIQ L2 ISIL

TP3
Héritage et polymorphisme

Exercice 1 :

Soit les classes suivantes :

1. La classe « Personne », qui comporte trois attributs privés : nom, prenom et anneeNaissance de type
chaîne de caractères. Cette classe comporte un constructeur pour permettre d'initialiser ses attributs.
Elle comporte également une méthode polymorphe « afficher() » pour afficher l’année de naissance
d’une personne. Cette classe possède une autre méthode polymorphe « afficherPersonne », qui
permet d’afficher le nom et le prénom d’une personne.
2. La classe « Employe », qui hérite de la classe « Personne », avec en plus un attribut privé salaire, un
constructeur et la redéfinition de la méthode « afficher() », qui permet d’afficher son salaire.
3. La classe « Societe », qui comporte le nom de la société nomSociete et le nombre d’employés
nbEmploye. Ces deux attributs sont privés.
4. La classe « Directeur », qui hérite de la classe « Employe », avec en plus un attribut societe, un
constructeur et la redéfinition de la méthode « afficher() », qui permet d’afficher les informations de
la société.

Tests :

1. Écrire les classes « Personne », « Employe », « Directeur » et « Societe ». Il est demandé d’écrire
les accesseurs et les mutateurs de ces classes.
2. Écrire la classe « Application_Compte_Bancaire » réduite à une méthode « main » permettant de
tester les classes précédentes, en créant un tableau de 5 personnes comportant 4 employés et un
directeur (5 références de la classe « Personne » dans lesquelles ranger 4 instances de la classe
« Employe » suivies d’une instance de la classe « Directeur »).
3. Afficher l'ensemble des éléments du tableau à l’exception du nom et du prénom, à l'aide de
l’instruction for, en saisissant directement dans le programme Java les données liées aux
personnes. Utiliser ensuite un accesseur pour afficher aussi le nom et le prénom à condition que
l’âge de la personne soit strictement inférieur à 70 ans.
4. Afficher les mêmes informations que le point précédent mais avec un « Scanner ».
5. Écrire la classe « Administrateur » dans un autre package (paquet). Cette classe hérite de la
classe « Personne », avec en plus un attribut type, un constructeur et la redéfinition de la méthode
« afficherPersonne », qui permet d’affiche le type.
6. Que se passe-t-il si on ajoute le mot-clé protected devant la méthode « afficher() » de la classe
« Personne » ? Expliquer ce qui se passe.

Exercice 2 :

Une médiathèque contient différents types de médias. Mais quelque soit le média, celui-ci possède un titre.
Quand un média est créé, son titre est donné à la création et par la suite, il ne change plus.

1. Définir la classe « Media » avec son constructeur public, un attribut titre privé et son accesseur. Que
faut-il rajouter pour interdire les modifications du titre ?
2. Nous voulons attribuer un numéro d’enregistrement unique pour chaque objet « Media ». Ce numéro
est incrémenté à chaque création d’objet i.e. le premier média créé doit avoir le numéro 0, puis ce
numéro s’incrémente de 1 à chaque création de média. Apporter les modifications nécessaires pour
réaliser cela.
1
USTHB Nassim ZELLAL
Faculté d'Informatique POO
Département SIQ L2 ISIL

TP3
Héritage et polymorphisme

3. Ajouter une méthode « getNumero() » renvoyant le numéro d’enregistrement du média. Que faut-il
rajouter pour s’assurer que le numéro d’enregistrement restera non-modifiable ?
4. Définir la méthode « afficher() », qui affiche le numéro d’enregistrement et le titre du média.
5. Définir la méthode « plusPetit(Media doc) », qui vérifie que le numéro d’enregistrement de
l’instance courante est plus petit que celui de doc.

Nous voulons maintenant définir des médias de natures diverses : des livres, des dictionnaires, et, plus tard,
d’autres types de médias (bandes dessinées, dictionnaires bilingues, etc.). À chaque livre sont associés, en
plus, un auteur et un nombre de pages. Les dictionnaires ont, eux, pour attributs supplémentaires une langue
et un nombre de tomes. Nous voudrions pouvoir manipuler tous les articles (livres, dictionnaires, etc.) au
travers de la même représentation : celle de média.

1. Définir les classes « Livre » et « Dictionnaire » étendant la classe « Media ». Définir pour chacune
un constructeur permettant d’initialiser toutes ses variables d’instances respectives.
2. Redéfinir la méthode « afficher() » dans les classes « Livre » et « Dictionnaire », permettant
d’afficher les informations des livres et des dictionnaires.
3. Définir ensuite quelques classes supplémentaires, comme « BandeDessinee », « Manga »,
« DictionnaireBilingue », etc. Chacune ayant des propriétés supplémentaires. Pour chacune de ces
nouvelles classes, quelle classe étend-elle ?
4. Ajouter une classe « Application_Media » pour tester votre code : par exemple, créer successivement
deux livres « Harry Potter » (écrit par J. K. Rowling, comprenant 240 pages) et « Le Trône de fer »
(écrit par G.R.R. Martin, comprenant 789 pages).
5. Afficher ces livres, et s’assurer que le numéro d’enregistrement est le bon.

Nous voulons maintenant définir une médiathèque pour ranger tous nos médias. Compléter la classe
« Application_Media » par le tableau baseDeDonnee. Remplir la baseDeDonnees avec plusieurs médias (de
différents types) puis afficher cette dernière.

Exercice 3 :

Soit les classes suivantes :

1. La classe « Chaine », qui comporte un attribut: chaine_de_caracteres de type chaîne de caractères.


Cette classe comporte un constructeur pour permettre d'initialiser cet attribut. Elle comporte
également une méthode polymorphe « afficher() » permettant d’afficher la chaîne de caractères.
2. La classe « Phrase », qui hérite de la classe « Chaine », avec en plus un attribut langue, un
constructeur et la redéfinition de la méthode « afficher() », qui permet d’afficher la langue (anglaise
ou française) de la phrase. Cette classe possède également la méthode « type() » permettant de
retourner le type de la phrase, qui peut être : déclaratif, interrogatif ou exclamatif. La classe
« Phrase » possède aussi la méthode « longueurMot() » servant à retourner le mot le plus long de la
phrase avec sa longueur. Pour retourner ces deux informations, il est possible d’utiliser la méthode
« split() » appartenant à la classe « String ».
3. La classe « ApplicationChaine » réduite à une méthode « main » permettant de tester les différentes
méthodes des classes précédemment définies, avec plusieurs exemples de phrases anglaises et
françaises.

Vous aimerez peut-être aussi