Ich modelliere eine Schleife in einem UML-Aktivitätsdiagramm. Es funktioniert gut mit einfachen Bedingung Knoten (Diagramm 1), aber ich bin auf der Suche nach einem aussagekräftigeren Weg zu betonen die Schleife semantische. So kam ich zu "Regionen" oder "unterbrechbaren Regionen", die here und there gezeigt werden, aber ich konnte nicht viele wirklich befriedigende Beispiele finden.Schleife im UML-Aktivitätsdiagramm mit einer Region
Mein Beispiel ist eine Funktion, die Nachrichten einer bestimmten Liste verarbeitet. Die Schleife wird abgebrochen, sobald die erste gültige Nachricht gefunden wurde, dann wird die Nachricht verarbeitet und die Funktion gibt true zurück. Andernfalls gibt es false zurück (bitte keine Kommentare über Sinn oder Unsinn, es ist nur für eine Probe).
Diagramm 1: Verwendet einen guten alten Aktivitätsdiagramm-bedingten Knoten. Es ist zwar einfacher, dem Kontrollfluss entlang der Pfeile zu folgen, aber es gibt kein "The LOOP", es gibt nur ein "wenn".
Diagramm 2:
- ist die (positive) Ausgangsbedingung richtig ist, eine Unterbrechungskante unter Verwendung von? Es stimmt, dass es zusammen mit dem Iterator Teil des Abschnitts [test] der Schleife sein könnte.
- BTW: Wie ist das Iterationszeichen einer For-Schleife am besten in UML ausgedrückt?
- Ist der Endknoten der Aktivität innerhalb des Schleifenkörpers korrekt (d. H. Wenn die bedingte "Nachricht gültig?" "Nein" ergibt)? Es fühlt sich irgendwie falsch an, hier einen letzten Knoten zu verwenden, aber wie kann ich sonst den Kontrollfluss einer Schleife ausdrücken?
Die Funktionalität beider Diagramme sollten gleichwertig sein:
Edit: Ein weiteres Diagramm, das die Vorschläge von Steph implementiert:
- I nitial und Endknoten innerhalb des Schleifenkörpers
- "Weiterverarbeitung" ist jetzt innerhalb des Schleifenkörpers. Naja ... OK hier, aber es könnte andere Loops geben, wo ich es lieber draußen hätte. Dann könnte ich das Design sowieso ändern ...
- Die „nächste Nachricht“ kann auch als Iteratorobjekt zu sehen selbst anstelle der Aktion „(stellt die) nächste Nachricht“ aus dem ursprünglichen Diagramm.
- Die beiden Objektflusspfeile sind vielleicht etwas übertrieben, aber ich denke, dass sie korrekt sind.
Können Sie erklären, was das "fork" -Symbol in Ihrem "isMessageValid" -Status darstellt? Ich bin mir eines solchen Symbols nicht bewusst. – Torsten
Dies ist eine Aktion (kein Zustand) mit "Anrufverhalten". Es symbolisiert, dass "isMessageValid" nicht nur ein boolesches Flag, sondern ein Platzhalter für ein anderes Diagramm ist, das einen tieferen Arbeitsablauf erklärt (in Tools wie EA können Sie auch auf diese Aktion doppelklicken, um zu diesem Diagramm zu wechseln). Beachten Sie, dass ich, als ich dieses Diagramm vor einigen Jahren zeichnete, nicht sehr erfahren war. Nun würde ich "Gültigkeitsprüfung" schreiben, da UML abstrakt und programmiersprachenunabhängig sein sollte. Wenn es kein anderes Diagramm als ein bekanntes Objekt mit der Methode isMessageValid() gibt, kann man das auch schreiben - ohne Fork. – minastaros
In Ordnung, es ist eine Aktion, da es ein Aktivitätsdiagramm ist. Vielen Dank für Ihre gründliche Erklärung. Ich kannte nur das Symbol "zwei Blasen/Zustände" (zusammengesetzter Zustand). Entspricht das der Gabel? – Torsten