Programmation par les Objets en Java
Les relations entre classes (TD4)
Najib Tounsi
(Lien permanent: http://www.mescours.ma/Java/TD/tdJava4.html
(.pdf)
L'objectif de ce TD est de créer une classe (Rectangle)
cliente d'une autre classe (Point). Ensuite de dériver
une classe (Robot) à partir d'une classe (Point).
Notions d'héritage et de polymorphisme.
Sommaire
Reprendre la classe Point (avec constructeurs) du TD
précédent et la compiler. Créer (nouveau fichier, Rectangle.java)
une classe Rectangle, qui utilise cette classe Point.
class Rectangle {
private Point hg, bd ; // Les coins haut à gauche et bas à droite
// Rectangle droit
public Rectangle(){
// rectangle par défaut. Choisir son initialisation
}
public Rectangle(Point h, Point b){
// initialisation des coins à partir des paramètres données
}
public void afficher(){
// Affiche les coordonnées des coins
}
public int surface(){
// calcule de la surface
}
public void zoom(int deltax, int deltay){
// Dilatation des coordonnées. Delta donné.
}
// autres méthodes...
};
TestRectangle.java
avec méthode main()).Point un constructeur copie
Point (Point p) {
// copier les coordonnées de p dans this ...
}
et l'utiliser dans le constructeur Rectangle (Point h, Point
b). Quel est l'intérêt par rapport à avant?
Rajouter les méthodes set et get
appropriées qui modifient et lisent les champs d'un rectangle
Créer maintenant une classe Fenetre, composée d'un
rectangle et d'un texte représentant le titre de la fenêtre.
Imaginer des opérations utiles, comme le déplacement,
l'agrandissement d'une fenêtre, etc. Quelle opération de la classe Rectangle
pourrait servir pour l'agrandissement d'une fenêtre?
Créer une sous-classe Robot de la classe Point
et qui consiste en un point avec un champ direction
(entier compris entre 1 et 4) et une méthode avancer
() qui fait avancer le robot dans un sens selon la
valeur du champ direction ( 1 monter d'un
pas, 2 à droite d'un pas, 3 descendre d'un pas et 4 à gauche d'un
pas.)
class Robot extends Point {
int direction; // direction actuelle
public Robot(){
super (0,0);
direction = 3; // Sud
}
...
public void avancer() {
switch (direction) {
case 1: y++; break;
case 2: x++; break;
case 3: y--; break;
case 4: x--; break;
default: ;
}
}
};
Robot, le fait
avancer et imprime ensuite les cordonnées du Robot. toString() héritée de Point (elle
même héritée de public String toString() de Object,
et redéfinie dans Point) . setDirection (int d) qui change la
direction d'un Robot à la valeur d.
Tester. Robot()
? Tester pour vérifier. new
Robot(), car sinon c'est le nouveau constructeur avec
paramètres qui sera trouvé, et comme il ne correspond pas c'est une
erreur de compilation. Dit autrement, le constructeur défaut hérité Point()
est utilisé pour l'appel new Robot() si aucun constructeur
n'est défini dans la sous-classe Robot)Robot la méthode toString()
héritée de Point. Y rajouter aussi la direction en plus
des coordonnées x et y. Point p = new Point (6,7);
System.out.println(p.toString());
p = r;
System.out.println(p.toString());
toString() appliquée à p
dans les deux cas. D'abord celle de Point et ensuite celle
de Robot, selon l'instance présente référencée par p.On reprendra cette notion au prochain TD.