# Minipaint
## TP1 – Découverte du projet
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 fichier `pom.xml` :
- openjfx
- junit (pour les tests)
- testfx (pour les tests graphiques)
Compilez le projet, lancez l'application, et testez !
>**🖥 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.
### 🌴 Le triangle des bermudes
---
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.
### 🩺 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.
>**🖥 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.
### 🎮 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.
>**🖥 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... ](./TP1_plus.md)
[🔙 Retour](../README.md)