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 abs-
traites :
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 de-
vez 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 OurShapecomme 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 re-
paint() 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 fe-
nê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 fonc-
tion paint().
Exercice 1
Développez la classe abstraite OurShape qui supporte les méthodes (abstraites) suivantes :
public double perimeter()
public double area()
public void translate(int deltaX, int deltaY)
public void scale(double factor) // Homothétie
public void setColor(Color c)
public Color color()
public void setFilled()
public boolean filled()
public 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,OurEllipseet OurCircle.Implémentez les construc-
teurs suivants :
public OurRectangle(int x, int y, int width, int height)
public OurSquare(int x, int y, int width)
public OurParallelogram(int x, int y, int width, int height, double
angle)
public OurEllipse(int x, int y, int width, int height)
public 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émen-
tez 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
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !