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é.
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ément | Notation | Ce que cela signifie |
|---|---|---|
| Pseudo-état initial | disque plein | Là où l'objet commence. Ce n'est pas un état : rien n'y séjourne ; la transition sortante se déclenche immédiatement. |
| État | rectangle arrondi | Une condition dans laquelle l'objet demeure pendant qu'il attend quelque chose. Nommé par un adjectif ou un participe : Authorized, pas Authorizing it. |
| Transition | flèche étiquetée | Un passage d'un état à un autre, déclenché par un événement. Étiquetée déclencheur [garde] / effet. |
| État final | anneau autour d'un disque | La vie de l'objet s'arrête. Il n'y a rien après. |
| État composite | un état contenant des états | Regroupe des sous-états. Une transition sortant du composite s'applique à chaque état qu'il contient. |
| Historique | un H entouré | Rentrer dans un composite reprend au sous-état où il en était, plutôt qu'à son sous-état initial. |
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 versCaptureddoivent toutes écrire une écriture comptable, c'est une actionentry, 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#
- Des états nommés comme des activités.
Authorizingsuggère un travail en cours ; si l'objet y attend, nommez la condition -Authorized,Awaiting capture. - 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é.
- Des transitions sans déclencheur. Licite - elle se déclenche quand l'activité
dode l'état s'achève - mais c'est en général le signe d'un événement manquant. - 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.
- Répéter la même transition depuis chaque état. C'est à cela que sert un état composite.
En une ligne chacun
- 01Un objet, ses états, et les événements qui le font bouger. Pas un processus.
- 02Les transitions que vous ne dessinez pas sont la contrainte que le diagramme existe pour consigner.
- 03Les étiquettes de transition se lisent déclencheur [garde] / effet, et chaque partie est facultative.
- 04Les actions entry, exit et do appartiennent à l'état ; les effets appartiennent à une transition.
- 05Les états composites réduisent à une flèche un événement partagé par plusieurs sous-états.
- 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
- 01Qu'est-ce que UML ?
- 02Symboles UML
- 03Choisir un diagramme
- 04Diagrammes de classes
- 05Exemples de diagrammes de classes
- 06Dessiner un diagramme de classes
- 07Symboles du diagramme de classes
- 08Diagrammes de séquence
- 09Exemples de diagrammes de séquence
- 10Dessiner un diagramme de séquence
- 11Diagrammes de cas d'utilisation
- 12Exemples de cas d'utilisation
- 13Diagrammes d'activité
- 14Exemples d'activité
- 15Diagrammes états-transitions
- 16Exemples d'états-transitions
- 17Diagrammes de composants
- 18Exemples de composants
- 19Dessiner un diagramme de composants
- 20Symboles de composants
- 21Diagrammes de déploiement
- 22Exemples de déploiement
- 23Diagrammes d'objets
- 24Diagrammes de paquetages
- 25Diagrammes de structure composite
- 26Diagrammes de communication
- 27Séquence vs communication
- 28Diagrammes de temps
- 29Diagrammes globaux d'interaction
- 30Diagrammes de profil
- 31UML avec l'IA
- 32Exemple e-commerce
- 33Exemple bancaire
- 34Exemple microservices
- 35Exemple AWS
À lire aussi
Fondamentaux
Diagrammes de comportement
Diagrammes de structure
Diagrammes de comportement
Diagrammes de comportement
Diagrammes de comportement