From 46194e379c2b0dc95c71d79d80a483ecc77628b5 Mon Sep 17 00:00:00 2001
From: "fabien.delecroix" <fabien.delecroix@univ-lille.fr>
Date: Wed, 25 Sep 2024 12:30:59 +0200
Subject: [PATCH] partie 2 plusieurs analyseurs

---
 README.md                                     | 89 ++++++++++++++-----
 .../iut/r304/{tp4 => tp3}/q1/Observable.java  |  2 +-
 .../iut/r304/{tp4 => tp3}/q1/Observer.java    |  2 +-
 .../{tp4 => tp3}/q3/ConnectableProperty.java  |  2 +-
 .../{tp4 => tp3}/q3/ObservableProperty.java   |  4 +-
 .../{tp4 => tp3}/q1/ObserverTestStub.java     |  2 +-
 .../iut/r304/{tp4 => tp3}/q1/TestQ1.java      |  2 +-
 .../iut/r304/{tp4 => tp3}/q3/TestQ1.java      |  4 +-
 .../iut/r304/{tp4 => tp3}/q3/TestQ2.java      |  2 +-
 9 files changed, 75 insertions(+), 34 deletions(-)
 rename src/main/java/fr/univlille/iut/r304/{tp4 => tp3}/q1/Observable.java (85%)
 rename src/main/java/fr/univlille/iut/r304/{tp4 => tp3}/q1/Observer.java (74%)
 rename src/main/java/fr/univlille/iut/r304/{tp4 => tp3}/q3/ConnectableProperty.java (86%)
 rename src/main/java/fr/univlille/iut/r304/{tp4 => tp3}/q3/ObservableProperty.java (84%)
 rename src/test/java/fr/univlille/iut/r304/{tp4 => tp3}/q1/ObserverTestStub.java (96%)
 rename src/test/java/fr/univlille/iut/r304/{tp4 => tp3}/q1/TestQ1.java (98%)
 rename src/test/java/fr/univlille/iut/r304/{tp4 => tp3}/q3/TestQ1.java (92%)
 rename src/test/java/fr/univlille/iut/r304/{tp4 => tp3}/q3/TestQ2.java (98%)

diff --git a/README.md b/README.md
index 904db21..1c0c27c 100644
--- a/README.md
+++ b/README.md
@@ -34,22 +34,52 @@ Compléter la classe abstraite Observable de manière à pouvoir disposer du mé
 Vérifiez la validité de votre implémentation à l'aide des tests fournis.
 
 ```java
-package fr.univlille.iut.r304.tp4.q1;
+package fr.univlille.iut.r304.tp3.q1;
+
 public abstract class Observable {
-  public void attach(Observer obs){}
-  public void detach(Observer obs){}
-  protected void notifyObservers(){}
-  protected void notifyObservers(Object data){}
+  public void attach(Observer obs) {
+  }
+
+  public void detach(Observer obs) {
+  }
+
+  protected void notifyObservers() {
+  }
+
+  protected void notifyObservers(Object data) {
+  }
 }
 ```
 
 ## Partie 2 : Application
 
 On souhaite réaliser un premier analyseur de texte simple, qui observes les lignes saisies sur l'entrée standard et se met à jour à chaque nouvelle ligne saisie.
-On devra par exemple pouvoir dérouler le scénario suivant :
+Nous utiliserons le patron observateurs/observé pour l'implémenter.
+
+On va donc disposer d'une classe Texte, encapsulant un Scanner pour traiter un flux, ici l'enrée standard :
+```mermaid
+classDiagram
+  
+  class Texte
+  Texte : +Texte(InputStream)
+  Texte : +startReading() void
+
+  Texte  --> "1" Scanner : #scan
+
+```
+ainsi que d'une classe Analyseur, chargée d'afficher au fur et à mesure la progression sur l'objectif donné, ici simplement en terme de lignes à saisir :
+```mermaid
+classDiagram
+  class Analyseur{  
+      -objectif : int
+  }
+  Analyseur : +do() void
+```
+
+
+On devra par exemple pouvoir dérouler le scénario suivant (pour y parvenir quelques questions ci-dessous pour vous guider) :
 
 ```
-Temps chrono total (en secondes) : 3247
 nombre de lignes : encore 3
 Hello
 nombre de lignes : encore 2
@@ -61,22 +91,35 @@ Ah ?
 C'est déjà fini
 ```
 
-Nous utiliserons le patron observateurs/observé pour l'implémenter.
-* Qu'est-ce qui sera observable ? 
-Créer la classes correspondante en pensant bien à la faire hériter d' *Observable*. 
-* Quel sera l'observateur ?
-Créer la classes correspondante en pensant bien à la faire implémenter *Observer*.
-    * En mode *push*, quelle *data* va-t-on récupérer de l'*Observable* qu'on suit lorsqu'il appellera notre méthode *update(Observable o, Object data)* ?
-    Faîtes en sorte qu'elle soit bien envoyée par l'objet qui sera observé.
-
-
-On va désormais ajouter un deuxième analyseur utilisant les mêmes saisies mais vérifiant un critère plus fin, qu'un caractère ait été saisi un certain nombre de fois.
 
+* Qu'est-ce qui est observable ici ? \
+Faîtes hériter d' *Observable* la classe correspondante.
+* Quel sera l'observateur ? \
+Faîtes implémenter *Observer* à la classe correpsondante.
+* En mode *push*, quelle *data* va-t-on récupérer de l'*Observable* qu'on suit lorsqu'il appellera notre méthode *update(Observable o, Object data)* ? \
+Faîtes en sorte qu'elle soit bien envoyée par l'observable.
+* Dans un *Main*,  instancier les différentes classes nécessaires à obtenir le scénario ci-dessus en pensant bien à gérer l'abonnement et le désabonnement de l'observateur à l'observable.
 
+### Autres analyseurs
+On va désormais ajouter d'autres analyseurs, sur les mêmes saisies, mais vérifiant un critère plus fin, qu'un caractère ait été saisi un certain nombre de fois.
+Créer une classe pour ce faire, de manière à mutualiser le plus possible le code avec **Analyseur**.
 
-
-Note: Des tests sont fournis dans le projet pour que vous vous assuriez que vos classes fonctionnent comme attendu.
-Respectez les noms des packages, classes et méthodes
+```
+nombre de lignes : encore 3
+nombre de a : encore 5
+Hello
+nombre de lignes : encore 2
+nombre de e : encore 4
+The answer is 42
+nombre de lignes : encore 1
+nombre de e : encore 2
+Sayonara
+nombre de lignes atteint
+nombre de e : encore 2
+The end
+nombre de e atteint
+Rideau
+```
 
 
 ## Partie 3 : Propriétés observables
@@ -95,7 +138,7 @@ Vous devez réimplémenter ces mécanismes des propriétés.
 Outre le fait qu'elle soit observable (attach, detach), cette classe doit avoir une propriété à laquelle on peut accéder :
 
 ```java
-package fr.univlille.iut.r304.tp4.q3;
+package fr.univlille.iut.r304.tp3.q3;
 
 public class ObservableProperty
 
@@ -115,7 +158,7 @@ Vérifier la validité de votre implémentation en exécutant les tests associé
 **Q2.2** Créez la classe ConnectableProperty qui puisse se connecter de façon  mono ou bi-directionnelle :
 
 ```java
-package fr.univlille.iut.r304.tp4.q3;
+package fr.univlille.iut.r304.tp3.q3;
 
 public class ConnectableProperty extends ObservableProperty
 
@@ -129,5 +172,3 @@ public void unconnectFrom(ConnectableProperty other) {
 }
   ...
 ```
-
-**QBonus** : Dans la partie 1 du sujet, ajouter un bouton permettant d'arrêter et redémarrer un chronomètre en particulier à tout moment.
diff --git a/src/main/java/fr/univlille/iut/r304/tp4/q1/Observable.java b/src/main/java/fr/univlille/iut/r304/tp3/q1/Observable.java
similarity index 85%
rename from src/main/java/fr/univlille/iut/r304/tp4/q1/Observable.java
rename to src/main/java/fr/univlille/iut/r304/tp3/q1/Observable.java
index 7ad1b00..264f8c5 100644
--- a/src/main/java/fr/univlille/iut/r304/tp4/q1/Observable.java
+++ b/src/main/java/fr/univlille/iut/r304/tp3/q1/Observable.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q1;
+package fr.univlille.iut.r304.tp3.q1;
 
 
 public abstract class Observable {
diff --git a/src/main/java/fr/univlille/iut/r304/tp4/q1/Observer.java b/src/main/java/fr/univlille/iut/r304/tp3/q1/Observer.java
similarity index 74%
rename from src/main/java/fr/univlille/iut/r304/tp4/q1/Observer.java
rename to src/main/java/fr/univlille/iut/r304/tp3/q1/Observer.java
index 27d1e30..231d8ab 100644
--- a/src/main/java/fr/univlille/iut/r304/tp4/q1/Observer.java
+++ b/src/main/java/fr/univlille/iut/r304/tp3/q1/Observer.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q1;
+package fr.univlille.iut.r304.tp3.q1;
 
 public interface Observer {
 
diff --git a/src/main/java/fr/univlille/iut/r304/tp4/q3/ConnectableProperty.java b/src/main/java/fr/univlille/iut/r304/tp3/q3/ConnectableProperty.java
similarity index 86%
rename from src/main/java/fr/univlille/iut/r304/tp4/q3/ConnectableProperty.java
rename to src/main/java/fr/univlille/iut/r304/tp3/q3/ConnectableProperty.java
index bd64bc7..ce7269d 100644
--- a/src/main/java/fr/univlille/iut/r304/tp4/q3/ConnectableProperty.java
+++ b/src/main/java/fr/univlille/iut/r304/tp3/q3/ConnectableProperty.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q3;
+package fr.univlille.iut.r304.tp3.q3;
 
 public class ConnectableProperty extends ObservableProperty {
 
diff --git a/src/main/java/fr/univlille/iut/r304/tp4/q3/ObservableProperty.java b/src/main/java/fr/univlille/iut/r304/tp3/q3/ObservableProperty.java
similarity index 84%
rename from src/main/java/fr/univlille/iut/r304/tp4/q3/ObservableProperty.java
rename to src/main/java/fr/univlille/iut/r304/tp3/q3/ObservableProperty.java
index d3ff06e..4fe250c 100644
--- a/src/main/java/fr/univlille/iut/r304/tp4/q3/ObservableProperty.java
+++ b/src/main/java/fr/univlille/iut/r304/tp3/q3/ObservableProperty.java
@@ -1,6 +1,6 @@
-package fr.univlille.iut.r304.tp4.q3;
+package fr.univlille.iut.r304.tp3.q3;
 
-import fr.univlille.iut.r304.tp4.q1.Observer;
+import fr.univlille.iut.r304.tp3.q1.Observer;
 
 public class ObservableProperty {
 
diff --git a/src/test/java/fr/univlille/iut/r304/tp4/q1/ObserverTestStub.java b/src/test/java/fr/univlille/iut/r304/tp3/q1/ObserverTestStub.java
similarity index 96%
rename from src/test/java/fr/univlille/iut/r304/tp4/q1/ObserverTestStub.java
rename to src/test/java/fr/univlille/iut/r304/tp3/q1/ObserverTestStub.java
index cf23de1..7c8849a 100644
--- a/src/test/java/fr/univlille/iut/r304/tp4/q1/ObserverTestStub.java
+++ b/src/test/java/fr/univlille/iut/r304/tp3/q1/ObserverTestStub.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q1;
+package fr.univlille.iut.r304.tp3.q1;
 
 /** ObserverTestStub
  * Can tell whether it was notified or not
diff --git a/src/test/java/fr/univlille/iut/r304/tp4/q1/TestQ1.java b/src/test/java/fr/univlille/iut/r304/tp3/q1/TestQ1.java
similarity index 98%
rename from src/test/java/fr/univlille/iut/r304/tp4/q1/TestQ1.java
rename to src/test/java/fr/univlille/iut/r304/tp3/q1/TestQ1.java
index ee751d8..7973210 100644
--- a/src/test/java/fr/univlille/iut/r304/tp4/q1/TestQ1.java
+++ b/src/test/java/fr/univlille/iut/r304/tp3/q1/TestQ1.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q1;
+package fr.univlille.iut.r304.tp3.q1;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/src/test/java/fr/univlille/iut/r304/tp4/q3/TestQ1.java b/src/test/java/fr/univlille/iut/r304/tp3/q3/TestQ1.java
similarity index 92%
rename from src/test/java/fr/univlille/iut/r304/tp4/q3/TestQ1.java
rename to src/test/java/fr/univlille/iut/r304/tp3/q3/TestQ1.java
index 81957cc..924c75b 100644
--- a/src/test/java/fr/univlille/iut/r304/tp4/q3/TestQ1.java
+++ b/src/test/java/fr/univlille/iut/r304/tp3/q3/TestQ1.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q3;
+package fr.univlille.iut.r304.tp3.q3;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -7,7 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import fr.univlille.iut.r304.tp4.q1.ObserverTestStub;
+import fr.univlille.iut.r304.tp3.q1.ObserverTestStub;
 
 public class TestQ1 {
     protected ObservableProperty prop;
diff --git a/src/test/java/fr/univlille/iut/r304/tp4/q3/TestQ2.java b/src/test/java/fr/univlille/iut/r304/tp3/q3/TestQ2.java
similarity index 98%
rename from src/test/java/fr/univlille/iut/r304/tp4/q3/TestQ2.java
rename to src/test/java/fr/univlille/iut/r304/tp3/q3/TestQ2.java
index 203660a..f2830f6 100644
--- a/src/test/java/fr/univlille/iut/r304/tp4/q3/TestQ2.java
+++ b/src/test/java/fr/univlille/iut/r304/tp3/q3/TestQ2.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q3;
+package fr.univlille.iut.r304.tp3.q3;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-- 
GitLab