diff --git a/README.md b/README.md index 904db213f2c81634ff7fb081c7a04d3b9155e871..1c0c27cc2b8824ddc94c3b1c10789a7b63c38ce0 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 7ad1b00967a3a543400461f458f0c655e2b0a9d6..264f8c55116271d3ba3958a89fa337fa381cbdb3 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 27d1e30f5e1e5f8a374be4a3b56886a0e92e2934..231d8ab28e65514d4b7aa482a3b6531c80d4bd0a 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 bd64bc7100f1daf8ff8a99a4a6e2ab50a0710be2..ce7269d5ecfe5adf17694c31683a359b9322d7ca 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 d3ff06e7f8dcba716ec3f53eeb7fb2ba6c8d88ef..4fe250c1b28a1036c86d634bbc124f6a0e51fd4c 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 cf23de1f93b826d9c380b2baa01ead8a45ba2901..7c8849ae1916e67c1f8780fe88116e1285388fd7 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 ee751d86eea8cbb44b73c1dadfe616c7368698ca..7973210e4400d2619cf867eac52347ea7c1508e0 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 81957cc27322075bb9a6cf2c11034bd865eefcf5..924c75ba8c2044761d38599291323d384216f082 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 203660aff0d2728b880c9975e88cc1fcba74ee1a..f2830f64b0a480ed34b1682b57f1fec9ce56874b 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;