From af7f633095b0d5e9ee5ef364d5ea6d54b5a7baac Mon Sep 17 00:00:00 2001
From: "fabien.delecroix" <fabien.delecroix@univ-lille.fr>
Date: Thu, 26 Sep 2024 07:28:03 +0200
Subject: [PATCH] partie 4

---
 README.md                                     |  41 +++++++++++++++---
 .../iut/r304/{tp4 => tp3}/q1/Observable.class | Bin 757 -> 757 bytes
 .../univlille/iut/r304/tp3/q1/Observer.class  | Bin 0 -> 263 bytes
 .../q2 => tp3/q3}/ConnectableProperty.class   | Bin 678 -> 678 bytes
 .../q2 => tp3/q3}/ObservableProperty.class    | Bin 806 -> 806 bytes
 .../univlille/iut/r304/tp4/q1/Observer.class  | Bin 263 -> 0 bytes
 .../iut/r304/tp3/q1/ObserverTestStub.class    | Bin 0 -> 1415 bytes
 .../iut/r304/tp3/q1/TestQ1$MockSubject.class  | Bin 0 -> 681 bytes
 .../iut/r304/{tp4 => tp3}/q1/TestQ1.class     | Bin 2465 -> 2471 bytes
 .../iut/r304/{tp4/q2 => tp3/q3}/TestQ1.class  | Bin 1708 -> 1714 bytes
 .../iut/r304/{tp4/q2 => tp3/q3}/TestQ2.class  | Bin 2485 -> 2485 bytes
 .../iut/r304/tp4/ObserverTestStub.class       | Bin 1409 -> 0 bytes
 .../iut/r304/tp4/q1/TestQ1$MockSubject.class  | Bin 681 -> 0 bytes
 13 files changed, 34 insertions(+), 7 deletions(-)
 rename out/production/main/fr/univlille/iut/r304/{tp4 => tp3}/q1/Observable.class (67%)
 create mode 100644 out/production/main/fr/univlille/iut/r304/tp3/q1/Observer.class
 rename out/production/main/fr/univlille/iut/r304/{tp4/q2 => tp3/q3}/ConnectableProperty.class (62%)
 rename out/production/main/fr/univlille/iut/r304/{tp4/q2 => tp3/q3}/ObservableProperty.class (72%)
 delete mode 100644 out/production/main/fr/univlille/iut/r304/tp4/q1/Observer.class
 create mode 100644 out/test/test/fr/univlille/iut/r304/tp3/q1/ObserverTestStub.class
 create mode 100644 out/test/test/fr/univlille/iut/r304/tp3/q1/TestQ1$MockSubject.class
 rename out/test/test/fr/univlille/iut/r304/{tp4 => tp3}/q1/TestQ1.class (60%)
 rename out/test/test/fr/univlille/iut/r304/{tp4/q2 => tp3/q3}/TestQ1.class (76%)
 rename out/test/test/fr/univlille/iut/r304/{tp4/q2 => tp3/q3}/TestQ2.class (88%)
 delete mode 100644 out/test/test/fr/univlille/iut/r304/tp4/ObserverTestStub.class
 delete mode 100644 out/test/test/fr/univlille/iut/r304/tp4/q1/TestQ1$MockSubject.class

diff --git a/README.md b/README.md
index e4da3cf..908fa1c 100644
--- a/README.md
+++ b/README.md
@@ -84,6 +84,7 @@ classDiagram
     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) :
 <pre>
@@ -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.
 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 :
 
 ```java
 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.
 
 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.
 
-**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
 package fr.univlille.iut.r304.tp3.q3;
 
-public class ConnectableProperty extends ObservableProperty
+public class ConnectableProperty extends ObservableProperty {
 
 public void connectTo(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
diff --git a/out/production/main/fr/univlille/iut/r304/tp4/q1/Observable.class b/out/production/main/fr/univlille/iut/r304/tp3/q1/Observable.class
similarity index 67%
rename from out/production/main/fr/univlille/iut/r304/tp4/q1/Observable.class
rename to out/production/main/fr/univlille/iut/r304/tp3/q1/Observable.class
index 1c4244fded8eba21f7ee2333939fad0bcc10e3d7..f6dccbb84f864223cb8c3aba82ecc451cf307d20 100644
GIT binary patch
delta 29
lcmey$`jvG;IHU2zh<HZhi94zpjVGHhnlT!0&Sval1OS~(319#K

delta 29
lcmey$`jvG;IHSqLh<HYmi94zpO(vT#nlYMe&Sval1OT0d31k2O

diff --git a/out/production/main/fr/univlille/iut/r304/tp3/q1/Observer.class b/out/production/main/fr/univlille/iut/r304/tp3/q1/Observer.class
new file mode 100644
index 0000000000000000000000000000000000000000..05a6e1fb90fd9e915e353d4b3a92d1575634a876
GIT binary patch
literal 263
zcmX^0Z`VEs1_mbvE_MbcMh4ZiBK^|5%(9%!oSans%+eD5B4Yy+{gMJ>{X#>1|D@v7
zqO#N?b_Nzk27#=^vPAuy#JqHU|D>$c<Pt^(w$g%>#FA7-1|1C_A`D7Q%1O1>3}a-l
zBVM@=x~*UXxPtRbi;`2_GILTH8F*pN)B~wyV`N}tU}gXTCKg5pRt7c(kn33)*cliY
N7#TPi7#NrsI025^N9O<l

literal 0
HcmV?d00001

diff --git a/out/production/main/fr/univlille/iut/r304/tp4/q2/ConnectableProperty.class b/out/production/main/fr/univlille/iut/r304/tp3/q3/ConnectableProperty.class
similarity index 62%
rename from out/production/main/fr/univlille/iut/r304/tp4/q2/ConnectableProperty.class
rename to out/production/main/fr/univlille/iut/r304/tp3/q3/ConnectableProperty.class
index ad0999eea2d7db11370cd2eb338c9eea4e64370b..395e282acbcd42d513c8f89c7771314ed4b20d29 100644
GIT binary patch
delta 40
jcmZ3+x{P&#5sR^Yq47jB2MAr23ZWm{f$7bvjE#%{^TP|p

delta 40
jcmZ3+x{P&#5sQg_q0vM$2MAr23ZWm{f$7bvjE#%{^Un*#

diff --git a/out/production/main/fr/univlille/iut/r304/tp4/q2/ObservableProperty.class b/out/production/main/fr/univlille/iut/r304/tp3/q3/ObservableProperty.class
similarity index 72%
rename from out/production/main/fr/univlille/iut/r304/tp4/q2/ObservableProperty.class
rename to out/production/main/fr/univlille/iut/r304/tp3/q3/ObservableProperty.class
index 5033e4acddb0b10a48822592ed62737f2b8e5f20..56d4ad73cdc0228b9b1816323930bbaca3c70368 100644
GIT binary patch
delta 35
ncmZ3+wv25;IE%4<q4C7%6bOBI2BY!h7)CQj<IR&9Co=*7$!H4s

delta 35
ncmZ3+wv25;IE#sXq0z+X6bOBI2BXR37)CQjlg*PECo=*7$$$#`

diff --git a/out/production/main/fr/univlille/iut/r304/tp4/q1/Observer.class b/out/production/main/fr/univlille/iut/r304/tp4/q1/Observer.class
deleted file mode 100644
index bdbc554d07a2311a0819cfaf6d9318e35efccdad..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 263
zcmX^0Z`VEs1_mbvE_MbcMh4ZiBK^|5%(9%!oSans%+eD5B4Yy+{gMI`{X#>1|D@v7
zqO#N?b_Nzk27#=^vPAuy#JqHU|D>$c<Pt^(w$g%>#FA7-1|1C_A`D7Q%1O1>3}a-l
zBVM@=x~*UXxPtRbi;`2_GILTH8F*pN)B~wyV`N}tU}gXTCKg5pRt7c(kn33)*cliY
N7#TPi7#NrsI02BiN9q6o

diff --git a/out/test/test/fr/univlille/iut/r304/tp3/q1/ObserverTestStub.class b/out/test/test/fr/univlille/iut/r304/tp3/q1/ObserverTestStub.class
new file mode 100644
index 0000000000000000000000000000000000000000..a28ffc964afc6d0a6bb8067f988a0753bc43e95b
GIT binary patch
literal 1415
zcmX^0Z`VEs1_mbvGcE=u24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SP6iGJPId+^9tLg(9!3V;v?Be|yv(wk%$%H5{mjx5{UT!n6aA6`WBo!y
zegCB5)S|M~qL9?$lHiikBt{1A^2B1l{F2PH%+wS{2F56maeO=s{0st&44lRJxv61^
zIi;zL42+)a3_^?yf(X}m=9Q$TrxtNB2r`K9Fo-gUF*0yu=9NIzGizviaxq9SNU}3X
z@i0g;$S^Xf6XCSPq?}Yn2DX&clEmZ;Mg}bnA0jlR7FlbCu`|dqGN=-znvsDwwW1(3
zxg<3O>RMjs{Ji3lM5ybT85kI}7#Ucc^HWk88TfrN^HTjvbCXhwLLkl)^2tw5%n3^@
z$^`MDf-EH&nZ=9@`ouXH76I0b3>@jHus{<?Pc3mpbs0x7T$V+{Q!|W_fvvP4C9x!x
zkwJ&3zyUeY8l;b<xHKt?kwKFf2ZA**GT0GsgAXEMK$0oM&XmNGL`DW7Oj$+--r$nN
z<ZR!>0%!m-YiLF>GH?awmlh?bx@CgWfhc-<)dShWpvb_%z{J4FAj`nazyeD43=9k`
zpd`z{z#zjQ&mh3S$e_T$z`(?y$iU9P2+Btcj0{Q)3=FPdeGClzTH6^IwV1auu!9KR
zjbO#f3=9lH3@i)`418eYI2i;O_!tBkR2Uc-co-NN7#R2&R2kG57#J8C)EUH}M(Q&#
zg5_AXwlMInfg8jI78F6!%nH}60oSYx)yyoQg|1ZsNh>p4t0sdM)LuIVCI%)31_m}Q
z>8%V%J^&RTpkQESkOi9{22lkyfq{Vy98e%PYcuFzn8mV{fgKSV5VI5*SQ!*?n5E00
z2lj$C11KCoL0kqZz8Dx7<h4L%Y3Uqb5ZuNfyp@3$6g~o43m7=GwYD*cgDhcY00p@i
z11kdqg9-yEd;}QO7$h0g8RQr=!4@hofbya|-0|`Z5DOU?<QWVY3>lahj2IXgm>C%5
m7#JD28H}O+0l5VfU!XW)M-NyXu*r}J1=$ISP!n*>nF0U@4h;+d

literal 0
HcmV?d00001

diff --git a/out/test/test/fr/univlille/iut/r304/tp3/q1/TestQ1$MockSubject.class b/out/test/test/fr/univlille/iut/r304/tp3/q1/TestQ1$MockSubject.class
new file mode 100644
index 0000000000000000000000000000000000000000..d726b5639e54ddb41d3775227b34ce62123cd72e
GIT binary patch
literal 681
zcmX^0Z`VEs1_mbvWiAFL24;2!79Ivx1~x_p^|T`W(!9*FoXnh@RQ=4-68$1$0~7s{
z0%QF`Lw*0G;?$zD#H5^5Mg}&U%)HDJJ4Oa(4b3nv1`Y;Jb_OmU25tr(Mh3yG#Ii*F
zoW#6zeb2m-)b!LMMh5n>#GKMp|1?GhF%3^m9}E@NTnu~+{Ok+@JPd*iLW~UhcwG{b
zT3ixnsN$QSoE==6l$DxX!pOj%mtT^ZRta%rYEdyGgQy0QJ^o;2)|z3A3@pz1DXEMM
z{63j^seYxoNvTC45KjsD<R>TQge4Ybg7{EDmXeIjVnzl-9}-<;&B(wFaZ(t_>x>L6
z8lE8A88aCf7(E#oxPtRbi;`2_GC{$~4e^m4C|npBIQ&wJOFZ(6OV}9{7#Wm_u$Ym7
z$1^W4wa7UqvA8(3n2~`SDQp-N8Tc5O7(jrDfdv%P42%rI3=9nV42%qn3=9mcTH6^I
zH!?6VFfoWQFfg!z1^F0685kINz-(3qF$Qr41_nk32?j~1W=94lu%Vn<(mNQ~w=wV{
z3;?An1_l8J4hBK6Az~1PP(v6PI2oiEq!}0)m>FcimdY~7foXXLMFs{2E(S&hJ_dOP
HB?cY<i(i!0

literal 0
HcmV?d00001

diff --git a/out/test/test/fr/univlille/iut/r304/tp4/q1/TestQ1.class b/out/test/test/fr/univlille/iut/r304/tp3/q1/TestQ1.class
similarity index 60%
rename from out/test/test/fr/univlille/iut/r304/tp4/q1/TestQ1.class
rename to out/test/test/fr/univlille/iut/r304/tp3/q1/TestQ1.class
index 96d285541ac9cef5378ac6ed300657cc69a0b0a1..9b70a29b761849982c49f89ee428dadff6fdfaaa 100644
GIT binary patch
delta 250
zcmZ1|yj*xfIHU2z2xms)iE|7XjVGR!Vbq;yFTrB0UuZa)nNgQff3hK?B!uhDc#zR}
zGcS`IBct(V9cEW1M$XAatbUx*4BQMd3}OtjlTWgSaw;;gGbk|#GAK`0XG`E!XW(Yg
zU=U)^WRPLdnmmQAPgReBgF&A`fWeSKn!$)cnZcMro56&^h{24(hQXY{nZbg=i@|cT
zJA1vLEdw`$9fKHyJ%cQR1A{t)<K*k?3B0Zh+zf6ELJaN<G7KJ*T{y}`eHgeId>O<T
w{21gI{24SD0vL=L0w-VKs1glj;ARM8kYosFP-ci=&}N8aFk^_C9M9<l0AUm>j{pDw

delta 244
zcmZ23yij;TIHSqL2xmr<iE|7XO(vd|Vbq#vFTrRsnT=7GNyi7m4rDyYXtG(DNsf`x
zWU~>oD-$F4<O)_lPFV(S1~~>X2KmY7SwlIM8Q2+A7z7zqC+o5$@M<z}GiWggF=#W$
zFz8I4#nz{4z`(&^$RNOA%plER!l2Ax%An0)#$d!?!C=E+$>7Xj#o)zYJ=vGNUeKO_
zo56uWjKPsXmcfZZoxyqXUG@ZCcLr_-4+bFyPX-wVugP8<<)VHJ+zkE<VhjNcatwhC
q8Vo@U#tgxeuW?j~hBI(8L@-D)L^3EdL@{VHL^GH%#7s`*bOHcVODf&~

diff --git a/out/test/test/fr/univlille/iut/r304/tp4/q2/TestQ1.class b/out/test/test/fr/univlille/iut/r304/tp3/q3/TestQ1.class
similarity index 76%
rename from out/test/test/fr/univlille/iut/r304/tp4/q2/TestQ1.class
rename to out/test/test/fr/univlille/iut/r304/tp3/q3/TestQ1.class
index 123ebbd8be8230d9ba41d93946ca80ff8c6900c7..c63f32dbf2b562b679837e08411e925fe9c99fb9 100644
GIT binary patch
delta 74
zcmZ3(yNP!~IE%4<q4C6M2M9f13qqfjWYnFwQ3Av<oW!Whs6TOoB$%_=gVBSL(RlJi
OrsE*K@#Yxj0A>I;=M^#l

delta 70
zcmdnQyM}i{IE#sXq0z)>2M9f13qqfjWYn6tQG(HAGBcwtqt0YQMoC7K&3=p?jEp9e
Pr!yS~tJ<8z9KZ|!$+;6D

diff --git a/out/test/test/fr/univlille/iut/r304/tp4/q2/TestQ2.class b/out/test/test/fr/univlille/iut/r304/tp3/q3/TestQ2.class
similarity index 88%
rename from out/test/test/fr/univlille/iut/r304/tp4/q2/TestQ2.class
rename to out/test/test/fr/univlille/iut/r304/tp3/q3/TestQ2.class
index 642e02ee83b5ad7150ba4a96340abf9643665c30..0751e0e46e122f98b0ae37b8c7b6968a9e944091 100644
GIT binary patch
delta 50
qcmdlgyj6HYIE%4<q4C6MM+m(@145rU0j4+4VAN-Xuue0*Vgmr0IuJns

delta 50
qcmdlgyj6HYIE#sXq0z)>M+m(@145rU0j4+4VAN-Xuue0*Vgmr0Nf1E*

diff --git a/out/test/test/fr/univlille/iut/r304/tp4/ObserverTestStub.class b/out/test/test/fr/univlille/iut/r304/tp4/ObserverTestStub.class
deleted file mode 100644
index 98f425f29666fde6fccc351ecb81bb2bb7eb8dbd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1409
zcmX^0Z`VEs1_mbvGcE=u24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SP6iGJPId+^9tLg(9!3VOv?Be|yv(wk%$%H5{mjx5{UT!n6aA6`6Mg@r
z;?$zD)S{5o;*#K!(j-O(?()Q9zx<NSw9M2LMh3<xkXd{@4EziNj0~K``MIfKi8-aI
zj0}vP><mJT41x%!c;=O)rl%HhF$gk<@Gyunh%qv7WagDX)iY~odU7#HFi5g9NbxX8
zGsrM9sN;55p&`_1iAg!Bj0|iksU?ZY8H@~C8a_m5N-eV13}a`IV`NYzN;M+`Z)!zB
zYH~?x3e>f{&iQ%8C5ceiGczzSXfZOdIOnINGBWV{Wag#%mF6a;7KK2ZC*+f#oR|}q
zSd<CkLj_q%GBS%98FcVC7(Mi@85uazQ(++{ke*uNis~$mVz?}ehNos2BLiD$K}upt
zDkFmqQ6U3zpEXDyOL1vZ79)cu9@nA7fi)w89q~5!AW{V+fkNy|Ni0cZWDvrXWn|zD
zE=f$z_Dw8+h90wqW)vd>S8#r5QF5wVCMXezq6e2A$QA}g1`Y-$21W*124)5pP=aS*
zU|<2IR|W<K83uU<0R~0}1qKENCI&?Yb_PaJ4q{+rP-0+Ua0TmQVBpu<&cLX}yp@3+
zMDT6|D^_M;U=U(pVPIeoWME+sV&G&DX5eEGVNhXUVBle3WME+6XHaEOV_;xlWKd@i
zgBq#NzzCLO)!M?qy9RC$8(2^rNi!>4vj$wVE>ttKfEKz|X(X-8aIKmQT2OoK7?>EC
z7#JAXw4}E(Ao&1Pa4;~)Gq5r!fK3pCsDhfnz`zC$D3F`A8FVnrV%f^TjtC8iS;`Eo
z3@SLx(q+&CdqJB46b_&uE&~-@3=9nNS|GEubPg~GZetMM%D@W>9|5fe3>?~8+Ze<_
zmM}Abf?SM&m4Sgloq?4>gF%2nlR=U}i$RV-2W+7N11KZP!yPZr0I?9{K?4Ru1||k0
q1_lOZ21YpsMh0#MW2k>XZUMy?C{EbX16ChwG9*F~abg0FIa2^jzYClI

diff --git a/out/test/test/fr/univlille/iut/r304/tp4/q1/TestQ1$MockSubject.class b/out/test/test/fr/univlille/iut/r304/tp4/q1/TestQ1$MockSubject.class
deleted file mode 100644
index b2b5928bb29ab21ccd330a1a89368f542a08cd23..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 681
zcmX^0Z`VEs1_mbvWiAFL24;2!79Ivx1~x_p^|T`W(!9*FoXnh@RQ=4-68$1$0~7s{
z0u%j0Lw*0G;?$zD#H5^5Mg}&U%)HDJJ4Oa(4b3nv1`Y;Jb_OmU25tr(Mh3yG#Ii*F
zoW#6zeb2m-)b!LMMh5n>#GKMp|1?GhF%3^m9}E@NTnu~+{Ok+@JPd*iLW~UhcwG{b
zT3ixnsN$QSoE==6l$DxX!pOj%mtT^ZRta%rYEdyGgQy0QJ^o;2)|z3A3@pz1DXEMM
z{63j^seYxoNvTC45KjsD<R>TQge4Ybg7{EDmXeIjVnzl-9}-<;&B(wFaZ(t_>x>L6
z8lE8A88aCf7(E#oxPtRbi;`2_GC{$~4e^m4C|npBIQ&wJOFZ(6OV}9{7#Wm_u$Ym7
z$1^W4wa7UqvA8(3n2~`SDQp-N8Tc5O7(jrDfdv%P42%rI3=9nV42%qn3=9mcTH6^I
zH!?6VFfoWQFfg!z1qB#H85kINz-(3qF$Qr41_nk32?j~1W=94lu%Vn<(mNQ~w=wV{
z3;?An1_mJp4hCVcAz~1PP(v6PI2oiEq!}0)m>FcimdY~7foXXLMFs{2E(S&hJ_dOP
HB?cY<lnj*L

-- 
GitLab