Exemples de diagrammes d'états-transitions
Trois machines à états réutilisables telles quelles - un cycle de vie de commande, un workflow éditorial qui revient en arrière, et le fragment qui montre pourquoi un état en attente n'est pas un état bloqué.
8 min de lectureUML 2.5.116 sur 35
La réponse courte
- Le cycle de vie d'une commande est l'exemple à reprendre : six états, un déclencheur par transition, et deux fins distinctes plutôt qu'une.
- Plusieurs états finaux, c'est normal. Annulée et livrée sont toutes deux terminées, et les ramener au même disque cerclé efface la différence.
- Un délai d'expiration est une transition déclenchée par un événement temporel - after(72 heures). Aucune garde : le temps qui passe est le déclencheur.
- Un état sans transition activée est inactif, pas cassé. C'est l'inverse du diagramme d'activité, où un jeton sans issue signale un blocage.
01Exemple 1 : le cycle de vie d'une commande#
Si une table de votre base a une colonne status, ce diagramme est déjà implicite dans le code : il est simplement écrit à travers une douzaine de clauses de garde au lieu d'être dessiné une fois. Le rendre explicite est l'exercice de recherche de défauts le moins cher qu'offre une machine à états.
Lisez les transitions plutôt que les boîtes. Chacune porte le déclencheur qui la provoque - checkout, pay, dispatch, deliver - et l'une porte un effet après une barre oblique : dispatch / print label. Ces étiquettes sont le contenu. Un diagramme de six boîtes arrondies aux flèches non étiquetées dit seulement que les choses changent, ce que tout le monde savait déjà.
Les deux états finaux sont délibérés. Annulée et Livrée sont toutes deux terminales et ne sont pas le même résultat, et dessiner un seul disque cerclé pour les deux dirait que la commande est terminée sans dire comment. Rien dans UML ne vous limite à un seul.
02Exemple 2 : un flux qui revient en arrière#
Les vrais flux de travail vont rarement dans un seul sens. Quelque chose est refusé, revient, et repasse - et c'est dans la transition de retour que vivent en général les règles intéressantes.
La transition revise de Refusé vers Brouillonest ce qui fait de ceci une machine à états plutôt qu'une liste de contrôle. Elle dit qu'un article refusé n'est pas fini : il rentre dans le même cycle, et tout compteur du genre « refusé deux fois signifie escalader » pend à cette flèche et non à un état.
Notez que Refusé a une sortie et Publié non. Un état sans transition sortante et sans état final derrière lui affirme que l'objet y reste pour toujours, ce qui est parfois vrai et plus souvent un oubli. Vérifier chaque état feuille sur ce point est une relecture de deux minutes qui trouve de vrais trous.
Les noms de déclencheurs sont des événements du vocabulaire du domaine - submit, approve, reject, revise - et non des noms de méthodes. Cela garde le diagramme lisible pour les rédacteurs qui possèdent le processus, c'est-à-dire le public capable de vous dire qu'il est faux.
03Exemple 3 : deux sorties qui ne sont pas une décision#
La confusion la plus fréquente quand on passe des diagrammes d'activité aux machines à états porte sur ce que signifient deux flèches sortant d'une boîte.
Ce sont deux déclencheurs, pas deux branches d'une décision. La commande reste indéfiniment dans En attente de paiement ; l'événement qui arrive le premier - pay ou l'événement temporel timeout(72h) - décide où elle va. Rien n'a besoin d'être exhaustif et il n'y a pas de [else], parce qu'attendre est une issue légitime.
C'est l'inverse d'un diagramme d'activité, où un jeton arrivant à une décision sans garde activée est un processus bloqué. Une géométrie identique, une sémantique opposée : d'où l'intérêt de choisir entre les deux notations volontairement plutôt que par habitude.
04Quand en dessiner une#
Une machine à états est peu coûteuse à dessiner et coûteuse à entretenir, donc la question de savoir si l'objet a un cycle de vie mérite d'être posée avant la première boîte.
À utiliser quand
- L'objet a un champ de statut à plus de deux valeurs et des règles sur les changements licites.
- Certaines transitions sont interdites et l'interdiction compte : remboursements, annulations, approbations.
- Le même objet est touché par plusieurs services qui ne s'accordent pas sur ce qu'il peut faire ensuite.
- Des délais ou des expirations changent l'objet sans que personne n'agisse dessus.
Préférer autre chose quand
- Un processus traversant plusieurs objets et rôles : c'est un diagramme d'activité.
- Une classe dont le statut est dérivé d'autres champs plutôt que stocké.
- La configuration d'un moteur de workflow, qui est déjà une machine à états écrite.
- Un diagramme couvrant deux objets. Dessinez une machine par cycle de vie.
Si le processus s'étend sur plusieurs participants plutôt que sur la vie d'un objet, vous voulez un diagramme d'activité ou, pour un public métier, BPMN. Le test est simple : si vous ne pouvez pas nommer la chose unique dont ce sont les états, ce n'est pas une machine à états.
05Ce qu'il faut retenir#
En une ligne chacun
- 01Les étiquettes de transition sont le contenu. Des flèches non étiquetées entre états ne disent rien.
- 02Plusieurs états finaux sont normaux : annulée et livrée sont toutes deux terminales et ne sont pas la même chose.
- 03Les flèches manquantes sont là où sont les bugs. Vérifiez chaque paire que vous n'avez pas dessinée.
- 04Deux flèches sortant d'un état sont deux déclencheurs, pas deux branches. Rien n'a besoin d'un [else].
- 05Une machine à états par objet doté d'un vrai cycle de vie. Un processus traversant des rôles est un diagramme d'activité.
06Questions fréquentes#
Quel est un bon exemple de diagramme d'états-transitions ?
Un cycle de vie de commande : panier, passée, payée, expédiée, livrée, avec une branche annulée depuis passée. Six états, un déclencheur par transition et deux fins distinctes couvrent tout ce qu'on demande habituellement à la notation.
Un diagramme d'états peut-il avoir plusieurs états finaux ?
Oui, et c'est en général souhaitable. Une commande annulée et une commande livrée sont toutes deux terminées mais ne sont pas le même résultat, et les ramener au même disque cerclé efface la distinction. UML ne limite pas le nombre d'états finaux.
Comment modéliser un délai d'expiration dans un diagramme d'états ?
Par une transition dont le déclencheur est un événement temporel, écrit par exemple timeout(72h) ou after(72 heures). Elle quitte l'état où l'objet attend et pointe vers ce que produit l'expiration. Aucune garde n'est nécessaire : le temps qui passe est le déclencheur.
Que se passe-t-il si aucune transition sortante n'est activée ?
Rien, et c'est correct. Une machine à états attend dans son état courant jusqu'à l'arrivée d'un déclencheur : un état sans transition activée est inactif, pas cassé. C'est l'inverse d'un diagramme d'activité, où un jeton sans issue signale un processus bloqué.
Faut-il une machine à états par classe ?
Au plus une, et seulement pour les classes ayant un vrai cycle de vie. Si une classe a une colonne de statut à plus de deux valeurs et des règles sur les changements permis, dessinez-la. Si le statut est dérivé ou fixé une seule fois, la machine n'apporte rien.
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
Diagrammes de comportement
Diagrammes de comportement
Fondamentaux
Diagrammes de structure
Diagrammes de structure
Diagrammes de structure