UML-Aktivitätsdiagram: Tokens auslöschen

DAB268

Cadet 4th Year
Registriert
Aug. 2008
Beiträge
92
Hallo.

In diesem Aktivitätsdiagramm habe ich das Problem, dass ich zwar mehrere Tokens erzeuge, diese aber niemals wieder vereinigt werden. Es soll allerdings nach jeden Durchlauf lediglich ein Token auf warten liegen. gibt es eine Möglichkeit, auf der eingehenden Kante irgendwie die Token wieder zu reduzieren, dass nur eines bei "wait" ankommt? Synchronisationsknoten würden nicht funktionieren, ohne dass ich das Diagramm unübersichtlich und kompliziert machen würde, da die Aktivitäten, wie etwa "store water gauge data", sowohl von Tokens durchlaufen würden, die nicht vervielfältigt wurden, als auch von Tokens, die vervielfältigt wurden. Daher müsste ich hier über mehrere Entscheidungsknoten die einzelnen Fälle unterschieden.

Gibt es noch einen einfacheren Weg?

MfG
DAB268
 
Kennst du die Regel der "goldenen Sieben" in der Softwareentwicklung? - Es ist eine Richtlinie an die sich nach Möglichkeit gehalten werden soll um genau solche Fälle zu vermeiden. Sieben Elemente auf einer "View" um die Übersichtlichkeit zu bewahren.

Zu deinem Problem:
Ich seh das ähnlich wie du. Es gibt in deinem Fall nur die Möglichkeit der Synchronisationsknoten. Dadurch würden sich allerdings diverse Knoten und Aktionen verschieben. Ausserdem ist es ein Problem das so umzubauen, dass die Übersichtlichkeit gewahrt wird und die semantische Richtigkeit auch noch gegeben ist. Synchronisationknoten heisst bekanntlich: 2 oder mehr Kanten rein, eine Kante raus.
 
Ja, die goldenen 7 sind mir ein Begriff, daher habe ich schon versucht, das Diagramm klein zu halten (die einzelnen Aktivitäten werden nochmal einzeln detailliert).

Was mir gerade noch eingefallen ist sind drei Lösungen, wobei mir die zweite und dritte am korrektesten erscheint:

  1. Man könnte evtl. durch einen Kommentar an der eingehenden Kante von wait sagen, dass nur ein Token zu wait durchkommen soll. Semantisch nciht korrekt, aber übersichtlich.
  2. Statt der eingehenden Kante bei wait, könnte diese zu einem Endknoten für Kontrollflüsse führen. An diesen käme ein Kommentar, dass die Aktivität neu gestartet wird, sobald keine Tokens mehr vorhanden sind.
  3. Wieder wird ein Endknoten eingefügt, nur anstelle des Kommentars wird nach jeder Verzweigung nach wait eine Parallelisierung zurück auf wait und zum eigentlichen weg durchgeführt.

Denke mal die dritte Version wäre am besten, wobei die zweite übersichtlicher wäre...
 
denke mal du wirst an einer Synchronisierung nicht herumkommen, die Anzahl der Tokens steigt in deinem Diagramm unbegrenzt an... wenn du den Entscheidungsknoten unten links in einen Sychronisierungsknoten "umwandelst" müsste es passen, allerdings weiss ich nicht ob das 100% UML konform ist

/edit: wobei das recht unsauber ist, normalerweise müsstest du von vornherein auf eine entsprechende Synchronisierung achten

Frage: Müssen bei einer Synchronisierung nicht erst alle Tokens anliegen bevors weitergehen kann?
 
Zuletzt bearbeitet:
Das Problem ist eben auch, dass 1-3 Tokens pro Durchlauf entstehen können, ein Synchronisierungsknoten würde nicht reichen, man bräuchte dutzende Entscheidungs- und Synchronisationsknoten um es semantisch korrekt zu machen, allerdings wäre dann die Übersichtlichkeit gleich Null. Daher präferiere ich mittlerweile eine nicht ganz so korrekte, aber übersichtliche Lösung.
 
Zurück
Oben