¿Cómo represento acciones anidadas en un diagrama de actividad UML?

16

Esta pregunta es muy similar a esta , pero la respuesta no coincide con mis necesidades. Se centra en una herramienta UML específica (Papyrus), mientras que mi pregunta es más general sobre UML.

Me gustaría representar una acción anidada en un diagrama de actividad , pero no sé cuál es la forma común de hacerlo. La idea es que hay una acción del mismo alcance que las otras acciones, pero más compleja en su ejecución. Me gustaría mostrar más detalles sobre su ejecución sin dejar de mostrar esta acción al mismo nivel que las demás.

En el siguiente ejemplo, que es un diagrama de actividad que muestra algún tipo de actividad "de regreso a casa ", las acciones anidadas están en la Pet the catacción. Tenga en cuenta que hay otro error potencial en este diagrama, vea la errata al final de la pregunta.

Finalmente de vuelta a casa

He usado el nodo estructurado, pero no estoy seguro de que sea la forma correcta, de ahí la pregunta. En un diagrama de estado, el equivalente sería un estado compuesto, pero simplemente no puedo encontrar nada sobre una acción compuesta. Con respecto al nodo estructurado, después de leer algunos documentos al respecto, todavía no entiendo cómo se debe usar, por lo que podría estar completamente equivocado con este diagrama.

También sé que existe la posibilidad de referirme a otra sub-actividad con el símbolo del tridente, como en la imagen a continuación, pero no coincide con mis necesidades ya que me gustaría toda la información en el mismo diagrama (para poder imprimir sin pérdida de información):

Sub-actividad del tridente

Entonces, ¿cuál es la forma estándar de representar una acción anidada? Por estándar, me refiero a UML válido, comúnmente visto y, si es posible, factible en la mayoría de las herramientas de diseño UML.

Erratas no relacionadas: Otra cosa está mal en mis diagramas, las flechas que vienen a la misma acción ( Scratch behind the ears) deberían ir a un nodo de fusión antes de ingresar a la acción. Vea los comentarios a continuación, incluida esta cita de JOT .

Tim
fuente
No preguntaste sobre esto, pero quiero señalar que la acción "Rascarse detrás de las orejas" nunca puede ejecutarse. ¿Alguien sabe por qué esto es cierto?
Jim L.
Bueno, no sé, pero espero que sea solo el genio del gato, porque el diagrama que finalmente le di a mi jefe se parece a este: /
Tim
La razón es que se debe ofrecer un token de ambos caminos a la acción para que comience, lo cual es imposible, ya que uno proviene de otro que nunca sucederá.
Jim L.
@ JimL. ¿Quiere decir que ambas condiciones deben ser ciertas para entrar en este estado? Entonces, ¿cuál sería la forma de expresar lo que pretendo expresar? ¿Un nodo de diamante fusionado antes de la entrada estatal?
Tim
Estamos hablando de una acción, no de un estado; pero sí, se requiere una fusión para solucionar este problema.
Jim L.

Respuestas:

23

Ambos son "estándar". La primera imagen según las especificaciones UML es

Nodos de actividad estructurados

Un StructuredActivityNode es una Acción que también es un ActivityGroup (consulte la subcláusula 15.6) y cuyo comportamiento está especificado por ActivityNodes y ActivityEdges que contiene. A diferencia de otros tipos de ActivityGroup, un StructuredActivityNode posee los ActivityNodes y ActivityEdges que contiene, por lo que un nodo o borde solo puede estar contenido directamente en un StructuredActivityNode. Los StructuredActivityNodes pueden estar anidados (como un StructuredActivityNode, como una Acción, también es un ActivityNode), sin embargo, un borde o nodo puede estar contenido indirectamente en un número de StructuredActivityNodes anidados.

Grupos de actividades

ActivityGoups son construcciones de agrupación para ActivityNodes y ActivityEdges. Los nodos y las aristas pueden pertenecer a más de un grupo. Esta subcláusula describe dos tipos concretos de ActivityGroups, ActivityPartitions y InterruptibleActivityRegions. StructuredActivityNodes es un tercer tipo de ActivityGroup, pero también son acciones y se discuten en la subcláusula 16.11 de la cláusula 16 sobre acciones.

La segunda foto es

Acciones de invocación

Una InvocationAction es una Acción que resulta, directa o indirectamente, en la invocación de un Comportamiento (véase la subcláusula 13.2). InvocationActions incluye CallActions para llamar a Operaciones o Comportamientos y para iniciar Comportamientos que se hayan instanciado previamente. Los tipos adicionales de acciones de invocación permiten el envío dirigido de señales y otros objetos y la capacidad de transmitir señales a receptores disponibles.

La principal diferencia entre ambos casos es la reutilización. Mientras que en primer lugar solo tienes cierta complejidad en un solo lugar (tu Pet the cat), el segundo es cuando (re) usas una determinada acción en múltiples lugares. Sin embargo, tiendo a usar la variante de invocación incluso si es solo para un solo uso. Aquí agrego un diagrama compuesto (que en EA se abre al hacer doble clic) para mostrar detalles de la acción correspondiente. El flujo principal solo muestra la descripción general y si se necesitan detalles, están a solo un doble clic de distancia.

Ahora, crear un diagrama compuesto en EA es (nuevamente) diferente. Debe crear un AD a nivel de paquete y luego arrastrarlo al elemento de invocación. Ahora, cuando haces doble clic en eso, se abrirá el diagrama incrustado.

qwerty_so
fuente
Gracias por su respuesta. ¿Podría dar más detalles sobre cuándo usar qué posibilidad? Encuentro la especificación UML bastante difícil de leer, del lado del usuario.
Tim
No es una conferencia a la hora de acostarse :-) Intentaré agregar más explicaciones.
qwerty_so
Hice una actualización con un comentario sobre otra EAUI.
qwerty_so