• Aucun résultat trouvé

4 Concepts supplémentaires dans le SDL de base

4.13 Valeur importée et valeur exportée

s1 s2 s3 c_s

t3 t2

t1

e_c

s1

t1

s2,s3

ec

s1 s2 s3

t1 t2

ec

T1007870-93/d24 e1

e_c

ec

c_s

t3 e1

state 1

est transformé en

n:=n+1 state 1_

false

sx.emptyQ (newn) sx.emptyQ(n)

to self

(false) (true) (false) (true)

n=newn

state 1_

false state 1_

false

state 1_

true

state 1_

true

(true)

(false)

(false) (true)

sx.emptyQ (newn)

n=newn

state 1_

true

FIGURE 4.12.1/Z.100

Transformation d’un signal continu el d’une condition de validation dans le même état

IGURE 4.12.1/Z.100...[D24] = 20 CM

Cette opération peut être réalisée en utilisant l'abréviation valeur importée et exportée. On peut également utiliser une abréviation pour exporter des valeurs en direction d'instances de processus dans le même bloc, auquel cas elle offre une alternative à l'utilisation de valeurs révélées.

Grammaire textuelle concrète

<remote variable definition>::=

remote

<remote variable name> {,<remote variable name>}* <sort> [ nodelay ]

{, <remote variable name> {,<remote variable name>}* <sort> [ nodelay ]}*

<end>

<imported variable specification> ::=

imported

<remote variable identifier> {, <remote variable identifier> }* <sort>

{, <remote variable identifier> {, <remote variable identifier> }* <sort>}* <end>

<import expression> ::=

import (<remote variable identifier> [, <destination>])

<export> ::=

export ( <variable identifier> {, <variable identifier> }*)

nodelay désigne des canaux implicites sans retard pour l'échange de signaux résultant de la transformation décrite dans Modèle.

L'identificateur d'une spécification <imported variable specification> doit désigner une définition <remote variable definition> de la même sorte qui peut être implicite (voir ci-dessous).

L'identificateur <remote variable identifier> suivant as dans une définition de variable exportée doit désigner une définition <remote variable definition> de la même sorte que la définition de la variable exportée. Dans le cas où il n'y a pas de clause as, la définition de la variable distante dans l'unité de portée englobante la plus proche ayant le même nom et la même sorte que la définition de la variable exportée est désignée.

Pour chaque expression <import expression>, il doit exister une spécification <imported variable spécification> de l'identificateur de la variable distante dans un type de processus, une définition de processus, un type de service ou une définition de service englobant(e).

Pour chaque variable importée dans un processus, il doit exister au moins un processus d'exportation.

Les définitions de variables distantes peuvent être omises et, dans ce cas, il existe une définition de variable distante implicite pour chaque variable exportée. La définition de variable distante a le même nom et la même sorte que la variable exportée et elle est insérée dans l'unité de portée dans laquelle la sorte est définie. La définition de variable distante implicite n'a pas de propriété nodelay.

L'identificateur <variable identifier> dans <export> doit désigner une variable définie avec exported.

Grammaire graphique concrète

<export area>::=

<task symbol> contains <export>

Sémantique

Une définition <remote variable definition> définit le nom et la sorte des variables importées et exportées.

Une définition de variable exportée est une définition de variable avec le mot clé exported.

L'association entre une spécification <imported variable specification> et une définition <exported variable definition>

est établie par la référence de cette spécification et de cette définition à la même définition <remote variable definition>.

L'instance de processus à laquelle appartient une variable dont les valeurs sont exportées vers d'autres instances de processus est appelée exportateur de la variable. Les autres instances de processus sont les importateurs de la variable.

La variable est appelée variable exportée.

Une instance de processus peut être à la fois importatrice et exportatrice, mais elle ne peut importer à partir de l'environnement ou exporter vers l'environnement.

a) Opération d'export

Les variables exportées ont le mot clé exported dans leurs définitions <variable definition> et ont une copie implicite qu'elles utilisent dans les opérations d'import.

Une opération d'export est l'exécution d'un <export> par lequel un exportateur divulgue la valeur courante d'une variable exportée. Une opération d'export provoque le stockage de la valeur courante de la variable exportée dans sa copie implicite.

b) Opération d'import

Pour chaque spécification <imported variable specification> dans un importateur, il y a un ensemble de variables implicites ayant un nom unique et la sorte donnés dans la spécification <imported variable specification>. Ces variables implicites sont utilisées pour le stockage des valeurs importées.

Une opération d'import est l'exécution d'une expression <import expression> dans laquelle un importateur accède à la valeur d'une variable exportée. La valeur est stockée dans une variable implicite indiquée par l'identificateur <import identifier> dans l'expression <import expression>. L'exportateur contenant la variable exportée est spécifié par la <destination> dans l'expression <import expression>. Si aucune

<destination> n'est spécifiée, l'importation provient alors d'une instance de processus arbitraire exportant la même variable distante. L'association entre la variable exportée dans l'exportateur et la variable implicite dans l'importateur est spécifiée par leur référence commune à la même variable distante dans la définition de variable exportée et la spécification <imported variable specification>.

Modèle

Une opération d'import est modélisée par un échange de signaux. Ces signaux sont implicites et sont acheminés sur des canaux et des acheminements de signaux implicites. L'importateur envoie un signal vers l'exportateur et attend la réponse. En réponse à ce signal, l'exportateur renvoie un signal vers l'importateur avec la même valeur qui se trouve contenue dans la copie implicite de la variable exportée.

Si une initialisation par défaut est attachée à la variable d'export ou si la variable d'export est initialisée lorsqu'elle est définie, la copie implicite est aussi initialisée, et avec la même valeur que la variable d'export.

Il y a deux définitions <signal definition> implicites pour chaque définition <remote variable definition> dans une définition de système. Les noms <signal name> dans ces définitions <signal definition> sont désignés respectivement par xQUERY et xREPLY, où x désigne le nom <name> de la définition <remote variable definition>. Les signaux sont définis dans la même unité de portée que la définition <remote variable definition> La copie implicite de la variable exportée est appelée imcx.

a) Importateur

L'expression <import expression> 'import (x, destination)' est transformée en ce qui suit, où la clause to est omise, si la destination n'est pas donnée:

output xQUERY to destination;

Attendre dans l'état xWAIT, en sauvegardant tous les autres signaux;

input xREPLY (x);

Dans tous les autres états, xREPLY est sauvegardé.

Remplacer l'expression <import expression> par x, (le nom <name> de la variable implicite);

b) Exportateur

A tous les états <state> de l'exportateur, exception faite des états implicites, dérivés d'une importation, la partie <input part> suivante est ajoutée:

input xQUERY;

output xREPLY (imcx) to sender/* état suivant identique*/

L'<export> 'export (x)' est transformé en ce qui suit:

task imcx := x, NOTES

1 Un blocage fatal peut se produire en utilisant la construction d'import, particulièrement si aucune <destination> n'est donnée, ou si <destination> ne désigne pas une expression <PId expression> d'un processus dont la spécification garantit l'existence au moment de la réception du signal xQUERY.

2 Le caractère facultatif des définitions de variables distantes est introduit pour assurer la compatibilité avec le SDL-88 et n'est pas recommandé pour les nouvelles descriptions SDL.