Vous êtes sur la page 1sur 7

Soit la description du processus P ci-dessous 

Process P [a,b] :=
a ; b ; P[a,b]
endproc
endproc

Donner l’arbre d’action de la composition de comportements suivante :


P[tic, tac] | P[tic, tac, toc] | P[tic, toc]

Réponse  : Arbre d’action :

|
|
|
( )
/ \
/ \
/ \
| |
P[tic, tac]
|
|
|
( )
/ \
| |
a b

|
|
|
|
|
P[tic, tac]

La notation P[tic, tac] signifie que le processus P est défini avec des paramètres tic et tac, et il est
répété de manière récursive, c'est-à-dire que l'action P est effectuée après a et b. La notation P[tic,
tac, toc] et P[tic, toc] sont des variantes de cette même action, avec des paramètres différents
Les expressions de comportement ci-dessous sont - elles équivalentes ? Justifier.
Expression 1 : a ; b ; stop → elle décrit un comportement qui consiste à effectuer les actions a, b, puis stop dans
l'ordre.
Expression 2 : a ; b ; stop | | | a ; b ; stop → elle décrit un comportement qui consiste à effectuer les actions a,
b, puis stop dans l'ordre, suivi d'un choix entre effectuer ces mêmes actions de nouveau ou ne rien faire.

L’Expression 2 inclut une option supplémentaire qui n'est pas présente dans Expression 1, donc ces deux expressions de
sont pas équivalentes.

Problème : Pouvoir d’expression

En utilisant le processus Max2 dont le comportement est donné ci-dessous, définir le processus Max4 qui va
produire sur le port out le maximum parmi 4 nombres reçus sur les ports in1, in2, in3 et in4.

Process Max2 (a, b, c]:=


a ; b ; c ; stop [] b ; a ; c ; stop
endproc

Réponse  : Le processus Max4 pourrait être défini comme suit:


Process Max4 (in1, in2, in3, in4, out) := Max2(in1, in2, temp1) Max2(in3, in4, temp2)
Max2(temp1, temp2, out) endproc
Ce qui signifie qu'il utilise deux fois le processus Max2 pour trouver le maximum parmi 4 nombres
reçus sur les ports in1, in2, in3 et in4, et ensuite le renvoie sur le port out.

Problèmes des distributeurs de boissons :

Problème 1 : Soit la description du système avec l’opérateur d’entrelacement. Pour simplifier l’analyse, les
récursions ont été éliminées des comportements.

Process Dist1 [piece, cafe, pieceC, cafeC, boitC]:=


DB [piece, cafe] | | | CLIENT [pieceC, cafeC, boitC]
where
Process CLIENT [piece, cafe, boit]:=
piece ; cafe ; boit ; stop
endproc
process DB [piece, cafe]:=
piece ; cafe ; stop
endporc
endproc

Question 1 : Donner l’arbre d’actions du processus Dist1.

L'arbre d'actions du processus Dist1 est le suivant:


Dist1
|
|----DB
||
| |----piece
||
| |----cafe
|
|----CLIENT
|
|----pieceC
|
|----cafeC
|
|----boitC
Chacun des noeuds de l'arbre représente une action qui est effectuée dans le processus
correspondant, et les branches entre les noeuds représentent les actions qui sont effectuées dans
l'ordre logique.
Ainsi, le processus Dist1 commence par appeler le processus DB, qui effectue les actions "piece" et
"cafe" dans cet ordre. Ensuite, le processus Dist1 appelle le processus CLIENT, qui effectue les
actions "pieceC", "cafeC" et "boitC" dans cet ordre.

Problème 2 : Soit la description en Lotos ci-dessous. Des récursions dans les comportements des
composants ont été introduites. Une synchronisation entre les composants est mise en place.

Process Dist2 [piece, cafe, boit, nettoie] : =


DB [piece, cafe, nettoie] | [piece, cafe]| | CLIENT [piece, cafe, boit]
where
Process CLIENT [piece, cafe, boit]:=
piece ; cafe ; boit ; CLIENT [piece, cafe, boit]
endproc
process DB [piece, cafe, nettoie]:=
piece ; cafe ; nettoie ; DB [piece, cafe, nettoie]
endporc
endproc

Question 1 : Donner le schéma architectural de la solution ci-dessus.

Le schéma architectural de la solution ci-dessus est le suivant:

• Dist2 : composant principal qui synchronise les composants DB et CLIENT. Il prend en


entrée les ports piece, cafe, boit, nettoie et utilise la synchronisation pour assurer que les
actions sont effectuées dans le bon ordre.
• DB : composant qui gère les pièces et le café, et nettoie le matériel. Il prend en entrée les
ports piece, cafe, nettoie et effectue les actions dans cet ordre en boucle.
• CLIENT : composant qui prend les pièces, le café, et boit. Il prend en entrée les ports piece,
cafe, boit et effectue les actions dans cet ordre en boucle.
Ce schéma montre que les composants DB et CLIENT sont en boucle, effectuant des actions en
parallèle, mais synchronisées par le composant Dist2 pour assurer que les actions sont effectuées
dans le bon ordre.

Question 2 : Donner l’arbre d’actions de chaque processus composant le processus Dist.

L'arbre d'actions pour le processus Dist2 est le suivant:

• Dist2 : composant principal qui synchronise les composants DB et CLIENT


• DB [piece, cafe, nettoie]
• piece
• cafe
• nettoie
• DB [piece, cafe, nettoie] (boucle)
• [piece, cafe] (synchronisation avec CLIENT)
• CLIENT [piece, cafe, boit]
• piece
• cafe
• boit
• CLIENT [piece, cafe, boit] (boucle)

L'arbre d'actions pour le processus DB est le suivant:


• DB [piece, cafe, nettoie]
• piece
• cafe
• nettoie
• DB [piece, cafe, nettoie] (boucle)

L'arbre d'actions pour le processus CLIENT est le suivant:


• CLIENT [piece, cafe, boit]
• piece
• cafe
• boit
• CLIENT [piece, cafe, boit] (boucle)

Notez que dans l'arbre d'actions de Dist2, le processus DB et le processus CLIENT sont en boucle,
effectuant des actions en parallèle, mais synchronisées par le composant Dist2 pour assurer que les
actions sont effectuées dans le bon ordre.

Question3 : Donner l’arbre d’actions du processus Dist.

L'arbre d'actions du processus Dist2 serait le suivant :


Dist2
|
|---DB
|
|---piece
|
|---cafe
|
|---nettoie
|
|---DB
|
|---piece
|
|---cafe
|
|---nettoie
|
|---DB
.
.
.
|
|---CLIENT
|
|---piece
|
|---cafe
|
|---boit
|
|---CLIENT
|
|---piece
|
|---cafe
|
|---boit
|
|---CLIENT
.
.
.
Remarque: on peut remarquer que les arbres d'action des processus DB et CLIENT sont des
récursions infinies car ils sont définis de manière récursive.

Question 4 : Cette description ne permet de servir qu’un client à la fois et une boisson unique.
Quelles modifications proposez-vous pour que le distributeur puisse délivrer du café (resp. du
chocolat) en fonction de la pièce introduite Pièce20 (resp. Pièce 50).
Une des modifications que je proposerais pour que le distributeur puisse délivrer du café en fonction
de la pièce introduite est d'ajouter une condition dans le processus CLIENT pour vérifier quelle pièce
est introduite avant de délivrer le café. Cela pourrait ressembler à ceci:
Process Dist2 [piece, cafe, boit, nettoie] : =
DB [piece, cafe, nettoie] | [piece, cafe]| | CLIENT [piece, cafe, boit]
where
Process CLIENT [piece, cafe, boit]:=
piece;
if piece = Pièce20 then
cafe;
boit;
endif;
CLIENT [piece, cafe, boit]
endproc
process DB [piece, cafe, nettoie]:=
piece ; cafe ; nettoie ; DB [piece, cafe, nettoie]
endporc
endproc

Avec cette modification, le processus CLIENT ne délivrera du café que si la pièce introduite est
Pièce20. Il sera nécessaire de faire une modification similaire pour la pièce Pièce50 pour délivrer du
chocolat. Il serait également possible d'ajouter des branches supplémentaires à l'instruction if pour
prendre en compte d'autres pièces et délivrer d'autres boissons.

Vous aimerez peut-être aussi