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