## Description comportementale en SysML : le diagramme d'état

### Fondamental :

Objectif : Décrire les différents états pris par le système pour un scénario d'utilisation donné.

Le diagramme d'état (stm : state machine diagram) est un diagramme normalisé SysML qui permet de décrire la succession des différents états pris par un système et les transitions qui déclenchent le passage d'un état à un autre.

### Exemple : Cas de l'ouvre-portail FAAC

Diagramme d'état de l'ouvre-portail FAAC sans gestion des obstacles

### Notion d'état

Un état est une période de la vie du système. Pendant cette période, le système peut être actif ou non : il peut accomplir une ou plusieurs tâches (actions et/ou activités) ou simplement attendre un l’occurrence d'un évènement pour évoluer vers un autre état.

Chaque état est dessiné sous la forme d'un rectangle aux coins arrondis, contenant son nom, ainsi que les actions et/ou activités qui lui sont associées.

Dans un diagramme d'état, à un instant donné, un seul état est actif.

#### Remarque : Etat initial et état final

Il existe deux états particuliers :

- l'état initial : pseudo-état qui indique un point d'entrée dans un graphe ;

- l'état final : non obligatoire, il indique que le système décrit n'a plus d'état actif.

### Activité et actions associées à un état

A un état, on peut principalement rattacher :

- une action d'entrée, précédée de « entry/ » ;

- une activité, précédée de « do/ » ;

- une action de sortie, précédée de « exit/ ».

Les actions sont instantanées et ne peuvent pas être interrompues. On peut également les retrouver dans les effets associés aux transitions.

A contrario, une activité peut prendre du temps et peut être interrompue. On distingue ainsi les activités finies, à durée limitée dans le temps (ex : sortie de la tige d'un vérin) et les activités sans fin (ex : rotation d'un moteur).

#### Remarque :

Un état peut très bien ne contenir ni action, ni activité. Il sert alors à attendre le déclenchement de la transition suivante. On parle d'état d'attente.

### Transition

Une transition représente le passage instantané d'un état vers un autre. Une transition ne peut donc pas avoir de durée. On appelle état source l'état de départ d'une transition et état destination l'état cible.

Une transition est généralement déclenchée par un évènement, auquel peuvent être associés une condition de garde et/ou un effet.

#### Remarque : Evènements

Il existe deux types d'évènements particuliers couramment rencontrés dans les diagrammes d'état :

- l'évènement temporel : il permet soit de réaliser une temporisation : after(durée), soit de déclencher la transition à un instant donné : at(temps absolu).

- l'évènement de changement : une valeur a changé de telle sorte que la transition soit franchie : when(a=b)

  Attention, l'évènement de changement ci-dessus se produit à l'instant précis où la variable a prend la valeur b. Ne pas confondre avec la condition de garde [a=b].

#### Fondamental : Conditions de franchissement d'une transition :

- A l'occurence de l'évènement, la transition est franchie, sans condition. L'éventuelle activité est interrompue.

- A l'occurence de l'évènement, la condition de garde est évaluée. La transition n'est franchie que si cette condition est vraie. L'éventuelle activité est interrompue. Si elle n'est pas vraie, l'évènement est perdu et il faut attendre une seconde occurrence de cet évènement pour éventuellement franchir la transition si cette fois la condition de garde est vraie.

- S'il n'y a pas d'évènement déclencheur explicite, celui-ci est la fin de l'éventuelle activité (qui doit donc être une activité finie). S'il n'y a pas d'activité, l'évènement déclencheur est l'entrée dans l'état. Lors de l'évènement déclencheur, la condition de garde est évaluée, ce qui conduit ou pas au franchissement.

- Si aucun évènement déclencheur explicite, condition de garde ni effet n'est associé à la transition, le franchissement est immédiat dès la fin de l'activité ou dès l'entrée dans l'état s'il n'y a pas d'activité.

#### Attention :

- Dans le cas d'une transition sans évènement explicite (cas 3 et 4) , si l'état précédent possède une activité, celle-ci doit nécessairement être de type finie sous peine de rester bloqué dans l'état.

- Dans le cas d'une transition sans évènement explicite mais avec condition de garde (cas 3), la condition de garde n'est évaluée qu'une seule fois lors de l’évènement délencheur (fin de l'activité ou entrée dans l'état s'il n'y a pas d'activité). Si à cet instant la condition de garde est fausse, on se retrouve bloqué dans l'état. Une solution peut être d'utiliser des transitions réflexives.

Autres types de transitions couramment rencontrées :

- Transition réflexive : elle entraîne une sortie d'état puis un retour dans ce même état. Selon les actions et activités associées à cet état, une transition reflexive n'est généralement pas sans conséquence.

- Transition conditionnelle : plusieurs transitions peuvent quitter un même état et une seule d'entre elles doit être déclenchée. Les évènements et/ou les conditions de garde doivent donc être exclusives.

  Il est également possible d'utiliser une condition particulière, notée [else], sur un des segments en aval d'un point de décision. Ce segment n'est franchissable que si les conditions des autres segments sont toutes fausses.

#### Exemple : Cas de l'ouvre-portail FAAC

Diagramme d'état de l'ouvre-portail FAAC avec gestion des obstacles

### Etat sous machine, état composite et état orthogonal

#### Etat sous machine

Lorsque le comportement à décrire risque d'être peu lisible car trop complexe, ou fait apparaître des parties "séparables" de l'ensemble, il est alors possible d'extraire ces parties pour en faire des sous-graphes séparés, hiérarchiquement inférieurs au graphe principal. On englobe ces sous-graphes dans un état appelé "état sous machine" .

#### Etat composite

Un état composite, aussi appelé super-état, est un état composé d'une seule région contenant plusieurs sous-états internes. Il possède un état initial, et à l'intérieur d'un état composite, un seul état à la fois est actif.

L'activation d'un état composite entraîne l'activation du pseudo état initial.

La désactivation de l'état composite entraîne la désactivation de l'état actif. La transition de sortie de l'état composite peut être déclenchée quel que soit le sous-état actif à l'intérieur. Tous les sous-états d'un état composite ne sont donc pas nécessairement activés avant d'en sortir.

#### Etat orthogonal

Un état orthogonal est un état composite constitué de plusieurs régions pouvant évoluer simultanément. Graphiquement, les différentes régions sont séparées par des pointillés. Chaque région contient son propre graphe d'état pouvant lui-même posséder un état initial et un état final.

- Entrée dans un état orthogonal : lorsqu'une transition reliée au bord de l'état composite est franchie, chaque région se retrouve dans son état initial et évolue indépendamment des autres : les régions sont alors en concurrence.

- Sortie d'un état orthogonal : elle se fait conformément à la règle de sortie de l'état composite énoncée précédemment. Mais cette règle de sortie peut être gênante pour certaines séquences où on a besoin d'un comportement synchrone (= atteinte de tous les états finaux pour mettre fin à l'état global). Dans ce cas il faut adjoindre un pseudo état «join» (union), en sortie.

Synchronisation des régions concurrentes à l'aide de barres de synchronisation "fork" et "join".

### Conditionner une transition par l'activité de l'état d'un autre graphe d'état

L'état composite orthogonal A est composé des sous-états composites B et C.

B et C s'activent simultanément, et évoluent indépendamment, en parallèle. Au départ, les états B1 et C1 sont actifs.

Lorsque C se trouve à l'état C2, pour repasser de l'état C2 à l'état C1, il faut que l’évènement ev4 survienne, et qu'à cet instant l'état B3 soit actif. Cette transition est donc conditionnée par l'activité de l'état B3 de l'autre sous-graphe.

### Synthèse de la syntaxe utilisée dans les diagrammes d'état