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

partie 4

parent 0c83713a
No related branches found
No related tags found
No related merge requests found
Showing
with 34 additions and 7 deletions
...@@ -84,6 +84,7 @@ classDiagram ...@@ -84,6 +84,7 @@ classDiagram
Objectif : +isDone() boolean Objectif : +isDone() boolean
``` ```
Implémentez ces classes dans un sous-paquetage *q2*.
On devra par exemple pouvoir dérouler le scénario suivant (pour y parvenir quelques questions ci-dessous pour vous guider) : On devra par exemple pouvoir dérouler le scénario suivant (pour y parvenir quelques questions ci-dessous pour vous guider) :
<pre> <pre>
...@@ -156,33 +157,38 @@ La monodirectionnelle propage les changement d’une propriété (« source » ...@@ -156,33 +157,38 @@ 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** Rendez la classe ObservableProperty observable. Rendez la classe ObservableProperty observable.
Outre le fait qu'elle soit observable (attach, 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.tp3.q3; package fr.univlille.iut.r304.tp3.q3;
public class ObservableProperty public class ObservableProperty {
public Object getValue() public Object getValue() {
public void setValue(Object val) }
public void setValue(Object val) {
}
... ...
}
``` ```
Bien sûr, le fait de changer la valeur de la propriété doit être notifié aux observateurs de celle-ci. Bien sûr, le fait de changer la valeur de la propriété doit être notifié aux observateurs de celle-ci.
Notez que par simplicité, on utilisera une propriété de type `Object` (donc n'importe quel type). Notez que par simplicité, on utilisera une propriété de type `Object` (donc n'importe quel type).
Vous pouvez aussi définir une classe générique avec un type paramétrique pour typer cette propriété. On aurait aussi pu définir une classe générique avec un type paramétrique pour typer cette propriété.
Vérifier la validité de votre implémentation en exécutant les tests associés à cette question. Vérifier la validité de votre implémentation en exécutant les tests associés à cette question.
**Q2.2** Créez la classe ConnectableProperty qui puisse se connecter de façon mono ou bi-directionnelle : Implémentez la classe ConnectableProperty qui puisse se connecter de façon mono ou bi-directionnelle :
```java ```java
package fr.univlille.iut.r304.tp3.q3; package fr.univlille.iut.r304.tp3.q3;
public class ConnectableProperty extends ObservableProperty public class ConnectableProperty extends ObservableProperty {
public void connectTo(ConnectableProperty other) { public void connectTo(ConnectableProperty other) {
} }
...@@ -194,3 +200,24 @@ public void unconnectFrom(ConnectableProperty other) { ...@@ -194,3 +200,24 @@ public void unconnectFrom(ConnectableProperty other) {
} }
... ...
``` ```
## Partie 4 : Application avec la conversion de devises
On souhaite réaliser une application de portefeuille gérant la conversion dans différentes monnaies.
Dans un premier temps, on va disposer d'un montant en euros et souhaiter l'afficher aussi en dollars.
Dans un sous-paquetage *q4*, implémentez une classe **Devise** héritant de *ConnectableProperty* de manière à pouvoir instancier deux devises différentes, l'une correspondant aux euros, l'autre aux dollars.
Les valeurs n'étant pas les mêmes dans les deux monnaies, la méthode *void update(Subject other, Object data)* va être à redéfinir de manière à opérer la conversion.
Une fois la classe implémentée, réalisez un *Main* avec 2 devises synchronisées, l'ajoutant ou le retrait d'un montant dans l'une se répercutant automatiquement sur l'autre.
Voici un exemple de scénario :
```
Ajout 20$
18,00 €
20,00 $
Retrait 11€
7,00 €
7,78 $
```
Ajoutez une troisième devise et démontrez la validité de votre solution à l'aide de tests.
\ No newline at end of file
File added
File deleted
File added
File deleted
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment