3.6.2. Rappel sur les statecharts

Le langage des statecharts appartient à la famille des formalismes inspirés du paradigme ‘automate d’état fini’, qu’ils enrichissent par l’introduction d’un ensemble d’états hiérarchisés [Harel, 1987]. Un état d’un statechart peut se décomposer en des sous-états. Si un état S est actif, certains sous-états de S, s’il en possède, seront actifs, dépendant du type de S.

Un état S peut être de type :

  • Basique s’il ne comporte pas de sous-états,
  • OU et alors, lorsque S est actif, un et un seul état de ses sous-états est actif,
  • ET et alors, lorsque S est actif, tous ses sous-états sont actifs.

Un état de type ET exprime donc une décomposition concurrente et un état de type OU une décomposition séquentielle. Un sous-état peut à son tour se décomposer en sous-états. La structure hiérarchique des états d’un statechart permet de dire par exemple qu’un état S1 est un descendant de l’état S2, ou inversement, que S2 est un ancêtre de S1.

Une autre caractéristique des statechart est la communication par diffusion d’événements, qui se produit lors des changements d’état. Ces derniers sont décrits par les transitions. Une transition τ = (S0, λ, Sd) est définie par son état origine S0, son état destination Sd et son étiquette λ. Cette dernière est constituée d’une expression d’événement ev, d’une expression conditionnelle cond et d’une expression d’action act, suivant la syntaxe ev [cond] / act.

Pour qu’une transition τ puisse se déclencher, il faut :

  • que l’état S 0 soit actif,
  • que l’expression d’événement ev s’évalue à vrai,
  • que la condition cond s’évalue à vrai,

Dans ce cas l’état S0 devient inactif, l’état Sd devient actif et les actions décrites par act sont exécutées.

A l’intérieur d’un état du statechart, l’action différer (defer en anglais) est utilisée pour définir des événements différés, c’est-à-dire des événements qui, s’ils ne déclenchent pas de transition lors de leur occurrence, ne sont pas perdus mais mémorisés dans une file d’attente jusqu’à ce qu’ils soient acceptés ou que le statechart soit dans un état où ils ne sont plus différés (dans ce dernier cas, les événements sont alors perdus).

Le langage des statecharts inclut de nombreuses primitives et constructions dont certaines sont illustrées par l’exemple qui suit.

Considérons le statechart de la figure 3.15. Les états T1 et P1 peuvent être actifs en même temps car ils sont les descendants de l’état S qui est de type ET. Si l’événement est alors présent, la transition (T1, (A [X > 0] / B), T2) sera déclenchée, à condition que la valeur de la variable X soit supérieure à zéro. Dans ce cas, l’état T1 devient inactif, l’état T2 devient actif, l’événement A disparaît et l’événement B est provoqué et diffusé. Au pas suivant, l’occurrence de B déclenche la transition sortant de P1. Par l’intermédiaire du connecteur c. La valeur de la variable Y déterminera alors si l’état destination est P2 ou P3. Au cas où Y = 0, P3 sera activé. L’identificateur de l’état P2 est décoré du symbole > pour signifier qu’une action statique lui est associée. A l’instant d’activation de P2 (déclencheur entering), les instructions indiquées dans la figure 3.15, à l’intérieur de cet état sont exécutées.

F
Fig. 3.15 - Exemple simple d’un modèle statechart