Come posso rappresentare le azioni nidificate in un diagramma di attività UML?


16

Questa domanda è molto simile a questa , ma la risposta non corrisponde alle mie esigenze. Si concentra su uno strumento UML specifico (Papyrus) mentre la mia domanda è più generale su UML.

Vorrei rappresentare un'azione nidificata in un diagramma di attività , ma non so quale sia il modo comune per farlo. L'idea è che esiste un'azione dello stesso scopo rispetto alle altre azioni, ma più complessa nella sua esecuzione. Vorrei mostrare maggiori dettagli sulla sua esecuzione pur essendo in grado di mostrare questa azione allo stesso livello degli altri.

Nell'esempio seguente, che è un diagramma di attività che mostra una sorta di attività "di ritorno a casa ", le azioni nidificate sono Pet the catnell'azione. Nota che c'è un altro potenziale errore in questo diagramma, vedi gli errata alla fine della domanda.

Finalmente a casa

Ho usato il nodo strutturato, ma non sono sicuro che sia il modo corretto, quindi la domanda. In uno statechart l'equivalente sarebbe uno stato composito, ma non riesco proprio a trovare nulla su un'azione composita. Per quanto riguarda il nodo strutturato, dopo aver letto alcuni documenti a riguardo non riesco ancora a capire come dovrebbe essere usato, quindi potrei sbagliarmi completamente con questo diagramma.

So anche che esiste la possibilità di fare riferimento a un'altra sottoattività con il simbolo del tridente, come nell'immagine qui sotto, ma non corrisponde alle mie esigenze poiché vorrei tutte le informazioni sullo stesso diagramma (in modo da poter stampare senza alcuna perdita di informazioni):

Sottoattività del tridente

Quindi qual è il modo standard di rappresentare un'azione così nidificata? Per standard intendo UML valido, comunemente visto e se possibile realizzabile sulla maggior parte degli strumenti di progettazione UML.

Errata non correlati: un'altra cosa è sbagliata nei miei diagrammi, le frecce che arrivano alla stessa azione ( Scratch behind the ears) dovrebbero andare su un nodo di fusione prima di entrare nell'azione. Vedi i commenti qui sotto, inclusa questa citazione di JOT .


Non hai chiesto questo, ma voglio sottolineare che l'azione "Scratch dietro le orecchie" non può mai essere eseguita. Qualcuno sa perché questo è vero?
Jim L.,

Beh, non lo so, ma spero sia solo il carattere del gatto, perché il diagramma che ho finalmente dato al mio capo assomiglia a questo: /
Tim

Il motivo è che un gettone da entrambi i percorsi deve essere offerto all'azione affinché possa iniziare, il che è impossibile, poiché uno proviene da un altro che non accadrà mai.
Jim L.,

@ JimL. Vuoi dire che entrambe le condizioni devono essere vere per entrare in questo stato? Allora quale sarebbe il modo di esprimere ciò che intendo esprimere? Un nodo diamantato che si fonde prima dell'entrata dello stato?
Tim

Stiamo parlando di un'azione, non di uno stato; ma sì, è necessaria un'unione per risolvere questo problema.
Jim L.,

Risposte:


23

Entrambi sono "standard". La prima immagine secondo le specifiche UML è

Nodi di attività strutturati

Un StructuredActivityNode è un'azione che è anche un ActivityGroup (vedere la clausola 15.6) e il cui comportamento è specificato da ActivityNodes e ActivityEdges in esso contenuti. A differenza di altri tipi di ActivityGroup, un StructuredActivityNode possiede ActivityNodes e ActivityEdges che contiene, quindi un nodo o un bordo può essere contenuto direttamente in un solo StructuredActivityNode. StructuredActivityNodes può essere nidificato (poiché StructuredActivityNode, come Action, è anche ActivityNode), tuttavia, quindi un bordo o nodo può essere indirettamente contenuto in un numero di StructuredActivityNodes nidificati.

Gruppi di attività

ActivityGoups sono costrutti di raggruppamento per ActivityNodes e ActivityEdges. Nodi e bordi possono appartenere a più di un gruppo. Questa sottoclausola descrive due tipi concreti di ActivityGroups, ActivityPartitions e InterruptibleActivityRegions. StructuredActivityNodes è un terzo tipo di ActivityGroup, ma sono anche azioni e sono discussi nella sotto-clausola 16.11 della clausola 16 sulle azioni.

La seconda foto è

Azioni di invito

Un'invocazione è un'azione che si traduce, direttamente o indirettamente, nell'invocazione di un comportamento (vedere la clausola secondaria 13.2). InvocationActions include CallActions per chiamare Operazioni o Comportamenti e per avviare Comportamenti che sono stati precedentemente istanziati. Ulteriori tipi di InvocationActions consentono l'invio mirato di segnali e altri oggetti e la possibilità di trasmettere segnali ai ricevitori disponibili.

La differenza principale tra i due casi è il riutilizzo. Mentre in primo luogo hai solo un po 'di complessità in un singolo posto (il tuo Pet the cat) il secondo è quando (ri) usi una determinata azione in più punti. Tuttavia, tendo a utilizzare la variante di invocazione anche se è solo per un singolo utilizzo. Qui aggiungo un diagramma composito (che in EA si apre con dbl-click) per mostrare i dettagli dell'azione corrispondente. Il flusso principale mostra solo la panoramica e, se sono necessari dettagli, sono solo a due clic di distanza.

Ora, creare un diagramma composito in EA è (di nuovo) diverso. È necessario creare un annuncio a livello di pacchetto e trascinarlo nell'elemento di invito. Ora, quando fai doppio clic su questo, si aprirà il diagramma incorporato.


La ringrazio per la risposta. Potresti fornire maggiori dettagli su quando usi quale possibilità? Trovo che le specifiche UML siano piuttosto difficili da leggere, lato utente.
Tim

Non è una lezione per andare a letto :-) Proverò ad aggiungere qualche spiegazione in più.
qwerty_so,

Ho effettuato un aggiornamento con un'osservazione su un'altra EAUI.
qwerty_so,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.