Archyno
UMLDiagrammes de comportement

Diagrammes états-transitions UML

Un objet, tous les états où il peut se trouver, et tous les événements qui l'y font passer. Le diagramme qui transforme "une paiement capturé peut-il être annulé ?" d'une dispute en quelque chose que l'on peut montrer du doigt.

9 min de lectureUML 2.5.115 sur 35

La réponse courte

  • Une étiquette de transition s'écrit déclencheur [garde] / effet, et les trois parties sont facultatives. L'essentiel de la confusion sur les machines à états tient dans cette ligne.
  • Une action d'entrée s'exécute par toutes les entrées dans l'état, un effet de transition sur une seule. Répéter le même effet par transition est ainsi que les copies divergent.
  • Un état composite factorise une sortie commune : la transition se trace une fois depuis sa bordure au lieu d'une fois depuis chaque sous-état.
  • H revient au dernier sous-état actif, H suivi d'un astérisque à la dernière configuration imbriquée à chaque niveau. C'est la notation de reprendre là où l'on s'était arrêté.
Diagramme d'états UML d'un paiement. Depuis le pseudo-état initial, le paiement entre dans Pending. Sur authorize avec provision suffisante il passe à Authorized ; sur autorisation refusée il passe à Failed. Depuis Authorized, capture le mène à Captured et void à Voided. Depuis Captured, refund le mène à Refunded, qui atteint l'état final.
Le cycle de vie d'un paiement. Chaque mouvement licite est dessiné ; tout mouvement non dessiné est illicite, et c'est là le vrai contenu du diagramme.

01Ce qu'il montre#

Un diagramme d'états décrit la vie d'une seule chose. Pas un processus, pas une interaction : un objet, ou un composant, et les états qu'il traverse de sa création à sa disparition.

Sa force est dans l'espace négatif. Le diagramme ci-dessus dessine six transitions. Tout le reste est de ce fait interdit : un paiement Refunded ne peut pas revenir à Captured, un paiement Failed ne peut pas être capturé, et un paiement Pending ne peut pas être remboursé. Dans un diagramme de classes, ces contraintes vivent dans de la prose ou dans la tête de personne. Ici, elles sont l'image.

02États et transitions#

ÉlémentNotationCe que cela signifie
Pseudo-état initialdisque pleinLà où l'objet commence. Ce n'est pas un état : rien n'y séjourne ; la transition sortante se déclenche immédiatement.
Étatrectangle arrondiUne condition dans laquelle l'objet demeure pendant qu'il attend quelque chose. Nommé par un adjectif ou un participe : Authorized, pas Authorizing it.
Transitionflèche étiquetéeUn passage d'un état à un autre, déclenché par un événement. Étiquetée déclencheur [garde] / effet.
État finalanneau autour d'un disqueLa vie de l'objet s'arrête. Il n'y a rien après.
État compositeun état contenant des étatsRegroupe des sous-états. Une transition sortant du composite s'applique à chaque état qu'il contient.
Historiqueun H entouréRentrer dans un composite reprend au sous-état où il en était, plutôt qu'à son sous-état initial.
Deux états reliés par une transition étiquetée authorize, crochet ouvrant funds ok crochet fermant, barre oblique reserve funds. Une note explique que ces parties sont le déclencheur, la garde et l'effet.
Une étiquette de transition a trois parties facultatives. Le déclencheur est l'événement, la garde est la condition, et l'effet est ce qui se produit au passage.

03Où placer le comportement#

Le comportement peut s'accrocher à une transition ou à un état, et bien choisir supprime beaucoup de duplication.

  • Effet sur une transition - écrit après la barre oblique. Il s'exécute une fois, sur ce passage précis. Utilisez-le quand le comportement appartient à ce chemin.
  • entry / … - s'exécute à chaque entrée dans l'état, par n'importe quelle transition. Si trois flèches vers Captured doivent toutes écrire une écriture comptable, c'est une action entry, pas trois effets.
  • exit / … - s'exécute à chaque sortie de l'état, par n'importe quelle transition.
  • do / … - s'exécute en continu tant que l'on est dans l'état, et s'interrompt à la sortie. C'est celle des travaux longs.

La règle : si le comportement concerne le fait d'être dans l'état, utilisez entry/do/exit. S'il concerne le trajet particulier entre deux états, mettez-le sur la transition.

04États composites et historique#

Les cycles de vie réels font apparaître un cas courant : plusieurs états qui réagissent de façon identique à un même événement. Un paiement en Pending, Authorized ou Captured peut être annulé, et dessiner trois flèches cancel distinctes vers Cancelled est du bruit.

Un état composite règle cela. Enveloppez ces trois-là dans un état englobant appelé Active, et dessinez une seule transition cancel sortant d'Active. Elle s'applique au sous-état courant, quel qu'il soit. Trois flèches deviennent une, et ajouter un quatrième sous-état plus tard ne coûte rien.

Un pseudo-état historique - un H entouré - gère la reprise. Sans lui, rentrer dans un composite démarre à son sous-état initial. Avec lui, la machine revient au sous-état où elle était en sortant. L'historique superficiel (H) retient un niveau ; l'historique profond (H*) retient toute l'imbrication. C'est ce qu'il vous faut pour tout ce qui est suspendable.

05Quand en dessiner un#

À utiliser quand

  • Une entité a un champ de statut et des règles sur les changements autorisés
  • Commande, paiement, abonnement, ticket, validation de document - tout ce qui a un cycle de vie
  • Un protocole ou un appareil à modes, où les transitions illicites font de vrais dégâts
  • Vous allez écrire une énumération de statuts et voulez d'abord les bonnes transitions

Préférer autre chose quand

  • L'objet a deux états - une phrase suffit
  • Vous décrivez un processus couvrant plusieurs objets ; prenez un diagramme d'activité
  • Les états ne sont en réalité que des étapes qui se suivent toujours dans l'ordre
  • Ce qui compte est qui appelle qui, pas dans quel état se trouve quoi

Un diagramme d'états se traduit presque directement en code, ce qui est inhabituel pour UML. Les états deviennent une énumération, les transitions une table, et les gardes les conditions de chaque entrée. Le dessiner d'abord et implémenter à partir de lui est l'un des rares endroits où la modélisation fait franchement gagner du temps au lieu de simplement documenter.

06Erreurs fréquentes#

  1. Des états nommés comme des activités. Authorizing suggère un travail en cours ; si l'objet y attend, nommez la condition - Authorized, Awaiting capture.
  2. Modéliser un processus, pas un objet.Si vos « états » sont des étapes réalisées par des personnes différentes, il vous faut un diagramme d'activité.
  3. Des transitions sans déclencheur. Licite - elle se déclenche quand l'activité do de l'état s'achève - mais c'est en général le signe d'un événement manquant.
  4. Aucun état final, et aucune explication. Soit l'objet vit réellement pour toujours, soit un état terminal a été oublié. Les deux arrivent ; un seul est voulu.
  5. Répéter la même transition depuis chaque état. C'est à cela que sert un état composite.

En une ligne chacun

  1. 01Un objet, ses états, et les événements qui le font bouger. Pas un processus.
  2. 02Les transitions que vous ne dessinez pas sont la contrainte que le diagramme existe pour consigner.
  3. 03Les étiquettes de transition se lisent déclencheur [garde] / effet, et chaque partie est facultative.
  4. 04Les actions entry, exit et do appartiennent à l'état ; les effets appartiennent à une transition.
  5. 05Les états composites réduisent à une flèche un événement partagé par plusieurs sous-états.
  6. 06Les pseudo-états historiques reprennent là où la machine s'était arrêtée, au lieu de repartir de zéro.

07Questions fréquentes#

Quel est le format d'une étiquette de transition UML ?

Le déclencheur, puis la garde entre crochets, puis l'effet après une barre oblique. Le déclencheur est l'événement susceptible de déclencher la transition, la garde une condition qui doit être vraie pour cela, et l'effet ce qui se produit alors. Les trois sont facultatifs : une étiquette peut n'être qu'un nom d'événement ou qu'une garde.

Quelle différence entre une action d'entrée et un effet de transition ?

Une action d'entrée s'exécute chaque fois que l'état est atteint, par n'importe quelle transition. Un effet de transition ne s'exécute que sur cette transition-là. Si le même comportement appartient à toutes les entrées dans un état, c'est une action d'entrée - et l'écrire transition par transition est précisément ainsi que les copies divergent.

Qu'est-ce qu'un état composite ?

Un état contenant sa propre machine à états. C'est ainsi que l'on factorise un groupe d'états qui partagent une même transition sortante : on la trace une fois depuis la bordure du composite plutôt qu'une fois depuis chaque sous-état.

Que signifie le symbole H dans une machine à états ?

C'est un pseudo-état d'historique. L'historique superficiel, H, revient au dernier sous-état actif d'un état composite ; l'historique profond, H suivi d'un astérisque, revient à la dernière configuration imbriquée à chaque niveau. C'est la notation de reprendre là où l'on s'était arrêté.

Quand utiliser une machine à états plutôt qu'un diagramme d'activité ?

Quand le sujet est le cycle de vie d'un objet et que la question est ce qui peut arriver ensuite. Une machine à états est centrée sur une chose et les états qu'elle peut prendre ; un diagramme d'activité est centré sur un processus et les étapes qu'il traverse.

Dans cette série

À lire aussi

Tous les articles