Je modélise une boucle dans un diagramme d'activité UML. Cela fonctionne bien avec des nœuds de condition simples (diagramme 1), mais je cherche un moyen plus expressif pour souligner la sémantique de la boucle . Je suis donc arrivé aux "régions" ou "régions interruptibles" qui sont affichées ici et là , mais je n'ai pas pu trouver beaucoup d'exemples vraiment satisfaisants.
Mon exemple est une fonction qui traite les messages d'une liste donnée. La boucle s'interrompt dès que le premier message valide est trouvé, puis le message est traité et la fonction renvoie true. Sinon, il retourne faux (s'il vous plaît pas de commentaires sur le sens ou le non-sens, c'est uniquement pour le plaisir d'un échantillon).
Diagramme 1: utilise un bon ancien nœud conditionnel de diagramme d'activité. Il est certes plus facile de suivre le flux de contrôle le long des flèches, mais il n'y a pas de "The LOOP", il y a juste un "si".
Diagramme 2:
La fonctionnalité des deux diagrammes doit être équivalente:
Edit: Un autre diagramme qui met en œuvre les suggestions de Steph:
En UML, le noeud final d'activité représente un achèvement, il est donc correct dans une région de boucle lorsque vous l'utilisez, c'est l'achèvement normal du contenu de votre boucle (qui à son tour conduit à l'itération suivante). En remarque, je vous conseille d'utiliser également un nœud initial pour le début de votre boucle.
Et il y a aussi le nœud final de flux, qui représente une sortie, au lieu d'un achèvement. Ainsi, vous pouvez l'utiliser pour représenter l'instruction "break", au lieu de l'Edge d'interruption que vous utilisez. Dans ce cas, vous devez intégrer le "nœud de traitement de message supplémentaire", dans la branche "oui", juste avant ce nœud final de flux.
L'Edge d'interruption est plutôt destiné aux interruptions provenant de l'extérieur du traitement en cours. La région est interruptible et certains événements (généralement notés avec les nœuds de réception) peuvent l'interrompre complètement, quelle que soit la progression du contenu de la région. Ici ce n'est pas le cas.
Concernant le caractère itératif, il n'y a malheureusement rien de très visuel. J'ai tendance à utiliser un nœud d'objet au-dessus de la région, juste à côté du nœud initial.