-
Cours :
- Notions programmation orientée objet et Java (pdf)
- Tests (pdf)
- Principes SOLID (pdf)
- Patrons de conception (pdf)
-
Planches de TD :
- TD 1 (pdf), Corrigé TD 1 (pdf)
- TD 2 (pdf), Corrigé TD 2 (pdf)
- TP 1 (pdf), Corrigé TP 1 (pdf)
TP 4 : Adapter
Dessin de camion
Consignes pour démarrer le TP
Comme pour les TP précédents, on va utiliser git pour la gestion de versions et vous allez devoir cloner un dépôt pour ce projet. Il vous faut donc vous reporter aux consignes du premier TP.
Lien vers le projet gitlab à forker pour le TP : https://etulab.univ-amu.fr/alaboure/graphic.
Une fois le dépôt téléchargé, vous pouvez compiler et exécuter le
programme en cliquant deux fois sur graphic
->
application
-> run
. Vous devriez obtenir
l’affichage suivant.
Objectifs
Dans cette planche de TP, vous allez implémenter des classes pour
réaliser des dessins de camion. Nous vous donnons une classe (classe
Truck
du package viewer
) permettant de
dessiner le camion suivant :
Le code de cette classe est le suivant :
public class Truck extends Canvas{
public Truck() {
super(650, 550);
= this.getGraphicsContext2D();
GraphicsContext graphicsContext = new FrenchPainter(graphicsContext);
Painter painter draw(painter);
}
private void draw(Painter painter) {
.drawRectangle(50.0, 50.0, 350.0, 350.0);
painter.drawRectangle(400.0, 225.0, 200.0, 175.0);
painter.drawCircle(200.0, 400.0, 50.0);
painter.drawCircle(500.0, 400.0, 50.0);
painter}
}
Pour le dessin, on utilise l’interface Painter
suivante
:
public interface Painter {
/**
* Draws a rectangle.
*
* @param xUpperLeft the X position of the upper left corner of the
* rectangle.
* @param yUpperLeft the Y position of the upper left corner of the
* rectangle.
* @param width the width of the rectangle.
* @param height the height of the rectangle.
*/
void drawRectangle(double xUpperLeft, double yUpperLeft, double width, double height);
/**
* Draws a circle.
*
* @param xCenter the X position of the center of the circle.
* @param yCenter the Y position of the center of the circle.
* @param radius the radius of the circle.
*/
void drawCircle(double xCenter, double yCenter, double radius);
}
Le but est donc de dessiner des rectangles et des cercles. Pour cela
il vous faudra utiliser les méthodes strokeRect
et
strokeOval
de la classe GraphicsContext
de JavaFX.
Tâche 1 : Complétez la classe
FrenchPainter
dans le packagefrench
qui implémente l’interfacePainter
. Le but est d’obtenir l’affichage ci-dessous :
Un anglais a développé une classe EnglishPainter
qui
permet de dessiner des cercles et des rectangles. L’objectif est
d’utiliser la classe EnglishPainter
sans la modifier. Elle
possède deux méthodes utilisant la classe Point2D
de JavaFX :
void paintRectangle(Point2D upperLeft, Point2D lowerRight)
(oùupperLeft
etlowerRight
sont les deux coins opposés du rectangle) ;void drawCircle(Point2D center, Point2D point)
(où center et point sont respectivement le centre et un point du cercle).
La classe EnglishPainter
possède également un
constructeur qui prend en paramètre une instance de la classe
GraphicsContext
. Nous souhaitons utiliser la classe
EnglishPainter
à la place de notre classe
FrenchPainter
en modifiant le moins possible le code déjà
écrit. Nous voulons également pouvoir passer d’une version à l’autre en
changeant uniquement la ligne de code :
= new FrenchPainter(graphicsContext); Painter painter
par
= new EnglishPainterAdapter(graphicsContext); Painter painter
dans la classe Truck.
Tâche 2 : Proposez une implémentation de la classe
EnglishPainterAdapter
qui ne demande aucune modification du code des classes déjà présentes dans le code. Le but est d’obtenir l’affichage ci-dessous :