Wie stelle ich verschachtelte Aktionen in einem UML-Aktivitätsdiagramm dar?

16

Diese Frage ist sehr ähnlich wie diese , aber die Antwort nicht meine Bedürfnisse anzupassen. Es konzentriert sich auf ein bestimmtes UML-Tool (Papyrus), während meine Frage allgemeiner zu UML ist.

Ich möchte eine verschachtelte Aktion in einem Aktivitätsdiagramm darstellen , aber ich weiß nicht, wie das normalerweise gemacht wird. Die Idee ist, dass es eine Aktion mit dem gleichen Umfang wie die anderen Aktionen gibt, deren Ausführung jedoch komplexer ist. Ich möchte mehr Details zu seiner Ausführung anzeigen, während ich diese Aktion dennoch auf derselben Ebene wie die anderen anzeigen kann.

In dem folgenden Beispiel, bei dem es sich um ein Aktivitätsdiagramm handelt, das eine Art " Zurück " -Aktivität zeigt, befinden sich die verschachtelten Aktionen in der Pet the catAktion. Beachten Sie, dass dieses Diagramm einen weiteren potenziellen Fehler enthält. Lesen Sie die Errata am Ende der Frage.

Endlich wieder zu Hause

Ich habe den strukturierten Knoten verwendet, bin mir aber nicht sicher, ob dies der richtige Weg ist, daher die Frage. In einem Zustandsdiagramm wäre das Äquivalent ein zusammengesetzter Zustand, aber ich kann nichts über eine zusammengesetzte Aktion finden. In Bezug auf den strukturierten Knoten verstehe ich nach dem Lesen einiger Dokumente immer noch nicht, wie er verwendet werden soll, sodass ich mit diesem Diagramm möglicherweise völlig falsch liege.

Ich weiß auch, dass es die Möglichkeit gibt, auf eine andere Unteraktivität mit dem Dreizack-Symbol zu verweisen, wie im folgenden Bild, aber es entspricht nicht meinen Anforderungen, da ich die gesamten Informationen auf demselben Diagramm haben möchte (damit ich drucken kann) es ohne Informationsverlust):

Dreizack-Unteraktivität

Was ist also die Standardmethode , um eine solche verschachtelte Aktion darzustellen? Standardmäßig meine ich eine gültige UML, die häufig auf den meisten UML-Entwurfswerkzeugen verwendet wird und nach Möglichkeit auch verwendet werden kann.

Nicht verwandte Errata: In meinen Diagrammen stimmt etwas nicht. Die Pfeile, die zu derselben Aktion ( Scratch behind the ears) führen, sollten sich vor dem Aufrufen der Aktion an einem Zusammenführungsknoten befinden. Siehe die Kommentare unten, einschließlich dieses Zitats von JOT .

Tim
quelle
Sie haben nicht danach gefragt, aber ich möchte darauf hinweisen, dass die Aktion "Kratzen hinter den Ohren" niemals ausgeführt werden kann. Weiß jemand, warum das so ist?
Jim L.
Nun, ich weiß es nicht, aber ich hoffe, es ist nur das Temperament der Katze, denn das Diagramm, das ich meinem Chef schließlich gegeben habe, sieht so aus: /
Tim
Der Grund dafür ist, dass ein Token von beiden Pfaden für die Aktion angeboten werden muss, damit sie gestartet werden kann. Dies ist unmöglich, da einer von einem anderen stammt, der niemals stattfinden wird.
Jim L.
@ JimL. Meinen Sie, dass beide Bedingungen erfüllt sein müssen, um in diesen Zustand zu gelangen? Was wäre dann der Weg, um auszudrücken, was ich auszudrücken beabsichtige? Ein verschmelzender Diamantknoten vor dem Staatseingang?
Tim
Wir sprechen von einer Handlung, nicht von einem Staat. Aber ja, eine Zusammenführung ist erforderlich, um dieses Problem zu beheben.
Jim L.

Antworten:

23

Beide sind "Standard". Das erste Bild gemäß UML-Spezifikation ist

Strukturierte Aktivitätsknoten

Ein StructuredActivityNode ist eine Aktion, die auch eine ActivityGroup ist (siehe Unterabschnitt 15.6) und deren Verhalten durch die darin enthaltenen ActivityNodes und ActivityEdges festgelegt wird. Im Gegensatz zu anderen ActivityGroup-Typen besitzt ein StructuredActivityNode die enthaltenen ActivityNodes und ActivityEdges, sodass ein Knoten oder eine Kante nur direkt in einem StructuredActivityNode enthalten sein kann. StructuredActivityNodes können verschachtelt sein (als StructuredActivityNode ist eine Aktion auch ein ActivityNode), sodass eine Kante oder ein Knoten indirekt in einer Reihe von verschachtelten StructuredActivityNodes enthalten sein kann.

Aktivitätsgruppen

ActivityGoups sind Gruppierungskonstrukte für ActivityNodes und ActivityEdges. Knoten und Kanten können mehreren Gruppen angehören. Diese Unterklausel beschreibt zwei konkrete Arten von Aktivitätsgruppen, ActivityPartitions und InterruptibleActivityRegions. StructuredActivityNodes sind eine dritte Art von ActivityGroup, aber sie sind auch Aktionen und werden in Abschnitt 16.11 von Abschnitt 16 zu Aktionen erläutert.

Das 2. Bild ist

Aufrufaktionen

Eine InvocationAction ist eine Aktion, die direkt oder indirekt zum Aufrufen eines Verhaltens führt (siehe Unterabschnitt 13.2). InvocationActions umfassen die CallActions zum Aufrufen von Vorgängen oder Verhalten und zum Starten von Verhalten, die zuvor instanziiert wurden. Zusätzliche Arten von InvocationActions ermöglichen das gezielte Senden von Signalen und anderen Objekten sowie das Senden von Signalen an verfügbare Empfänger.

Der Hauptunterschied zwischen beiden Fällen ist die Wiederverwendung. Während Sie erstens nur an einer Stelle (Ihrer Pet the cat) etwas Komplexität haben, ist die zweite, wenn Sie eine bestimmte Aktion an mehreren Stellen (wieder) verwenden. Ich verwende die Aufrufvariante jedoch eher, selbst wenn sie nur einmal verwendet wird. Hier füge ich ein zusammengesetztes Diagramm hinzu (das in EA durch Doppelklick geöffnet wird), um Details der entsprechenden Aktion anzuzeigen. Der Hauptfluss zeigt nur die Übersicht und wenn Details benötigt werden, sind sie nur einen Doppelklick entfernt.

Jetzt ist das Erstellen eines zusammengesetzten Diagramms in EA (wieder) anders. Sie müssen eine AD auf Paketebene erstellen und diese dann in das Aufrufelement ziehen. Wenn Sie darauf doppelklicken, wird das eingebettete Diagramm geöffnet.

qwerty_so
quelle
Vielen Dank für Ihre Antwort. Könnten Sie näher erläutern, wann Sie welche Möglichkeit nutzen? Ich finde die UML-Spezifikation auf der Benutzerseite ziemlich schwer zu lesen.
Tim
Es ist keine Vorlesung vor dem Schlafengehen :-) Ich werde versuchen, eine Erklärung hinzuzufügen.
Qwerty_so
Ich habe ein Update mit einer Bemerkung zu einem anderen EAUI gemacht.
Qwerty_so