arnaud.lewandowski@univ-littoral.fr il y a 3 ans
Parent
commit
cd32e2ab06
2 fichiers modifiés avec 72 ajouts et 0 suppressions
  1. 56 0
      docs/TP1.md
  2. 16 0
      docs/TP1_plus.md

+ 56 - 0
docs/TP1.md

@@ -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)
 
 
 

+ 16 - 0
docs/TP1_plus.md

@@ -0,0 +1,16 @@
+# Minipaint
+## TP1 – Découverte du projet
+
+### 🎮 Tu me montres ta collection ?
+
+_Alors, vous avez trouvé ?_
+
+En fait, une bonne pratique consiste à s’inspirer du patron _Iterator_. Nous n’allons pas implémenter un itérateur (quoi que cela soit possible), mais simplement utiliser l’itérateur existant dans l’API java (sous la classe du même nom : `java.lang.Iterator`).
+
+> - Documentez-vous sur le patron *Iterator*. Vous pouvez aussi lire l’article https://blog.zenika.com/2010/10/31/au-coeur-du-jdk-l-interface-iterable/
+> - Faites en sorte que la classe `DrawingPane` implémente l’interface `java.lang.Iterable`
+> - Supprimez la méthode `getShapes()` et remplacez ses appels (dans l’application, et dans les tests) pour qu’ils utilisent plutôt la nouvelle méthode.
+
+💡 _**À retenir**_ : lorsque vous encapsulez une collection au sein d’une classe, pensez à l’interface Iterable ; votre code sera mieux encapsulé et plus facile à utiliser !
+
+[🔙 Retour](./TP1.md)