Вы находитесь на странице: 1из 4

Exercices dintroduction oriente objet en Java : personnes,

enseignants et tudiants
Universit Paris Sud

Prambule
Cette suite dexercices a pour but de passer en revue les notions orientes objet les
plus simples du langage. La rdaction utilise volontairement le vocabulaire ddi. Il est
plus que conseill de vous reporter au notes de cours qui vous ont t distrribues ainsi
qu laide sur les API Java.

Exercice 1

Classe Personne (constructeurs)

Nous allons crer deux classes, lune reprsentant une personne, nomme Personne
et lautre pour contenir le main, nomme PersonneMain.
1. Constructeur exhaustif.
a) Crer la classe nomme PersonneMain, publique (avec le mot cl public devant class), ne comportant pas de champ et comportant une unique mthode
main() de signature
public static void main(String args[])
Au sein de cette mthode, crer, laide de loprateur new une instance dobjet de type Personne (voir la description de la classe Personne ci-dessous)
et appeler sa mthode afficher().
On rappelle quun fichier source java peut contenir au plus une classe publique
et que, si cest le cas, le nom du fichier doit correspondre (y compris les majuscules/minuscules) au nom de la classe publique.
b) Crer une classe, nomme Personne, non publique (sans le mot cl public
devant class), contenant 2 champs :
un champ nom de type String, et
un champ age de type primitif int.
Crer un constructeur exhaustif (c..d. initialisant tous les champs), de signature
Personne(String leNom, int lAge)
initialisant les deux champs de la classe leNom et lAge.
1

Exercices dintroduction oriente objet en Java : personnes, enseignants et tudiants


c) Crer la mthode afficher() de signature
void afficher()
qui affiche le nom et lage au format dcrit ci-aprs. Pour un objet de type
Personne dont la variable dinstance nom vaut "Coupdetrix" et la variable
dinstance age vaut 25, la mthode afficher() affichera lcran :
Nom : Coupdetrix
Age : 25 ans
d) Tester ces classes en excutant PersonneMain.
2. Champ de type tableau ; test de conformit dun constructeur exhaustif.
a) Ajouter un champ la classe Personne, de type tableau de rels
double[] comptes ;
susceptibles de reprsenter les divers soldes des comptes en banque de la personne. Adapter le constructeur exhaustif ainsi que la mthode afficher()
(qui doit afficher, outre le nom et lage de la personne les diffrents lments
du tableau comptes. Crer, au sein de la classe Personne, la mthode void
diviserParDeux(), qui modifie le tableau comptes en divisant chaque lment par deux.
b) Afin de tester que le constructeur exhaustif prcdent est bien conforme
ce quil doit tre, dans la classe PersonneMain, crer deux objets de type
Personne, de mme nom, mme age et partir du mme objet nombres
comportant deux lments. Appeler diviserParDeux() sur le premier des
objets de type Personne. Appeler la mthode afficher() de ces deux objets. Le code utilis sera par exemple le suivant :
int[] mesNombres = new int[2] ;
mesNombres[0] = 100 ;
mesNombres[1] = 92 ;
Personne sage = new Personne("Agecanonix", 80,
mesNombres) ;
Personne sageBis = new Personne("Agecanonix", 80,
mesNombres) ;
sage.diviserParDeux() ;
sage.afficher() ;
sageBis.afficher() ;
Si laffichage est identique pour les deux objets, le prsent constructeur exhaustif, ainsi que celui que vous avez ralis la question prcdente ne sont pas
corrects. Les initialisations des champs nom et nombres doivent alors avoir
t faites avec ce que lon nomme de la copie superficielle (copie des rfrences
uniquement), alors quelles auraient dues tre faites avec de la copie profonde
(copie du contenu des objets). Corriger le constructeur exhaustif si ncessaire.
3. Constructeurs par dfaut et de recopie.
Par souci de simplicit, le champ comptes prcdent ne sera pas conserv. Son seul
but tait de faire prendre conscience de la ncessit des copies profondes au sein des
constructeurs. Nous reprendrons galement le constructeur exhaustif et la mthode
afficher() de la premire question.
a) Au sein de la classe Personne, crer un constructeur par dfaut, de signature
Personne()
appelant le constructeur exhaustif de la question prcdente au moyen du mot
cl this (voir lutilisation de this(...) comme appel de constructeur) et

Exercice 2 Classes Enseignants et tudiants (Hritage)

initialisant respectivement les champs nom et age "Asterix" et 30. Si


lvocation du mot cl this comme appel de constructeur ne vous semble pas
parfaitement claire, reportez vous au polycopi, au chapitre des bases oriente objet de java, section Classes, instance dobjet, hritage, sous section
constructeurs.
b) Crer un constructeur de recopie, de signature
Personne(Personne p)
qui initialise les champs de la classe ceux de p.
c) Modifier la mthode main() de PersonneMain en crant 3 personnes, lune
laide du constructeur exhaustif, une autre avec le constructeur par dfaut
et la dernire avec le contructeur de recopie. Les afficher toutes les trois en
appelant la mthode afficher().

Exercice 2

Classes Enseignants et tudiants (Hritage)

1. Classes Enseignant et Etudiant.


a) Crer une classe Enseignant hritant de Personne et ayant deux champs :
Un champ nbHeuresCours, de type primitif int,
Un champ grincheux, de type primitif boolean.
Crer un constructeur exhaustif appelant le constructeur de la classe mre (celui
de Personne) par super (cet appel doit tre la premire ligne du constructeur
dEnseignant), puis initialisant ses champs propres (nbHeuresCours et
grincheux).
b) Crer de mme une classe Etudiant hritant de Personne et ayant deux
champs :
Un champ noteMoyenne, de type primitif int,
Un champ faineant, de type primitif boolean.
Crer un constructeur exhaustif appelant le constructeur de la classe mre (celui
de Personne) par super (cet appel doit tre la premire ligne du constructeur dEtudiant), puis initialisant ses champs propres (noteMoyenne et
faineant).
c) Crer une classe ProfEleveMain ne comportant pas de champ et comportant
une unique mthode main(). Au sein de cette mthode, crer une instance
dobjet de type Personne, de nom gal "Nimbus" et dage gal 45.
Crer un Enseignant, de mme nom et age, ayant nbHeuresCours gal
50 et grincheux mis true.
Crer un Etudiant de nom "Soupaloigonycrouton", dage gal 20,
ayant 2 comme noteMoyenne et faineant mis true.
Appeler la mthode afficher() (qui est hrite de Personne) de ces trois
instances. On constate que les deux premires instances ont des affichages indistinguables.
2. Diffrentiation par le type.
a) Crer un tableau de 5 lments de type Personne dans la mthode main()
de la classe ProfEleveMain ; initialiser ce tableau avec 2 instances dobjet
de type Enseignant et 3 instances de type Etudiant. Effectuer une boucle
for sur les lments du tableau ; dans le corps de la boucle, effectuer un appel

Exercices dintroduction oriente objet en Java : personnes, enseignants et tudiants


la mthode afficher(), puis afficher sil sagit dun Etudiant ou dun
Enseignant en se servant de loprateur instanceof.

Exercice 3

Diffrents affichages (Surcharge et redfinition)

1. Surcharge de la mthode afficher().


Dans la classe Personne, crer une mthode afficher(), de signature
void afficher(boolean compact)
qui affiche selon lun des formats suivants. Si compact est gal false, laffichage
est le mme que celui de signature void afficher() (la mthode de mme nom
dcrite en question 1c de lExercice 1). Si compact est gal true, laffichage dun
objet de nom gal Coupdetrix et dage gal 25 sera de la forme
[Coupdetrix, 25]
2. Redfinition de la mthode afficher().
Crer, au sein de la classe Enseignant (resp. au sein de la classe Etudiant) une
mthode de signature void afficher() qui appelle la mthode afficher() de
Personne (au moyen de super) puis qui affiche la chane "Enseignant" (resp.
"Etudiant").
3. Modifier la mthode main() de ProfEleveMain labore dans la question prcdente en ne conservant, dans le corps de la boucle for, quun appel la mthode
afficher() sur les cinq lments du tableau.

Exercice 4

Dlgation daffichage (Classes abstraites)

Supposons que la classe Personne fasse partie dune biliothque que vous distribuez et que vous vouliez obliger les programmeurs qui conoivent des classes hritant de
Personne (telles Enseignant et Etudiant) munir ces dernires de certaines mthodes.
1. Rendre la classe Personne abstraite (par le mot cl abstract devant class).
2. Dclarer une mthode abstraite, ne retournant rien (cest--dire void), sans arguments, nomme afficherType().
3. La mthode afficher() de Personne va affectuer laffichage dcrit en question
1c de lExercice 1, puis va faire appel afficherType().
4. Les classes Enseignant et Etudiant hritent de la classe abstraite Personne
et ne sont pas abstraites. Leur constructeur doit donc faire appel la mthode
createPersonne() (puisquil ny a plus de constructeur de Personne).
La mthode afficherType() dans la classe Enseignant (resp. dans la classe
Etudiant) neffectue quune chose : afficher la chane Enseignant (resp. la chane
Etudiant).
5. Adapter les classes Enseignant et Etudiant.
De cette manire, toute classe hritant de Personne doit ncessairement implanter la mthode afficherType(). Laffichage est dlgu aux sous types concrets de Personne.

Вам также может понравиться