loops - ludichar - Bucle en el diagrama de actividad UML usando una región
uml activity (1)
En UML, el nodo final de la actividad representa una finalización, por lo que es correcto en una región de bucle a medida que la usa, es la finalización normal del contenido de su bucle (que a su vez conduce a la siguiente iteración). Como nota al margen, le aconsejo que use también un nodo inicial para el inicio de su ciclo.
Y también está el nodo final de flujo, que representa una salida, en lugar de una finalización. Por lo tanto, puede usarlo para representar la declaración de "ruptura", en lugar del borde de interrupción que usa. En este caso, debe integrar el "nodo de procesamiento de mensajes adicional", en la rama "sí", justo antes de este nodo final de flujo.
El borde de interrupción es más bien para las interrupciones que vienen de fuera del procesamiento actual. La región es interrumpible, y algunos eventos (generalmente señalados con nodos de recepción) pueden interrumpirla completamente sin importar el progreso del contenido de la región. Aquí no es el caso.
En cuanto al carácter iterante, desafortunadamente no hay nada muy visual. Tiendo a usar un nodo objeto en la parte superior de la región, justo al lado del nodo inicial.
Estoy modelando un bucle en un diagrama de actividad UML. Funciona bien con nodos de condición simple (diagrama 1), pero estoy buscando una manera más expresiva de enfatizar el bucle semántico . Así que vine a "regiones" o "regiones interrumpibles" que se muestran here y there , pero no pude encontrar muchos ejemplos realmente satisfactorios.
Mi ejemplo es una función que procesa mensajes de una lista dada. El bucle se cancela tan pronto como se encuentra el primer mensaje válido, luego el mensaje se procesa y la función devuelve verdadero. De lo contrario, devuelve falso (por favor, no hay comentarios sobre el sentido o el disparate, es solo por el bien de una muestra).
Diagrama 1: utiliza un buen nodo condicional de diagrama de actividad antiguo. Es más fácil seguir el flujo de control a lo largo de las flechas, pero no hay "The LOOP", solo hay un "si".
Diagrama 2:
- ¿es correcta la condición de salida (positiva), usando un borde de interrupción? Es cierto que podría ser parte de la sección [prueba] del bucle junto con el iterador.
- Por cierto: ¿cómo se expresa mejor el carácter iterativo de un bucle for en UML?
- ¿Es correcto el nodo final de actividad dentro del cuerpo del bucle (es decir, cuando el "mensaje condicional es válido?" Produce "no")? De alguna manera se siente mal usar un nodo final aquí, pero ¿de qué otra manera puedo expresar el flujo de control de un bucle ?
La funcionalidad de ambos diagramas debe ser equivalente:
Edición: Otro diagrama que implementa las sugerencias de Steph:
- Nodo inicial y final dentro del cuerpo del bucle.
- "Procesamiento adicional" está ahora dentro del cuerpo del bucle. Bien ... bien aquí, pero podría haber otros bucles donde preferiría tenerlo afuera. Entonces podría cambiar el diseño de todos modos ...
- El "siguiente mensaje" también se puede ver como el objeto iterador en lugar de la acción "(proporcionar el) siguiente mensaje" del diagrama original.
- Las dos flechas de flujo de objetos pueden ser un poco excesivas, pero creo que son correctas.