Lors du dé­ve­lop­pe­ment d'un produit ou de la pro­gram­ma­tion de logiciels, les dia­grammes états-tran­si­tions UML per­met­tent de re­pré­sen­ter le cycle de vie des dif­fé­rents objets de façon imagée et com­pré­hen­sible. Bien qu’un tel diagramme comporte uni­que­ment quelques éléments, une uti­li­sa­tion correcte contribue de façon dé­ter­mi­nante au succès du produit final. Dans les pa­ra­graphes suivants, vous dé­cou­vri­rez pourquoi et dans quels cas utiliser un tel diagramme ainsi que comment créer votre propre diagramme états-tran­si­tions UML.

Qu’est-ce qu’un diagramme états-tran­si­tions ?

Un diagramme états-tran­si­tions UML (également appelé sim­ple­ment diagramme d’états-tran­si­tions ou en anglais state diagram voire state machine diagram) visualise les états d’un automate à états finis, c’est-à-dire d’un modèle de com­por­te­ment composé d’actions et d’états ou de tran­si­tions d’états. Dans ce cadre, le diagramme prévoit pour chaque objet du modèle aussi bien un état initial qu’un état final et au moins un état in­ter­mé­diaire. Le diagramme états-tran­si­tions permet ainsi de re­pré­sen­ter le cycle de vie complet d’un système ou d’un système partiel ou encore de com­po­santes ou de classes in­di­vi­duelles, qu’il s’agisse des processus d’une machine à café, d’une liseuse ou de com­po­santes tech­niques d’un véhicule.

Le diagramme états-tran­si­tions est l’un des 14 types de dia­grammes du Unified Modeling Language (UML) et du Systems Model Language (SysML). Il repose sur un concept de David Harel qui l’a publié en 1987 dans son article scien­ti­fique « Sta­te­charts: A Visual Formalism for Complex Systems ». Parmi les autres types de dia­grammes UML, on trouve par exemple le diagramme des cas d’uti­li­sa­tion et le diagramme de com­po­sants.

À quoi servent les dia­grammes états-tran­si­tions UML ?

Comme nous l’avons déjà évoqué, le but des dia­grammes états-tran­si­tions est de décrire le com­por­te­ment d'un système de façon aussi précise que possible. À la fin, la re­pré­sen­ta­tion graphique des dif­fé­rents processus doit notamment pouvoir répondre aux questions suivantes :

  • Que se passe-t-il lorsqu’un objet se trouve dans un état spé­ci­fique ?
  • Quel état doit survenir pour que son com­por­te­ment soit modifié ?
  • Quels sont les évé­ne­ments dé­clen­cheurs ?
  • De quelles pro­prié­tés l’objet doit-il disposer pour pouvoir changer d’état ?

Les dia­grammes états-tran­si­tions UML sont par con­sé­quent utilisés partout où il est utile de vi­sua­li­ser les états et les con­di­tions de tran­si­tion pour un processus de dé­ve­lop­pe­ment optimal. Ils sont par­ti­cu­liè­re­ment appréciés dans la con­cep­tion de systèmes intégrés (Embedded Systems), car ces derniers traitent en arrière-plan dif­fé­rents signaux et processus au­to­ma­ti­sés qui doivent être coor­don­nés les uns avec les autres de manière optimale. Dans ce cas, un diagramme états-tran­si­tions aide les dé­ve­lop­peurs en vi­sua­li­sant toutes les fonctions de commande per­ti­nentes et en les rendant dis­po­nibles d’un coup d’œil.

L’utilité des dia­grammes états-tran­si­tions peut être expliquée fa­ci­le­ment à travers l’exemple de la fonction « Aqua Stop » des machines à laver : cette dernière détermine quand l’ali­men­ta­tion en eau de la machine à laver doit être in­ter­rom­pue. Dans le cadre d’un diagramme états-tran­si­tions UML, elle peut être comprise comme un système à part entière. Dans ce cas, la re­pré­sen­ta­tion graphique permet de mettre en évidence dans quel état et sous quelles con­di­tions le principe « Aqua Stop » s’applique.

Note

Dans de nombreux secteurs in­dus­triels tels que la tech­no­lo­gie médicale ou les trans­ports, les dia­grammes états-tran­si­tions sont utilisés pour expliquer des si­tua­tions complexes. Les dia­grammes états-tran­si­tions sont également utilisés dans la gestion de produits et de projets ainsi que dans l’in­gé­nie­rie des exigences.

Diagramme états-tran­si­tions : aperçu de la structure et des com­po­santes

Même si les dia­grammes états-tran­si­tions UML sont basés uni­que­ment sur quelques éléments, une com­bi­nai­son as­tu­cieuse de ces éléments permet également de re­pré­sen­ter des suites d’états complexes. Quels sont les éléments les plus im­por­tants d’un diagramme états-tran­si­tions et quelle est la structure sous-jacente ?

États

Les états sont les com­po­santes es­sen­tielles d’un diagramme états-tran­si­tions. Les huit états sont toujours re­pré­sen­tés par un rectangle aux angles arrondis. Une porte peut par exemple prendre deux valeurs d’état :

Si l’on garde l’exemple de diagramme états-tran­si­tions re­pré­sen­tant les états d’une porte, la condition suivante doit toujours être remplie :

  • l’objet se trouve toujours dans l’un des deux états : la porte est soit ouverte soit fermée, mais n’est jamais à la fois ouverte et fermée.

Dans les dia­grammes états-tran­si­tions plus complexes, le rectangle peut être divisé en un maximum de trois zones re­pré­sen­tant des spé­ci­fi­ca­tions du com­por­te­ment (voir tran­si­tion).

Tran­si­tion : comment un état change-t-il ?

Pour passer d’un état à un autre, un événement doit être déclenché. Il re­pré­sente une tran­si­tion. Cette tran­si­tion relie les états entre eux et est re­pré­sen­tée vi­suel­le­ment par une flèche. Certaines con­di­tions peuvent être né­ces­saires pour qu’une telle tran­si­tion soit dé­clen­chée. En principe, les dia­grammes états-tran­si­tions UML opèrent une dis­tinc­tion entre les tran­si­tions internes et externes. Alors que les tran­si­tions externes sont obli­ga­toires dans la création d’un diagramme états-tran­si­tions, les tran­si­tions internes ne doivent pas im­pé­ra­ti­ve­ment faire partie du diagramme.

Dans le diagramme états-tran­si­tions d’un système d’ascenseur, une condition pour l’action « Fermer la porte de l’ascenseur » peut par exemple être que celle-ci soit tout d’abord ouverte pendant un minimum de cinq secondes avant de passer de l’état « ouverte » à « fermée ».

Tran­si­tion externe : chan­ge­ment d’état

Les tran­si­tions comme celles figurant dans l’exemple suivant de diagramme états-tran­si­tions UML sont des tran­si­tions externes. Dans ce cadre, la tran­si­tion a pour effet que l’objet passe à un autre état (entry/exit).

Exemple : si l’alarme d’un radio-réveil est dé­clen­chée, l’état passe de « Alarme activée (activated) » à « Alarme dé­sac­ti­vée (deac­ti­va­ted) ». L’état est modifié.

Tran­si­tion interne : l’état reste inchangé

Dans le cas d’une tran­si­tion interne, ce n’est pas un chan­ge­ment d’état qui est déclenché, mais une activité.

Exemple : dans un système de comp­ta­bi­lité, une facture impayée peut donner lieu à l’envoi au­to­ma­tique d’une facture (tran­si­tion externe). Si un rappel est envoyé comme réaction à l’absence de paiement, dans ce cas, il s’agit d’une tran­si­tion interne. En effet, une activité se produit, à savoir « Envoi du rappel », mais la facture reste ouverte et, jusqu’à nouvel ordre, demeure à l’« état impayé ».

Évé­ne­ments : pourquoi les états changent-ils ?

Les évé­ne­ments (actions) peuvent décrire davantage les con­di­tions dans les­quelles un état est abandonné, afin de passer à l’état suivant. Lors de la tran­si­tion de l’état de départ au premier état véritable, il n’est pas né­ces­saire de fournir de plus amples in­for­ma­tions sur l’événement, elles sont fa­cul­ta­tives. Si aucun événement n’est indiqué, cela signifie qu’il survient au­to­ma­ti­que­ment dès que toutes les activités des états pré­cé­dents sont achevées.

Un NON-événement (Trigger/ANY-Trigger) indique que l’événement est en principe toujours dis­po­nible. Les évé­ne­ments peuvent être nommés comme des spé­ci­fi­ca­tions du com­por­te­ment de l’état ou dans le cadre de la tran­si­tion de l’état (voir tran­si­tion).

Un événement dé­clen­cheur doit remplir les trois con­di­tions suivantes :

  • entry : l’événement est déclenché au­to­ma­ti­que­ment lors de l’entrée dans un état, c’est-à-dire dans toutes les tran­si­tions entrantes.
  • exit : l’événement est déclenché à la sortie d’un état, c’est-à-dire dans toutes les tran­si­tions sortantes.
  • do : l’événement est toujours déclenché lorsque l’état n’est pas modifié.

Ces spé­ci­fi­ca­tions de com­por­te­ment peuvent être notées dans l’état afin de présenter de façon sim­pli­fiée quels com­por­te­ments modifient l’état. De tels dé­clen­cheurs peuvent être re­pré­sen­tés gra­phi­que­ment de deux façons : ils peuvent d’une part être présentés dans l’état cor­res­pon­dant comme le montre l’exemple de diagramme états-tran­si­tions suivant :

Les évé­ne­ments peuvent également être indiqués à l’aide de la flèche de tran­si­tion :

Pseu­doé­tats

Dans les dia­grammes états-tran­si­tions UML, les éléments de commande sans valeurs affectées impactant le dé­rou­le­ment d’un automate sont appelés des pseu­doé­tats. UML 2, la version actuelle du Unified Modeling Language, dispose de dix pseu­doé­tats dif­fé­rents :

  • état initial (angl. Initial) : pas de tran­si­tion entrante et exac­te­ment une tran­si­tion sortante qui révèle l’état initial
  • état final (angl. final) : aucune tran­si­tion sortante, fin de la suite de com­por­te­ments
  • fourche (angl. fork) : division en plusieurs états pa­ral­lèles
  • jointure (angl. join) : fusion de plusieurs états pa­ral­lèles
  • jonction (angl. junction) : nœud pour mettre en série plusieurs tran­si­tions
  • option (angl. choice) : nœud depuis lequel plusieurs tran­si­tions al­ter­na­tives peuvent être lancées sur la base d’une décision prise au préalable
  • point d’entrée (angl. entry point) : re­grou­pe­ment de tran­si­tions si­mi­laires entrant dans un état composite
  • point de sortie (angl. exit point) : re­grou­pe­ment de tran­si­tions si­mi­laires sortant d’un état composite
  • his­to­rique su­per­fi­ciel (angl. shallow history) : en­re­gis­tre­ment du dernier sous-état actif d’un état composite
  • his­to­rique complet (angl. deep history) : en­re­gis­tre­ment du dernier sous-état actif de tous les niveaux hié­rar­chiques d’un état composite

Spécial : diagramme su­bor­donné

En fonction de la com­plexité, il est possible d’avoir des sous-états donnant une image détaillée de l’état de l’objet et indiquant le com­por­te­ment possible. Ces ex­pli­ca­tions plus complexes des dia­grammes états-tran­si­tions UML sont en par­ti­cu­lier de rigueur dans les contextes tech­niques.

  • composite state : permet de définir plus exac­te­ment un état.

Exemple : une porte peut se trouver à l’état « ouverte » ou « fermée ». Des sous-états de l’état « fermée » pour­raient être « dé­ver­rouil­lée » ou « ver­rouil­lée ».

  • sub­ma­chine state : un diagramme états-tran­si­tions su­bor­donné est ici ajouté à un état. Les sous-états composés de plusieurs sous-ensembles sont appelés états complexes. Les dif­fé­rents sous-ensembles peuvent se dérouler in­dé­pen­dam­ment les uns des autres, mais peuvent également être liés les uns aux autres.

Exemple : sur un smart­phone, la fonction réveil n’est que l’une des nom­breuses fonc­tion­na­li­tés aux­quelles plusieurs états peuvent être associés. Lorsque plusieurs alarmes sont pro­gram­mées pour dif­fé­rents jours de la semaine et à dif­fé­rentes heures, il s’agit de sous-ensembles se déroulant in­dé­pen­dam­ment les uns des autres.

Créer un diagramme états-tran­si­tions : exemple de diagramme états-tran­si­tions simple

Un diagramme états-tran­si­tions peut être appliqué aux objets les plus divers. Dans l’exemple suivant, les dif­fé­rents éléments doivent être présentés à l’aide de la re­pré­sen­ta­tion graphique des états d’une facture. Les prin­ci­paux éléments d’un diagramme états-tran­si­tions UML sont re­pré­sen­tés de la façon suivante :

Une fois structuré et transposé dans notre exemple, le diagramme simple ressemble à ce qui suit :

Après le point de départ comme pseu­doé­tat, la facture se trouve à l’état « émise » (written). Dans le meilleur des cas, cet état est suivi par la tran­si­tion vers l’état « payée » (paid). Cette tran­si­tion peut être décrite davantage en la dotant du nom d’événement « envoyée ».

Si la facture est acquittée, elle se trouve à l’état « payée ». Avant d’atteindre cet état, il peut être né­ces­saire d’envoyer un « rappel » (reminder). Comme ce rappel ne change pas l’état de la facture, il s’agit d’une activité et donc d’une tran­si­tion interne. Si la facture n’est pas acquittée, jusqu’à trois rappels peuvent être envoyés.

Aller au menu principal