Vous êtes sur la page 1sur 2
Master ISI Module : Programmation Java Avancé TP3
Master ISI Module : Programmation Java Avancé TP3

Master ISI Module : Programmation Java Avancé

TP3

Master ISI Module : Programmation Java Avancé TP3
Master ISI Module : Programmation Java Avancé TP3

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équence. Ajoutez les méthodes d'accès à ce champ. On notera que le fait de protéger les variables par private et de restreindre leur accès à 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.

N.B. Vous devrez évidemment ajouter au début du fichier BiblioList.java la commande import java.util.*;