• Aucun résultat trouvé

4.4 Règles de transformation vers BPEL

5.1.2 Partie contrôle de LOTOS

Les définitions de processus LOTOS décrivent le contrôle et les définitions de type décrivent les données. Nous nous intéressons dans cette sous-section à la partie contrôle de LOTOS car c’est celle qui prend le plus d’importance dans notre approche de dévelop-pement. En effet, elle permet de décrire les structures de contrôles d’un workflow, ce qui est essentiel à l’analyse du comportement de la composition.

La partie contrôle de LOTOS est issue de la recherche sur les algèbres de proces-sus. Celle-ci est inspirée notamment du travail de Hoare sur CSP [Hoa78] et de Mil-ner sur CCS [Mil82]. Syntaxiquement parlant, le contrôle est décrit en LOTOS par les termes d’une algèbre à travers des expressions mathématiques appelées comportements et construites en utilisant les opérateurs de contrôle fournis par LOTOS. Ces opérateurs sont résumés dans le Tableau 5.1 où G fait référence à une porte, X à une variable, P à un processus, S à une sorte, V à une valeur, E à une expression booléenne et B à un comportement. Une porte peut être vue comme un canal de communication entre des processus s’exécutant de manière concurrentielle. Lorsqu’un processus communique avec un autre à travers une porte, on parle de rendez-vous. Il s’agit du seul moyen en LOTOS pour exprimer la communication et la synchronisation. Une sorte nomme un domaine de valeurs. Par exemple, BOOL dénote la sorte des valeurs booléennes et NAT celle des entiers naturels.

Opérateur de contrôle Signification stop Comportement inactif exit Terminaison avec succès G ; B Rendez-vous sur la porte G G ! X Envoi d’une valeur par la porte G G ? X:S Réception d’une valeur depuis la porte G choice X:S [] B Itération sur les valeurs de S

let X:S=V in B Définition de la variable X dans B B1 [] B2 Choix non-déterministe [E] -> B Condition d’action

B1 |[G1,...,Gn]| B2 Parallélisme avec synchronisation partielle B1 ||| B2 Parallélisme sans synchronisation

B1 || B2 Parallélisme avec synchronisation totale B1 ≫ B2 Composition séquentielle

P [G1,...,Gn] (V1,...,Vm) Appel à un processus Table 5.1 – Opérateurs de contrôle dans LOTOS

5.1. Langage de spécification formelle LOTOS 95 On appelle signal ou action la proposition effectuée par un comportement qui désire participer à un rendez-vous au niveau d’une porte. Un signal est composé d’une porte et d’une liste d’offres pour l’émission ou la réception de valeurs typées. Par exemple, le signal "OUTPUT !2 !X1 !X2" signifie que l’on cherche à émettre simultanément les trois valeurs 2, X1 et X2 sur la porte OUTPUT. Au contraire, le signal "INPUT ?A:NAT ?B:NAT ?C:NAT" indique que l’on s’attend à recevoir simultanément, sur la porte INPUT, trois entiers natu-rels qui seront affectés aux variables A, B et C. Il est également possible de combiner des opérations d’émission et de réception ainsi que de préciser des conditions sur les valeurs émises ou reçues. Ainsi, l’instruction "EXCHANGE !2 ?X1:NAT ?X2:NAT [X1 < X2]" indique que l’on désire émettre la valeur 2 tout en recevant deux entiers naturels affectés à X1 et X2. De plus, le rendez-vous est conditionné par l’expression ou garde [X1 < X2], ce qui signifie qu’il ne sera accepté que si la valeur de X1 est strictement inférieure à celle de X2. LOTOS possède également des opérateurs séquentiels : les opérateurs ";" et "≫". L’opérateur ";" permet de spécifier le rendez-vous sur son opérande de gauche qui doit forcément être un signal. A la réception de ce signal, le comportement spécifié en opé-rande de droite de l’opérateur sera exécuté. L’opérateur ";" est asymétrique puisque son opérande de gauche est une porte, éventuellement avec des offres alors que son opérande de droite est un comportement. LOTOS possède un opérateur similaire dit de composi-tion séquentielle dont les deux opérandes sont des comportements: "B1 ≫ B2". Grâce à cet opérateur, les comportements B1 et B2 seront exécutés séquentiellement. L’opérateur "≫" est parfois appelé en anglais enabling operator car la terminaison avec succès de B1

autorise l’exécution de B2.

Le seul opérateur de choix disponible dans LOTOS est "[]". L’opérateur "[]" permet de réaliser un choix non-déterministe entre ses deux opérandes qui sont forcément des comportements. Ce choix peut cependant devenir déterministe lorsque les comportements en opérandes sont protégés par des gardes mutuellement exclusives.

D’autres opérateurs permettent de manipuler des valeurs et de créer des variables. L’opérateur "[E] -> B" permet de garder l’exécution du comportement B par une ex-pression booléenne E. B ne sera ainsi exécuté que si E est évaluée comme étant vraie. L’opérateur "let X:S=V in B" permet de déclarer une variable X de la sorte S et initiali-sée à V, visible au sein du comportement B. Une fois déclarée, il est impossible de modifier la valeur d’une variable. Enfin, l’opérateur "choice X:S [] B" permet d’itérer, de ma-nière non-déterministe, sur les valeurs du domaine identifié par la sorte S et d’exécuter le

comportement B pour chacune de ces valeurs. La valeur actuelle de l’itération est affectée à la variable X.

LOTOS intègre également trois opérateurs pour le parallélisme. Ces opérateurs peuvent s’appliquer à des comportements ou à des processus. L’opérateur "|||" exprime l’exécu-tion simultanée de deux comportements sans aucune synchronisal’exécu-tion ou communical’exécu-tion entre eux. Les deux comportements sont alors complètement indépendants. On parle alors d’entrelacement ou interleaving en anglais. Au contraire, l’opérateur "||" exprime que les deux comportements parallèles sont synchronisés au niveau de toutes les portes. On parle alors de synchronisation complète. Enfin, l’opérateur "|[G1, . . . Gn]|" exprime que les deux comportements parallèles peuvent se synchroniser ou communiquer uniquement au niveau des portes G1, . . . Gn.

De la même manière que les langages algorithmes permettent de définir des procé-dures pour regrouper un ensemble d’instructions, LOTOS permet de donner un nom à un fragment de programme en définissant un processus. Un processus est défini en LOTOS de la manière suivante :

process P[G0, . . . Gm] (X0:T0, . . . Xn:Tn): f unc := B

endproc

La définition du processus est paramétrée par la liste statique, entre crochets, des portes sur lesquelles le processus peut effectuer des rendez-vous. Un processus peut éga-lement prendre en paramètre des variables Xi et type Ti qui seront visibles à l’intérieur du processus. func prend la valeur exit dans le cas où le processus retourne une valeur, et noexit dans le cas contraire. B désigne le comportement interne du processus et peut mettre en œuvre tout opérateur vu dans cette section.

Une présentation plus complète et en français est fournie par Garavel dans [Gar89, Gar90].