• Aucun résultat trouvé

7 H´ eritage et classe abstraite

Exercice 47 – Chien et Mammif`ere (transtypage d’objet)

Rappel de cours : Le cast (conversion de type ou transtypage) consiste `a forcer un changement de type si les types sont compatibles. Pour cela, il suffit de placer le type entre parenth`eses devant l’expression `a convertir.

Q 47.1La m´ethode main suivante est-elle correcte ? Expliquez les erreurs.

1public c l a s s Mammifere { . . . }

2public c l a s s Chien extends Mammifere {

3 public void a b o y e r ( ) { System . o u t . p r i n t l n (" Ouaff ") ; }

Exercice 48 – Figures (m´ethode et classe abstraite) Soit le programme Java constitu´e des classes suivantes :

1public abstract c l a s s Shape {

Q 48.1De quels membres (variables d’instance et m´ethodes) deShapeh´erite la classeCircle? Q 48.2La compilation de la classeCircle´echoue, expliquer pourquoi.

Q 48.3Ajouter une m´ethodesurface()`a la classeCircleet modifier en cons´equence la m´ethodetoString.

Q 48.4Cr´eer une classeRectanglequi h´erite deShape.

Q 48.5Donner le code d’un main qui instancie un tableau de Shape, le remplit avec diff´erents types de forme puis calcule l’aire totale de la figure composite (sans prendre en compte les recouvrements).

Exercice 49 – M´enagerie (tableaux, h´eritage, constructeur)

On veut g´erer une m´enagerie dont les animaux ont chacun un nom (String) et un ˆage (int). Parmi ceux-ci on distingue les animaux `a pattes (variable nbPattes) et les animaux sans pattes. On s’int´eresse uniquement aux vaches, boas, saumons, canards et mille-pattes.

Q 49.1 Etablir graphiquement la hi´erarchie des classes ci-dessus. D´eterminer celles qui peuvent ˆetre d´eclar´ees abs-traites ?

Q 49.2Ecrire la classeAnimalavec deux constructeurs (un prenant en param`etre le nom et l’ˆage, l’autre prenant en param`etre le nom et qui fixe l’ˆage `a 1 an), la m´ethodetoString, une m´ethode vieillir qui fait vieillir l’animal d’une ann´ee, et une m´ethodecrier()qui affichera le cri de l’animal. Peut-on ´ecrire ici le corps de cette m´ethode ?

Q 49.3 Ecrire toutes les sous-classes de la classe Animal en d´efinissant les m´ethodes toString() et les m´ethodes crier()qui affichent le cri de l’animal.

Q 49.4Ecrire une classeMenageriequi g`ere un tableau d’animaux, avec la m´ethodevoid ajouter(Animal a)qui ajoute un animal au tableau, et la m´ethodetoString() qui rend la liste des animaux.

Q 49.5Ajouter une m´ethodevoid midi()qui fait crier tous les animaux de cette m´enagerie.

Q 49.6Ecrire la m´ethodevieillirTous()qui fait vieillir d’un an tous les animaux de cette m´enagerie.

Q 49.7Ecrire la m´ethodemain qui cr´ee une m´enagerie, la remplit d’animaux, les affiche avec leur ˆage, d´eclenche la m´ethodemidi()et les fait vieillir d’un an.

Exercice 50 – Figure2D (Extrait de l’examen de janvier 2009)

On veut ´ecrire les classes correspondant `a la hi´erarchie ci-contre (le niveau d’indentation correspond au niveau de la hi´erarchie) :

Figure (classe abstraite)

|____Figure2D (classe abstraite)

|____Rectangle

|____Carre

|____Ellipse

|___Cercle Ces classes devront respecter les principes suivants :

— Toutes les variables d’instance sont de type double et caract´erisent uniquement la taille des objets, pas leur position.

— Chaque objet sera cr´e´e par un constructeur qui recevra les param`etres n´ecessaires (par exemple la longueur et la largeur d’un rectangle).

— Toutes les instances devront accepter les m´ethodessurface().

— Toutes les instances d’objets de type 2D devront accepter la m´ethodeperimetre().

Rappel sur les ellipses :une ellipse est caract´eris´ee par la longeur a du demi-grand axe et la longueur b du demi-petit axe. Sa surface estπ∗a∗b et son p´erim`etre est 2π

q(a2+b2) 2 .

Rappel : dans la classeMath, il existe la constanteMath.PIet la m´ethodeMath.sqrt() qui retourne la racine carr´ee d’un nombre (voir annexe page55).

Q 50.1Ecrire le diagramme de classe en indiquant les classes abstraites et les m´´ ethodes abstraites. Quelles sont les particularit´es d’une m´ethode abstraite et les cons´equences pour la classe et les classes d´eriv´ees ?

Q 50.2Donner pour chacune des classes, en utilisant correctement les notions d’h´eritage et de classe abstraite :

— la d´efinition de la classe,

page 30 7. H´eritage et classe abstraite

— la d´eclaration des variables d’instance,

— le constructeur,

— les m´ethodes de la classe.

Q 50.3 Ecrire une m´´ ethodemain dans une classe TestFigure qui stocke dans un tableau un objet de chacun des types pr´ec´edemment cr´e´es, puis qui affiche la surface et le p´erim`etre de chaque objet du tableau. Aide : quel doit ˆetre le type du tableau ?

Exercice 51 – Retro engineering

Soit le programme principal suivant permettant d’effectuer des op´erations math´ematiques tr`es simples dans un nou-vel univers objet. Comme le pr´ecise le main suivant, une expression est soit une valeur r´eelle, soit une op´eration math´ematique. Pour ne pas complexifier la situation, nous n’envisageons que des op´erations r´eelles (sur desdouble).

1public s t a t i c void main ( S t r i n g a r g s [ ] ){

2 E x p r e s s i o n v1=new V a l e u r ( 4 . ) ;

3 E x p r e s s i o n v2=new V a l e u r ( 1 . ) ;

4 E x p r e s s i o n v3=new V a l e u r ( 7 . ) ;

5 E x p r e s s i o n v4=new V a l e u r ( 5 . ) ;

6 E x p r e s s i o n v5=new V a l e u r ( 3 . ) ;

7 E x p r e s s i o n v6=v5 ;

8 O p e r a t i o n p1=new P l u s ( v1 , v2 ) ;

9 O p e r a t i o n m2=new Moins ( v3 , v4 ) ;

10 O p e r a t i o n mult=new M u l t i p l i e ( p1 , v5 ) ;

11 O p e r a t i o n p2=new P l u s ( v6 , mult ) ;

12 O p e r a t i o n d=new D i v i s e ( p2 , m2) ;

13 System . o u t . p r i n t l n ( d+" = "+d . g e t V a l ( ) ) ;

14}

Q 51.1Donner la hi´erarchie des classes (avec lessignatures de m´ethodes abstraites et concr`etes et la signature du constructeur lorsqu’il est n´ecessaire) `a d´efinir pour que ce programme puisse compiler et s’ex´ecuter.

Attention :on veut que la derni`ere ligne du mainaffiche le calcul `a effectuer dans le d´etail (cf question suivante) Q 51.2 La hi´erarchie de classes propos´ee d´efinit une expression arithm´etique qui peut ˆetre ´evalu´ee pour donner un r´esultat (m´ethode getVal()). Donner l’expression arithm´etique (avec parenth`eses) correspondant `a l’objet ddu programme donn´e ci-dessus.

Q 51.3Donner le code des classes n´ecessaires pour que le programme s’ex´ecute et affiche la formule ´evalu´ee et son r´esultat en ligne 13 (le code des classes Plus, Moins, Multiplie et Divise ´etant tr`es proche, on ne donnera le code que de Divise).

Q 51.4Donner le diagramme de l’´etat de la m´emoire `a la fin du programme (ligne 13).

Q 51.5 On souhaite maintenant pouvoir modifier l’attribut d’un objet Valeur. On ajoute alors la fonction void setVal(double v)`a la classeValeurqui fixe `a vl’attribut de la classe. Soit la ligne de code suivante :

1v6 . s e t V a l e u r ( 4 ) ;

En l’´etat, le programme ne compile pas. Pourquoi ? Donner deux mani`eres de rem´edier au probl`eme. Discuter bri`evement des avantages / inconv´enients de ces deux mani`eres de faire.

Q 51.6Quel probl`eme survient dans l’ex´ecution du programme si l’on remplace la ligne 5 par :

1E x p r e s s i o n v4=new V a l e u r ( 7 ) ;

Q 51.7Dire comment y rem´edier pour que le programme affiche le message d’erreur appropri´e et ´evite un arrˆet brutal du programme. D´ecrire bri`evement les m´ethodes `a modifier et les ´eventuelles classes `a cr´eer.

Q 51.8 En voyant une expression comme un arbre, on souhaite d´evelopper une m´ethode simplifie(int profondeur)permettant la simplification d’une expression `a partir d’une profondeur donn´ee, avec profondeurun entier sup´erieur `a 0. Lorsque la profondeur d´esir´ee est atteinte, cette simplification consiste `a remplacer l’expression concern´ee par un objet Valeur de valeur ´equivalente. Par exemple, l’objet Expres-sion dont la formule est ((((1 + 2)∗3)∗4) + (5 + 1)) se simplifie en

Exercice 52 – final : les diff´erentes utilisations Q 52.1Questions de cours

Q 52.1.1A quoi sert un attributfinal? O`u peut-il ˆetre initialis´e ? Citer des cas d’utilisation.

Q 52.1.2Dans quel cas d´eclarer une m´ethode commefinal? Q 52.1.3Dans quel cas d´eclarer une classe commefinal?

Q 52.1.4Etant donn´e les usages r´epertori´es ci-dessus, `a quoi sert le mot cl´efinalen g´en´eral ?

Q 52.2.1Au niveau des attributs, serait-il int´eressant d’ajouter le modifierfinalsur certains champs ? Pourquoi ? Q 52.2.2 A quelle condition pourrait-on mettrexet yen modefinal? Proposer une solution pour conserver les fonctionnalit´es de la classe.

Q 52.2.3Quelles fonctions pourraient ˆetrefinal? Quel serait l’int´erˆet de la manipulation ?

Q 52.2.4Quel serait l’int´erˆet de d´eclarer la classefinal? Cela empˆeche-t-il tout enrichissement futur ?

Q 52.2.5 Proposer un code pour la classePointNomme (point ayant un attributnom) apr`es avoir d´eclar´e Point en final.

Quizz 12 – Classe et m´ ethode abstraite

QZ 12.1Les instructions suivantes sont-elles correctes ? Expliquez.

1public abstract c l a s s Z {}

page 32 8. H´eritage et interface QZ 12.2Les instructions suivantes sont-elles correctes ? Expliquez chaque erreur.

1public c l a s s Z {

2 public abstract void f ( ) ;

3 public abstract void g ( ) { } ;

4 public void h ( ) ;

5}

QZ 12.3Les instructions suivantes sont-elles correctes ? Expliquez et proposez deux solutions.

1public abstract c l a s s A {

2 public abstract void f ( ) ;

3}

4public c l a s s B extends A {}

Quizz 13 – Vocabulaire sur l’h´ eritage

En utilisant quelques verbes de l’ensemble ci-apr`es, ´ecrire trois courtes phrases caract´erisant l’h´eritage : impl´ementer, instancier, importer, r´eemployer, ajouter, encapsuler, ´etendre, sp´ecifier, red´efinir.

L’h´eritage permet de : ...

Documents relatifs