Dans cette première partie, nous allons nous familiariser avec le code de l’application, et en profiter pour découvrir un ou deux patrons de conception.
D’abord, importez le projet sous IntelliJ, Eclipse, ou un autre environnement de développement de votre choix.
Les dépendances du projet sont gérées automatiquement grâce à Maven. Par curiosité, vous pouvez les identifier dans le fichier pom.xml
:
Compilez le projet, lancez l'application, et testez !
Vous pouvez utiliser la commande mvn clean javafx:run
🖥 TODO
- Créez un diagramme des classes, il vous sera utile par la suite.
Pour cela, vous pouvez utiliser un stylo et un papier... 📝- Efforcez-vous de comprendre le rôle de chaque classe 🧐
Les formes géométriques qui sont dessinées sont représentées par des objets, qui sont stockés dans le DrawingPane
. Mais où sont les classes représentant les différentes formes géométriques ??
🖥 TODO
- Cherchez un peu, et quand vous aurez trouvé, complétez le diagramme de classes de l'application.
On veut maintenant pouvoir dessiner des triangles.
🖥 TODO
- Décidez quelle classe vous utiliserez pour représenter cette nouvelle forme géométrique.
- En vous inspirant de la manière dont les rectangles et les ellipses sont créés et ajoutés au
DrawingPane
, ajoutez les classes nécessaires ainsi qu’un bouton dans l’interface pour pouvoir dessiner des triangles.- Définissez un style CSS à appliquer aux triangles.
Les tests unitaires sont un excellent moyen de vérifier la qualité du code produit. Il y a beaucoup d’avantages à utiliser les tests unitaires, comme vous le verrez dans un autre module. Au fur et à mesure du développement de l’application, vous devrez écrire les tests permettant de vérifier la validité de votre code, et d’identifier des erreurs possibles.
Commençons tout de suite !
Dans le package test
, il y a déjà une classe permettant de tester quelques méthodes de l’application.
🖥 TODO
En vous inspirant des tests existants, écrivez quelques tests unitaires permettant de vérifier le bon fonctionnement des classes que vous avez ajoutées pour dessiner des triangles. Pensez aux différents cas possibles.
Vérifiez que les tests passent, ou corrigez votre code si nécessaire. Dans la suite du projet, nous continuerons à écrire des tests pour chaque nouvelle fonctionnalité créée.
La classe DrawingPane
contient un attribut de type ArrayList
pour stocker les formes géométriques créées. Pour y accéder, un getter a été implémenté : il s’agit de la méthode getShapes()
. Il est d’ailleurs utilisé dans la classe MouseMoveHandler
, par exemple.
🖥 TODO
- Quel problème relatif au principe d’encapsulation ce getter pose-t-il ?
Pour vous en rendre compte, dans la classe ShapeButtonHandler
, essayez de remplacer la ligne :
drawingPane.addShape(shape);
par celle-ci :
drawingPane.getShapes().add(shape);
🖥 TODO
- Que se passe-t-il, et pourquoi ? 👾
- Qu'est-ce que cela révèle à propos de ce fameux getter ?
- Un peu de réflexion : Que proposeriez-vous pour corriger ce problème ? 🤷🏽
Réfléchissez et proposez une solution avant de lire la suite...