update mermaid

This commit is contained in:
tuanvu
2025-12-21 13:59:07 +01:00
parent 63fa3e966b
commit 3ad1ffe03c
9 changed files with 134 additions and 20 deletions

125
README.md
View File

@@ -8,12 +8,125 @@
## Diagramme de classe UML :
```mermaid
graph TD
A[Start] --> B[Push element]
B --> C{Heap empty?}
C -- Yes --> D[Insert as root]
C -- No --> E[Bubble up]
E --> F[Heap property restored]
classDiagram
Capteur <|.. CapteurImpl
AlgoDiffusion <|.. DiffusionAtomique
AlgoDiffusion <|.. DiffusionEpoque
AlgoDiffusion <|.. DiffusionSequentielle
CapteurAsync <|.. Canal
ObserverDeCapteurAsync <|.. Canal
ObserverDeCapteur <|.. Afficheur
Callable <.. UpdateReq
Callable <.. GetValueReq
Canal "1" --> "1" ObserverDeCapteur
CapteurImpl "1" o-- "0..*" ObserverDeCapteurAsync
CapteurImpl "1" --> "1" AlgoDiffusion
Canal "1" --> "1" Capteur
class Capteur{
<<interface>>
+attach(o: ObserverDeCapteurAsync):void
+tick() :void
+getValue():int
+getValueDiffusion():int
}
class CapteurImpl{
-value : int
-diffusion : AlgoDiffusion
#observers : List~ObserverDeCapteurAsync~
-lock : boolean
-initialTime : long
+attach(o: ObserverDeCapteurAsync):void
+tick() :void
+setAlgoDiffusion( diffusion: AlgoDiffusion) : void
+getValue():int
+getValueDiffusion():int
+stop() : void
+isStop() :void
}
class AlgoDiffusion{
<<interface>>
+execute() : void
+getValue() : int
}
class DiffusionAtomique{
+capteur : CapteurImpl
-futures : List~Future~?~~
-values : Queue~Integer~
+DiffusionAtomique(c:CapteurImpl)
+execute():void
+getValue():int
}
class DiffusionEpoque{
+capteur : CapteurImpl
-futures : Future~?~[]
+DiffusionEpoque(c:CapteurImpl)
+execute():void
+getValue():int
}
class DiffusionSequentielle{
+capteur : CapteurImpl
-futures : List~Future~?~~
-value : int
+DiffusionSequentielle(c:CapteurImpl)
+execute():void
+getValue():int
}
class CapteurAsync{
<<interface>>
getValue() : Future~Integer~
}
class ObserverDeCapteurAsync{
<<interface>>
update() : Future~?~
}
class Canal{
- scheduler : scheduler
- afficher : ObserverdeCapteur
- capteur : Capteur
+Canal(capteur: Capteur, scheduler: Scheduler, afficher: ObserverdeCapteur)
+update() : Future~?~
+getValue() : Future~Integer~
}
class ObserverDeCapteur{
<<interface>>
update(capteurAsync : CapteurAsync) : void
}
class Afficheur{
-id : int
+vals : ArrayList~Integer~
+setId(id : int): void
+update(capteurAsync : CapteurAsync)
}
class Callable~V~{
<<interface>>
call() : V
}
class GetValueReq{
-capteur : Capteur
+GetValueReq(capteur : Capteur)
+call() : Integer
}
class UpdateReq{
-canalProxy : CapteurAsync
-afficheur : ObserverdeCapteur
+UpdateReq(canalProxy : CapteurAsync, afficheur : ObserverdeCapteur)
+call() : Void
}
class Scheduler{
- scheduler : ScheduledExecutorService
+ Scheduler(nbCanaux : int)
+ getScheduler(): ScheduledExecutorService
+ enquete(task : Callable<T>, delay : long) : Future~T~
}
```
## Stratégies de diffusions :

View File

@@ -10,8 +10,8 @@ public class DiffusionEpoque implements AlgoDiffusion {
public CapteurImpl capteur;
private Future<?>[] futures;
public DiffusionEpoque(CapteurImpl capteur){
this.capteur = capteur;
public DiffusionEpoque(CapteurImpl c){
this.capteur = c;
this.futures = new Future<?>[capteur.observers.size()];
}

View File

@@ -7,14 +7,14 @@ import java.util.concurrent.Future;
import interfaces.AlgoDiffusion;
import interfaces.ObserverDeCapteurAsync;
public class DiffusionSequencielle implements AlgoDiffusion {
public class DiffusionSequentielle implements AlgoDiffusion {
public CapteurImpl capteur;
private List<Future<?>> futures;
private int value;
public DiffusionSequencielle(CapteurImpl capteur){
this.capteur = capteur;
public DiffusionSequentielle(CapteurImpl c){
this.capteur = c;
this.futures = new ArrayList<Future<?>>();
}

View File

@@ -11,6 +11,7 @@ public class GetValueReq implements Callable<Integer> {
}
//AO2 - concrete MI
@Override
public Integer call() {
return capteur.getValueDiffusion();
}

View File

@@ -10,7 +10,7 @@ public class Scheduler {
this.scheduler = Executors.newScheduledThreadPool(nThread);
}
public ScheduledExecutorService getScheculer(){
public ScheduledExecutorService getScheduler(){
return this.scheduler;
}

View File

@@ -6,7 +6,7 @@ import impl.Canal;
import impl.CapteurImpl;
import impl.DiffusionAtomique;
import impl.DiffusionEpoque;
import impl.DiffusionSequencielle;
import impl.DiffusionSequentielle;
import impl.Scheduler;
@@ -19,7 +19,7 @@ public class main {
CapteurImpl c = new CapteurImpl();
DiffusionAtomique algoAtom = new DiffusionAtomique(c);
DiffusionSequencielle algoSeq = new DiffusionSequencielle(c);
DiffusionSequentielle algoSeq = new DiffusionSequentielle(c);
DiffusionEpoque algoEpoq = new DiffusionEpoque(c);
//algoEpoq.capteur = c;
@@ -32,7 +32,7 @@ public class main {
c.attach(canal);
}
ScheduledExecutorService clock = scheduler.getScheculer();
ScheduledExecutorService clock = scheduler.getScheduler();
clock.scheduleAtFixedRate(() -> c.tick(), 0, 500, TimeUnit.MILLISECONDS);
}
}

View File

@@ -58,7 +58,7 @@ public class TestAlgoDiffusionAtom {
c.attach(canal);
}
ScheduledExecutorService clock = scheduler.getScheculer();
ScheduledExecutorService clock = scheduler.getScheduler();
ScheduledFuture<?> future = clock.scheduleAtFixedRate(() -> c.tick(), 0, 500, TimeUnit.MILLISECONDS);
for(int i = TEST_TIME/6; i>0; i--){ //attend que le capteur génère des valeurs

View File

@@ -58,7 +58,7 @@ public class TestAlgoDiffusionEpoq {
DiffusionEpoque algo = new DiffusionEpoque(c);
c.setAlgoDiffusion(algo);
ScheduledExecutorService clock = scheduler.getScheculer();
ScheduledExecutorService clock = scheduler.getScheduler();
ScheduledFuture<?> future = clock.scheduleAtFixedRate(() -> c.tick(), 0, 500, TimeUnit.MILLISECONDS);
Thread.sleep(10000);

View File

@@ -13,7 +13,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import impl.Afficheur;
import impl.Canal;
import impl.CapteurImpl;
import impl.DiffusionSequencielle;
import impl.DiffusionSequentielle;
import impl.Scheduler;
public class TestAlgoDiffusionSeq {
@@ -47,7 +47,7 @@ public class TestAlgoDiffusionSeq {
Scheduler scheduler = new Scheduler(NB_CANAUX);
CapteurImpl c = new CapteurImpl();
DiffusionSequencielle algo = new DiffusionSequencielle(c);
DiffusionSequentielle algo = new DiffusionSequentielle(c);
c.setAlgoDiffusion(algo);
for(int i = 0; i<NB_CANAUX; i++){
@@ -58,7 +58,7 @@ public class TestAlgoDiffusionSeq {
c.attach(canal);
}
ScheduledExecutorService clock = scheduler.getScheculer();
ScheduledExecutorService clock = scheduler.getScheduler();
ScheduledFuture<?> future = clock.scheduleAtFixedRate(() -> c.tick(), 0, 500, TimeUnit.MILLISECONDS);
Thread.sleep(10000);