Skip to content
Snippets Groups Projects
Commit 9e0f137d authored by Fabien Delecroix's avatar Fabien Delecroix
Browse files

clarification présence méthodes

parent 51fcd6e8
No related branches found
No related tags found
No related merge requests found
...@@ -33,6 +33,7 @@ Ce TimerThread permettra de déclencher la mise à jour des horloges qui affiche ...@@ -33,6 +33,7 @@ Ce TimerThread permettra de déclencher la mise à jour des horloges qui affiche
```java ```java
public class TimerThread extends Thread { public class TimerThread extends Thread {
@Override
public void run(){ public void run(){
while (true) { while (true) {
try { try {
...@@ -46,18 +47,15 @@ public class TimerThread extends Thread { ...@@ -46,18 +47,15 @@ public class TimerThread extends Thread {
} }
``` ```
Le thread s’utilise de cette façon : `new TimerThread().start();` et boucle sans fin Le thread s’utilise de cette façon : `new TimerThread().start();` (ce qui provoque l'appel à la méthode `void run()`) et boucle sans fin
en faisant une action (que vous devez définir) chaque seconde. en faisant une action (que **vous** devez définir) chaque seconde.
Faites deux chronomètres, qui se mettent à jour toutes les secondes. On souhaite instancier deux chronomètres, qui se mettent à jour toutes les secondes.
Ces deux chronomètres utiliseront le même Timer mais auront des temps écoulés différents (par simplicité, vous pouvez juste les initialiser à des valeurs différentes. Ces deux chronomètres utiliseront le même Timer mais auront des temps écoulés différents (par simplicité, vous pouvez juste les initialiser à des valeurs différentes.
Commencez avec deux chronomètres console qui affiche simplement leur nom et le nombre de secondes écoulé en boucle.
![Diagrame UML des chronomètres et du Timer à implémenter](documentation/umlChronometreObserver.png) ![Diagrame UML des chronomètres et du Timer à implémenter](documentation/umlChronometreObserver.png)
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
**Q1.2** Pour l’implémentation de Timer, on s’aperçoit d’un problème d’héritage. **Q1.2** Pour l’implémentation de Timer, on s’aperçoit d’un problème d’héritage.
Quelles sont les deux classes dont ce Timer devrait hériter ? Quelles sont les deux classes dont ce Timer devrait hériter ?
...@@ -72,9 +70,26 @@ public class Timer ...@@ -72,9 +70,26 @@ public class Timer
public void stopRunning() public void stopRunning()
... ...
``` ```
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
**Q1.4**
Lors des épreuves de course sportive, il n'est pas rare d'afficher en parallèle le chronomètre de l'étape et celui du temps total.
Dans cette idée, écrivez un main avec deux chronomètres console qui affichent simplement leur nom et le nombre de secondes écoulées en boucle, l'un démarrant à zéro, l'autre à une valeur saisie au départ.
On doit par exemple pouvoir dérouler le scénario suivant :
```
Temps chrono total (en secondes) : *3247*
etape : 1
total : 3248
etape : 2
total : 3249
...
```
**Optionnel** Implémentez un chronomètre en JavaFX qui affiche le nombre de secondes écoulées. **Optionnel** Implémentez un chronomètre en JavaFX qui affiche le nombre de secondes écoulées.
Dans ce cas, notez que l'affichage JavaFX se fait dans un *thread* spécifique. Une classe MainExample est là au besoin pour vous servir de base et commencer par vérifier la bonne configuration de JavaFX.
Notez que l'affichage JavaFX se fait dans un *thread* spécifique.
Pour que votre chronomètre JavaFX fonctionne, toute modification de l'affichage déclencée par un autre *thread* (ici le Timer) doit être fait par l'intermédiaire d'un appel à `javafx.application.Platform.runLater`, Pour que votre chronomètre JavaFX fonctionne, toute modification de l'affichage déclencée par un autre *thread* (ici le Timer) doit être fait par l'intermédiaire d'un appel à `javafx.application.Platform.runLater`,
Par exemple par une lambda telle que ceci : Par exemple par une lambda telle que ceci :
...@@ -93,8 +108,8 @@ La monodirectionnelle propage les changement d’une propriété (« source » ...@@ -93,8 +108,8 @@ La monodirectionnelle propage les changement d’une propriété (« source »
Ce sont des mécanismes pratiques mais qui obligent à importer JavaFX ce qui n’est pas toujours souhaitable dans un projet. Ce sont des mécanismes pratiques mais qui obligent à importer JavaFX ce qui n’est pas toujours souhaitable dans un projet.
Vous devez réimplémenter ces mécanismes des propriétés. Vous devez réimplémenter ces mécanismes des propriétés.
**Q2.1** Créez la classe ObservableProperty qui soit observable. **Q2.1** Rendez la classe ObservableProperty observable.
Outre le fait qu'elle soit observable (attache, detach), cette classe doit avoir une propriété à laquelle on peut accéder : Outre le fait qu'elle soit observable (attach, detach), cette classe doit avoir une propriété à laquelle on peut accéder :
```java ```java
package fr.univlille.iut.r304.tp4.q2; package fr.univlille.iut.r304.tp4.q2;
...@@ -120,3 +135,5 @@ public class ConnectableProperty extends ObservableProperty ...@@ -120,3 +135,5 @@ public class ConnectableProperty extends ObservableProperty
public void unconnectFrom(ConnectableProperty other) 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.
...@@ -11,10 +11,12 @@ public class Timer { ...@@ -11,10 +11,12 @@ public class Timer {
public void attach(Observer observer) { public void attach(Observer observer) {
// methode cree pour que les tests compilent sans erreur // methode cree pour que les tests compilent sans erreur
// n'est pas censée rester une fois que vous avez fini Q1.3
} }
public void detach(Observer observer) { public void detach(Observer observer) {
// methode cree pour que les tests compilent sans erreur // methode cree pour que les tests compilent sans erreur
// n'est pas censée rester une fois que vous avez fini Q1.3
} }
} }
...@@ -13,10 +13,12 @@ public class ObservableProperty { ...@@ -13,10 +13,12 @@ public class ObservableProperty {
public void attach(Observer observer) { public void attach(Observer observer) {
// methode cree pour que les tests compilent sans erreur // methode cree pour que les tests compilent sans erreur
// n'est pas censée rester une fois que vous avez fini Q2.1
} }
public void detach(Observer observer) { public void detach(Observer observer) {
// methode cree pour que les tests compilent sans erreur // methode cree pour que les tests compilent sans erreur
// n'est pas censée rester une fois que vous avez fini Q2.1
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment