2013-04-03 15 views
16

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:

loop with conditional node

loop with region


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.

enter image description here

+0

Können Sie erklären, was das "fork" -Symbol in Ihrem "isMessageValid" -Status darstellt? Ich bin mir eines solchen Symbols nicht bewusst. – Torsten

+1

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

+0

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

Antwort

8

In UML stellt die Aktivität Endknoten einen Abschluss, so dass es in einem Schleifenbereich korrekt ist, wie man es verwenden, ist es die normale Beendigung des Inhalts der Schleife ist (der in Drehungen führt zur nächsten Iteration). Als Randnotiz empfehle ich Ihnen, auch einen Anfangsknoten für den Anfang Ihrer Schleife zu verwenden.

Und es gibt auch den Endknoten des Datenflusses, der einen Exit darstellt, anstelle eines Abschlusses.Sie können damit die Anweisung "break" statt der unterbrechenden Kante verwenden, die Sie verwenden. In diesem Fall müssen Sie den "weiteren Message-Processing-Node" im "Ja" -Zweig unmittelbar vor diesem letzten Flow-Knoten einbinden.

Die Unterbrechungskante ist eher für Unterbrechungen von außerhalb der aktuellen Verarbeitung. Die Region ist unterbrechbar, und einige Ereignisse (normalerweise bei Empfangsknoten notiert) können sie vollständig unterbrechen, unabhängig vom Fortschritt des Bereichsinhaltes. Hier ist es nicht der Fall.

In Bezug auf das Iterationszeichen gibt es leider nichts sehr Visuelles. Ich neige dazu, einen Objektknoten oberhalb der Region direkt neben dem Anfangsknoten zu verwenden.

+1

danke für die Hinweise zum Endknoten und Erklärung der Unterbrechungskante. Ich werde ein weiteres Diagramm zeichnen, siehe oben. – minastaros

+0

Ich denke, es ist eine gute Arbeit. Übrigens, wenn Sie nicht sicher sind, ob jeder seine Bedeutung verstehen wird (oft sollen UML-Diagramme Personen gezeigt werden, die nichts oder sehr wenig in UML wissen), können Sie immer noch eine "Pause" setzen. Label an den Knoten, um expliziter zu sein, zumindest wenn Sie es mit UML-Tool können. – Steph

Verwandte Themen