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