|
@@ -4,6 +4,62 @@
|
|
|
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.
|
|
|
|
|
|
|
|
|
+### 🔬 À la recherche des classes perdues...
|
|
|
+
|
|
|
+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 `pom.xml` :
|
|
|
+- openjfx
|
|
|
+- junit (pour les tests)
|
|
|
+- testfx (pour les tests graphiques)
|
|
|
+
|
|
|
+Compilez le projet, lancez l'application, et testez !
|
|
|
+
|
|
|
+> 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 ??
|
|
|
+> Cherchez un peu, et quand vous aurez trouvé, complétez le diagramme de classes de l'application.
|
|
|
+
|
|
|
+### 🌴 Le triangle des bermudes
|
|
|
+
|
|
|
+On veut maintenant pouvoir dessiner des triangles.
|
|
|
+
|
|
|
+> - 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.
|
|
|
+
|
|
|
+### 🩺 Des tests
|
|
|
+
|
|
|
+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.
|
|
|
+> 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.
|
|
|
+
|
|
|
+### 🎮 Tu me montres ta collection ?
|
|
|
+
|
|
|
+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.
|
|
|
+
|
|
|
+> 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);
|
|
|
+
|
|
|
+> - 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... ](./TP1_plus.md)
|
|
|
|
|
|
|
|
|
|