TD 3 java heritage

Transcription

TD 3 java heritage
TD Programmation par objets - Java, LPATC
Enseignant resp : BOURAOUI Bessem
TD 2 : Java, La classe !
Exercice 1:
// Shape.java
public class Shape {
double x, y ;
public Shape() {
x = 0 ; y = 0 ;
}
public Shape(double x, double y) {
this.x = x ; this.y = y ;
}
public String toString() {
return "Position : (" + x + "," + y + ")" ;
}
}
// Circle.java
public class Circle
extends Shape {
final static double PI = 3.141592564 ;
private double radius ;
public Circle() {
radius = 0 ;
}
public Circle(double x, double y, double r) {
super(x,y) ;
radius = r ;
}
}
public String toString() {
return super.toString() + " Rayon : " + radius ;
}
public class MainShape {
public static void main(String[] args) {
Circle c1,c2 ;
c1 = new Circle(1,1,3) ;
c2 = new Circle() ;
System.out.println(c1.toString() + "\n" + c2.toString()) ;
}
}
1. De quelles variables d'instance de Shape hérite la classe Circle ?
2. La variable radius étant déclarée private, on ne peut pas la modifier de l'extérieur de la
classe. Ajoutez une méthode setRadius pour pouvoir le fixer et getRadius pour le lire.
3. Ajoutez une variable surface à la classe Circle. Modifiez les méthodes setRadius
et toString en conséquences. Ajoutez les méthodes d'accès à ce champs.
On notera que le fait de protéger les variables par private et de restreindre leur accès a
l'utilisation de méthode permet de maintenir la cohérence d'un état.
4. Écrivez une méthode c1.isBigger(Circle c2) renvoyant ``vrai'' si le cercle c1 est
plus grand que c2.
Comment écrire une méthode ayant un comportement similaire, mais prenant les deux
cercles en argument ?
5. Étendez la classe Circle avec une classe Cylinder ajoutant une variable h pour la
hauteur et une méthode volume. On ajoutera les constructeurs adéquats et on surchargera
toString en conséquence.
6. Étendez la classe Circle avec une classe ColoredCircle. La classe Cylinder
hérite-t'elle de l'attribut de coloration ?
Exercice 2
On veut modéliser la gestion d'une bibliothèque : on définira un certain nombre de classes : Main,
Ouvrage, BiblioTab, Bibliotheque, Periodique, CD, Livre. Les livres auront comme
propriétés : auteur, titre, éditeur ; les périodiques : nom, numéro, périodicité ; les CDs : titre, auteur.
De plus tous les ouvrages auront une date d'emprunt (potentiellement nulle), une cote (le numéro
par ordre de création). On implémentera également sur chaque objet une méthode toString()
renvoyant toutes les informations sur l'ouvrage sous forme d'une chaîne de caractères.
La classe BiblioTab permettra de stocker dans une structure les livres (ajout et suppression, la
suppression prenant en argument la cote de l'ouvrage). Elle aura également une méthode
toString() affichant le nombres d'ouvrages, puis chaque ouvrage successivement. La classe
Bibliotheque sera simplement une version abstraite déclarant les mêmes méthodes que
BiblioTab mais sans les implémenter. BiblioTab héritera de Bibliotheque.
La classe Main ne contiendra que la méthode main et testera la bibliothèque en y insérant et
supprimant quelques ouvrages, puis en affichant le contenu de la bibliothèque.
1. Représentez les différentes classes dans un graphe d'héritage. On mettra en évidence pour
chaque classe les méthodes et les champs qu'elle définit, redéfinit ou hérite. On souhaite que
tous les champs soient déclarés privés et que l'on puisse y accéder de l'extérieur que par des
méthodes.
2. Implémentez les classes ci-dessus. Pour la classe BiblioTab on utilisera un tableau de
longueur suffisante (on vérifiera quand même à chaque opération d'insertion que l'on ne
dépasse pas les bornes du tableau). Quel sont les inconvénients de cette méthode ?
Dans ce qui suit, on veut implémenter une deuxième version de la bibliothèque, que l'on appellera
BiblioList et qui héritera également de Bibliotheque. Cette nouvelle implémentation
utilisera la classe LinkedList définie dans l'API Java standard.
1. Modifiez le minimum de choses dans la classe Main pour permettre l'utilisation de
BiblioList.
2. En utilisant les méthodes boolean add(Object o) qui permet d'ajouter un objet dans
la liste, boolean remove(Object o) Object get(int index) et int
size(), implémentez la classe BiblioList. Vous trouverez la documentation complète
de la classe LinkedList en
http://www.pps.jussieu.fr/~baro/enseignement/LBI/Java/LinkedL
ist.html.
Vous devrez ajouter au début du fichier BiblioList.java la commande import
java.util.* ;