:: Enseignements :: Master :: M1 :: 2008-2009 :: Stage Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
Héritage, sous-typage et polymorphisme
|
Exercice 1 - La classe Parking megabien!!
-
Écrire une méthode
getLocation
qui prend en paramètre un numéro d'immatriculation et
qui retourne le numéro de place occupée par la voiture
ou -1 si elle n'existe pas.
-
Écrire une méthode
remove
qui prend en paramètre un numéro d'immatriculation et
qui retire du parking la voiture trouvée. La méthode
retourne l'objet
Car
récupéré ou
null
si la voiture n'est pas dans le parking.
Quelle exception doit lever cette méthode ?
Attention : cette méthode ne doit lèver que les
exceptions qui sont logiques.
-
Déclarer une super-classe aux exceptions levées par les
méthodes du parking. Quel est l'intérêt d'une telle
exception pour la méthode
remove
?
-
Réorganiser votre code pour éviter de devoir attraper
les exceptions qui ne peuvent être levées.
-
Quelle est la complexité de l'implantation de
getLocation
que vous avez fournie ?
Exercice 2 - Point
public class Point {
public Point(int x,int y) {
this.x=x;
this.y=y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override public String toString() {
return "("+x+','+y+')';
}
private final int x;
private final int y;
}
-
Pourquoi la méthode toString()
utilise l'annotation @Override ?
-
On souhaite ajouter une méthode translate
permettant de translater un point.
Discuter des choix d'implantations et de leurs influences
sur la signature de la méthode translate.
-
Sachant que l'on choisi l'implantation rendant le Point
mutable. Ecrire le code de la méthode translate
Vous écrirez le code de test de translate dans un
main dans une classe séparée
(disons Main).
Exercice 3 - Circle
Pour tout l'exercise, pour vos tests, vous écrirez votre
code dans la classe
Main vue précédemment.
Ecrire une classe
Circle, un cercle étant défini
par un point correspondant au centre et un rayon.
-
Ecrire le constructeur du Circle.
-
Ecrire la méthode toString qui affiche le centre et
le rayon. N'oublier pas ce qu'il ne faut pas oublier.
-
Ecrire la méthode translate(int dx,int dy) qui
translate le cercle.
-
Qu'affiche le code suivant :
Point p=new Point(1,2);
Circle c=new Circle(p,1);
Circle c2=new Circle(p,2);
c2.translate(1,1);
System.out.println(c+" "+c2);
Que doit-on faire pour que cela n'arrive pas ?
-
Quel est le problème avec l'accesseur getCenter() codé de la
façon suivante :
public Point getCenter() {
return center;
}
Que doit-on faire pour que le code soit correct ?
-
Ecrire la méthode equals() qui renvoie vrai si deux cercles
ont le même centre et le même rayon.
-
Ecrire la méthode surface() qui renvoie
la surface du disque.
Modifier la méthode toString pour quelle affiche aussi
la surface.
-
Ecrire la méthode contains() qui renvoie vrai si un point est
contenu dans un cercle.
-
Ecrire la méthode contains(Point p, Circle... circles) qui renvoie
vrai si un point est contenu dans un des cercles.
Exercice 4 - One Ring for ...
Le but de cet exercise est de construire un anneau comme
étant un cercle dont on a évidé une zone circulaire définie
par son rayon interne.
Pour tout l'exercise, pour vos tests, réutiliser la
classe
Main vu précédemment.
-
Rappeler dans un premier temps, dans quel cas il est judicieux
de faire de l'héritage.
-
Ecrire la classe Ring qui hérite de la
classe Circle.
-
Ecrire un constructeur de la classe Ring prenant
en paramètre, un centre, un rayon et un rayon interne.
Faites attention à ce que le rayon interne soit inférieur
au rayon de l'anneau.
Note: Tous les champs doivent être privés.
-
Ecrire la méthode equals() qui test l'égalité
de deux anneaux.
-
On souhaite afficher un anneau
(centre, rayon, surface, rayon interne).
Quel est le problème avec le code suivant :
Ring r=...
System.out.println(r);
Que doit-on faire pour le corriger ?
Ensuite,
-
Implanter une méthode contains(Point)
en évitant d'allouer des objets ou de dupliquer du code.
PS: il existe deux solutions dont une plus élégante que l'autre.
-
Ecrire la méthode contains(Point p, Ring... rings)
qui renvoie vrai si un point est contenu dans un des anneaux.
© Université de Marne-la-Vallée