Exercice 42 – H´eritage et mod´elisation
Dessiner le diagramme de classes correspondant aux probl`emes suivants.
1. Une voiture est un v´ehicule qui contient 4 roues
2. Les v´elos, voitures et camions sont des v´ehicules roulants, tandis qu’un char d’assaut est un v´ehicule `a chenille 3. Un cartable contient des fournitures (trousses, stylos....). Une trousse peut contenir des stylos.
4. Les animaux (renard, li`evre...) d’une forˆet sont soit herbivores, soit carnivores.
Exercice 43 – Personne (h´eritage)
Soient les classesPersonneetEtudiantsuivantes :
1public c l a s s P e r s o n n e {
Q 43.1On ajoute dans la classeEtudiant, les m´ethodes suivantes. Pour chaque instruction de ces m´ethodes, indiquez si l’instruction compile ou pas. Justifiez par un mot.
1 public void a f f i c h e r I n f o ( ) {
Q 43.2Un salari´e a un salaire. ´Ecrire la classeSalariequi h´erite dePersonneet qui poss`ede un constructeur ayant comme param`etre le nom et le salaire, et qui poss`ede un accesseur pour le salaire.
Q 43.3Ecrire une m´ethodeprime() qui retourne le montant de la prime accord´ee pour les enfants, `a savoir 5% du salaire par enfant. Dans quelle classe mettre cette m´ethode ?
Q 43.4 Ecrire une m´ethode modifierNumTel(String numTel) qui permet de modifier le num´ero de t´el´ephone de l’employ´e, et qui affiche, par exemple, pour l’employ´eAlbert :"Le salari´e Albert a pour num´ero 012345678".
Q 43.5Trouver et expliquer les erreurs dans la m´ethodemainci-dessous :
page 26 6. H´eritage et mod´elisation
1public c l a s s T e s t P e r s o n n e {
2 public s t a t i c void main ( S t r i n g [ ] a r g s ) {
3 P e r s o n n e p = new P e r s o n n e (" Albert ") ;
4 p . a j o u t e r E n f a n t ( ) ;
5 p . prime ( ) ;
6 p . estEnL2 ( ) ;
7
8 E t u d i a n t e = new E t u d i a n t (" Ahmed ",null," L2 ") ;
9 e . a j o u t e r E n f a n t ( ) ;
10 e . prime ( ) ;
11 e . estEnL2 ( ) ;
12
13 S a l a r i e s 1 = new S a l a r i e (" Amelle ") ;
14 S a l a r i e s 2 = new S a l a r i e (" Pauline "," 0 122 334 455 ") ;
15 S a l a r i e s 3 = new S a l a r i e (" Yves "," 0 123 401 234 ", 2 0 0 0 ) ;
16 }
17}
Exercice 44 – Botanique (h´eritage et red´efinition de m´ethodes)
Q 44.1Dessiner l’arbre d’h´eritage et dire ce qu’affiche le programme suivant :
1public c l a s s P l a n t e {
2 public S t r i n g t o S t r i n g ( ) { return " Je suis une Plante "; }
3 }
4public c l a s s Arbre extends P l a n t e { }
5public c l a s s F l e u r extends P l a n t e {
6 public S t r i n g t o S t r i n g ( ) { return " Je suis une Fleur "; }
7}
8public c l a s s M a r g u e r i t e extends F l e u r {
9 public S t r i n g t o S t r i n g ( ) { return " Je suis une Ma rgu eri te "; }
10}
11public c l a s s Chene extends Arbre { }
12public c l a s s Rose extends F l e u r { }
13public c l a s s MainPlante {
14 public s t a t i c void main ( S t r i n g [ ] a r g s ) {
15 P l a n t e p = new P l a n t e ( ) ; System . o u t . p r i n t l n ( p ) ;
16 Arbre a = new Arbre ( ) ; System . o u t . p r i n t l n ( a ) ;
17 F l e u r f = new F l e u r ( ) ; System . o u t . p r i n t l n ( f ) ;
18 M a r g u e r i t e m = new M a r g u e r i t e ( ) ; System . o u t . p r i n t l n (m) ;
19 Chene c = new Chene ( ) ; System . o u t . p r i n t l n ( c ) ;
20 Rose r = new Rose ( ) ; System . o u t . p r i n t l n ( r ) ;
21 }
22}
Q 44.2En tirer des conclusions sur l’h´eritage et la red´efinition de m´ethode.
Q 44.3Qu’affiche le programme suivant ? Rappel : le corps de m´ethode appel´e est celui de l’objet, et non pas celui du type de la variable qui r´ef´erence l’objet.
1 P l a n t e p2 = new Arbre ( ) ; System . o u t . p r i n t l n ( p2 ) ;
2 P l a n t e p3 = new F l e u r ( ) ; System . o u t . p r i n t l n ( p3 ) ;
3 P l a n t e p4 = new M a r g u e r i t e ( ) ; System . o u t . p r i n t l n ( p4 ) ;
4 P l a n t e p5 = new Rose ( ) ; System . o u t . p r i n t l n ( p5 ) ;
5 P l a n t e p6 = new Chene ( ) ; System . o u t . p r i n t l n ( p6 ) ;
Exercice 45 – Orchestre
On souhaite mod´eliser le d´eroulement d’un orchestre. Un orchestre est compos´e d’un ensemble d’instruments. On instanciera des guitares, pianos, trompettes.
Q 45.1Dessiner le diagramme de classes.
Q 45.2Ecrire une classe´ Instrument contenant deux variables d’instance de type double pour stocker le poids et le prix de l’instrument, respectivement. Munir la classe d’un constructeur `a deux param`etres pour initialiser les variables d’instance, ainsi que de la m´ethode toString(). Quelle est la particularit´e de la m´ethode toString() d’un point de vue de l’h´eritage ?
Q 45.3Ecrire les classes´ Piano,Guitare, Trompette. Ces classes comporteront une m´ethodejouer()qui affichera, par exemple pourGuitare:"La guitare joue".
Q 45.4Un orchestre sera compos´e d’un tableau d’instruments. ´Ecrire la classeOrchestrecorrespondante, contenant une variable pour stocker le nombre d’instruments courant. ´Ecrire une m´ethodeajouterInstrument(Instrument i) qui ajoute un instrument `a l’orchestre lorque ceci est possible.
Q 45.5Ajouter `a la classe Orchestreune m´ethodejouer() qui fait jouer l’ensemble des intruments le constituant.
Quel est le probl`eme dans le code actuel et comment rem´edier `a ce probl`eme ?
Q 45.6Ecrire une classe´ TestOrchestreavec la m´ethodemain()qui cr´eer un orchestre compos´e d’une guitare, d’un piano et d’une trompette, et fait jouer cet orchestre. Comment faire ´evoluer le code pour ajouter un nouvel instrument (e.g.batterie) ?
Exercice 46 – V´ehicules `a moteurs
On consid`ere un parc de v´ehicules. Chacun a un num´ero d’identification (attribu´e automatiquement `a l’aide d’un compteur statique) et une distance parcourue (initialis´ee `a 0). Parmi eux on distingue les v´ehicules `a moteurs qui ont une capacit´e de r´eservoir et un niveau d’essence (initialis´e `a 0) et les v´ehicules sans moteur qui n’ont pas de caract´eristique suppl´ementaire. Les v´elos ont un nombre de vitesses, les voitures ont un nombre de places, et les camions ont un volume transport´e.
Q 46.1: Construire le graphe hi´erarchique des classes d´ecrites ci-dessus.
Q 46.2Ecrire le code java des classesVehicule,AMoteur, et SansMoteur avec tous les constructeurs n´ecessaires et les m´ethodestoString().
Q 46.3Ecrire une m´ethoderouler(double distance)qui fait avancer un v´ehicule. A quel niveau de la hi´erarchie faut-il l’´ecrire ?
Q 46.4Ecrire les m´ethodes void approvisionner(double nbLitres), et boolean enPanne() (en panne s’il n’y a plus d’essence). A quel niveau de la hi´erarchie faut-il les ´ecrire ?
Q 46.5Ecrire la classe Velo avec consructeur et m´ethodetoString() et une m´ethode void transporter(String depart, String arrivee)qui affiche par exemple"le v´elo n°2 a roul´e de Dijon `a Ch^alon".
Q 46.6Dans la m´ethodemaind’une classeTestVehicule. Cr´eez un v´elo, et testez les m´ethodes de la classeV´elo.
Q 46.7Ecrire la classeVoitureavec constructeur et m´ethodetoString() et une m´ethodevoid transporter(int n, int km) qui affiche par exemple "la voiture n°3 a transport´e 5 personnes sur 200 km" ou bien "plus d’essence!"suivant les cas.
Q 46.8 : Ecrire la classe Camion avec constructeur, la m´ethode toString() et une m´ethode void transporter(String materiau, int km)qui affiche par exemple ”plus d’essence !” ou bien ”le camion n°4 a trans-port´e des tuiles sur 500 km”.
Q 46.9Peut-on factoriser la d´eclaration de la m´ethode transporter, et si oui, `a quel niveau ?
page 28 7. H´eritage et classe abstraite