ESISAR : 3ème Année CS-310 : Programmation Orientée Objets

publicité
ESISAR : 3ème Année
CS-310 : Programmation Orientée Objets
TP3 : Polymorphisme et Classes Abstraites
16 mars 2004
Remarques préliminaires
But : Dans cette troisième séance de TP, vous continuerez d’aborder l’héritage de classe mais par
l’intermédiaire d’une classe abstraite.
Classe abstraite : Une classe abstraite est une classe de base qui permet de définir une interface
commune pour toutes ses classes dérivées.
abstract class OurShape { /* ... */}
class OurParallelogram extends OurShape { /* ... */}
En règle générale, les objets d’une classe abstraite n’ont aucun sens. Une telle classe est
définie pour exprimer seulement une interface. Certaines méthodes de cette classe sont abstraites :
public abstract double perimeter();
Elles doivent donc être redéfinies par les classes dérivées.
Conception d’un programme : Avant de vous lancer dans l’implémentation de ce TP, vous devez impérativement passer du temps sur la conception. Quelles sont les classes manipulées ?
Qui hérite de qui ? Etc.
Ne vous laissez pas influencer par l’affichage graphique des objets qui seront créés dans la
classe ShapeTester. Cela n’interviendra qu’à la fin de l’exercice 2. Vous devez concevoir
les classes dérivées de OurShape comme des classes manipulant des objets mathématiques
sans considération de leur affichage effectif dans une fenêtre (à l’exception de la méthode
draw). C’est d’ailleurs la démarche que nous avions adoptée dans le TP1 où nous avons
manipulé des objets mathématiques Complex. Nous avions défini leurs charactéristiques
et de leurs comportements sans nous occuper de leur éventuel affichage à l’écran.
Classe Graphics : Cette classe est définie dans le package java.awt. Elle fournit entre autres,
des méthodes permettant de dessiner des figures géométriques à l’écran.
Méthode paint() : Cette méthode doit obligatoirement être définie avant la fonction main().
Elle est appelée implicitement par le système d’exploitation pour dessiner ou redessiner les
composants présents dans la fenêtre à chaque fois que celle-ci est touchée.
public void paint(Graphics screen)
{
// instructions d’affichage des composants de la fenêtre
}
1
On ne peut pas l’appeler directement mais, si besoin est, on peut invoquer la méthode repaint() ce qui force le système à exécuter la méthode paint() et donc à redessiner les
composants.
Méthode setVisible(true) : Cette méthode permet d’afficher ou de rendre visible la fenêtre (objet Frame dérivée de Window) courante (qui contient les composants) en la plaçant au dessus des autres. Elle signifie que le système d’exploitation peut exécuter la fonction paint().
Exercice 1
Développez la classe abstraite OurShape qui supporte les méthodes (abstraites) suivantes :
public
public
public
public
public
public
public
public
public
double perimeter()
double area()
void translate(int deltaX, int deltaY)
void scale(double factor) // Homothétie
void setColor(Color c)
Color color()
void setFilled()
boolean filled()
void draw(Graphics g) // Dessine la forme concernée
Nous définissons l’origine d’une forme comme l’origine de la "bounding box" de la forme
(rectangle virtuel circonscrit à la forme).
Exercice 2
Développez les sous-classes suivantes (non-abstraites !) de OurShape : OurRectangle,
OurSquare, OurParallelogram, OurEllipse et OurCircle. Implémentez les constructeurs suivants :
public
public
public
angle)
public
public
OurRectangle(int x, int y, int width, int height)
OurSquare(int x, int y, int width)
OurParallelogram(int x, int y, int width, int height, double
OurEllipse(int x, int y, int width, int height)
OurCircle(int x, int y, int width)
Utilisez l’héritage pour organiser les classes d’une manière logique ! Testez les classes en
construisant une classe ShapeTester qui est une sous-classe de Frame.
Exercice 3
Utilisez les classes d’exercice 2 pour développer une classe Car. La classe doit supporter les
méthodes suivantes :
public Car(int x, int y, int size)
public void draw(Graphics g)
Exercice 4 (optionnel)
Construisez une classe Ngon qui est une sous-classe non abstraite de OurShape. Implémentez le constructeur suivant :
public void Ngon(int x, int y, int nSides int widthSide)
Cette classe représente des formes comme des pentagones, hexagones, etc.
2
Téléchargement