• Aucun résultat trouvé

6 H´ eritage et mod´ elisation

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

Documents relatifs