Wozu dienen UML-Aktivitätsdiagramme und wie sind sie aufgebaut?
Dynamische Abläufe visualisieren
Stell dir vor, ein:e Kund:in klickt in einem Onlineshop auf "Kaufen". Was passiert danach im Hintergrund? Ein UML-Aktivitätsdiagramm (Activity Diagram) hilft dir, genau solche dynamischen Abläufe von Aktivitäten zu visualisieren. Ähnlich wie ein klassisches Flussdiagramm zeigt es Schritt für Schritt, wie ein System arbeitet.
Du nutzt es primär, um Geschäftsprozesse (wie die Bestellabwicklung), komplexe Algorithmen (wie Suchverfahren) oder parallele Prozesse (Dinge, die gleichzeitig passieren) übersichtlich zu modellieren. Da du bereits den Kontrollfluss aus der prozeduralen Programmierung kennst, wird dir dieses Diagramm wie die visuelle Übersetzung deines Codes vorkommen. Es zeigt auf einen Blick: Wer macht was, wann und unter welchen Bedingungen?
Die grundlegenden Bausteine: Knotenarten
Um diese Abläufe darzustellen, verwendet das Diagramm verschiedene Knoten (Nodes), die durch Pfeile (Kanten) verbunden sind. Wir unterscheiden drei Hauptkategorien:
- Aktionsknoten (Action Nodes): Das sind die eigentlichen Arbeitsschritte, dargestellt als Rechtecke mit abgerundeten Ecken (z. B. "Zahlung prüfen").
- Kontrollknoten (Control Nodes): Sie lenken den Ablauf. Ein Startknoten (ausgefüllter schwarzer Kreis) markiert den Beginn. Ein Endknoten (schwarzer Kreis mit weißer Umrandung, ähnlich einem Spiegelei) beendet den gesamten Prozess.
- Objektknoten (Object Nodes): Sie stellen Daten oder Dokumente dar, die zwischen Aktionen weitergegeben werden. Sie werden als eckige Rechtecke gezeichnet. Wenn die Aktion "Rechnung erstellen" abgeschlossen ist, entsteht als Objektknoten das Dokument "Rechnung", welches als Input für die nächste Aktion benötigt wird.
Wie steuern wir komplexe und parallele Abläufe?
Sequenzielle vs. parallele Kontrollflüsse
Nicht jeder Prozess verläuft streng linear. Oft müssen Entscheidungen getroffen oder Aufgaben gleichzeitig erledigt werden. Das Aktivitätsdiagramm unterscheidet hierbei strikt zwischen zwei Konzepten:
- Sequenzielle Verzweigungen: Hierfür nutzt du einen Entscheidungsknoten (Decision Node), dargestellt als Raute. Ähnlich einer
if/else-Bedingung im Code nimmt der Prozess hier nur einen von mehreren möglichen Wegen (z. B. "Ist das Passwort korrekt?"). Eine weitere Raute (Merge Node) führt diese alternativen Wege später wieder zusammen. - Parallele Abläufe (Concurrency): Wenn Aufgaben gleichzeitig stattfinden, verwendest du einen Gabelungsknoten (Fork Node), gezeichnet als dicker schwarzer Balken. Er spaltet den Kontrollfluss in mehrere parallele Pfade auf. Ein Beispiel: Nach einem Video-Upload werden gleichzeitig das Video komprimiert und ein Vorschaubild generiert. Ein Vereinigungsknoten (Join Node) – ebenfalls ein dicker Balken – wartet anschließend, bis alle parallelen Pfade abgeschlossen sind, bevor der Prozess weitergeht.
Verantwortlichkeiten klären mit Partitionen (Swimlanes)
Bei komplexen Systemen reicht es nicht zu wissen, was passiert – du musst auch wissen, wer dafür zuständig ist. Hier kommen Partitionen (oft Swimlanes oder Schwimmbahnen genannt) zum Einsatz.
Das Diagramm wird dabei in vertikale oder horizontale Bereiche unterteilt. Jede Bahn repräsentiert eine Verantwortlichkeit – das kann eine bestimmte Benutzerrolle (z. B. "Kund:in"), eine Abteilung ("Buchhaltung") oder ein technisches System ("Datenbank") sein.
Du platzierst die Aktionsknoten einfach in der Bahn der zuständigen Instanz. Wenn ein Pfeil die Grenze zwischen zwei Swimlanes überschreitet, erkennst du sofort: Hier findet eine Kommunikation über Schnittstellen statt (z. B. das Frontend sendet Daten an das Backend). Das macht Swimlanes zu einem mächtigen Werkzeug, um Abhängigkeiten in der Softwarearchitektur frühzeitig aufzudecken.
Teste dein Wissen
Du sollst den Ablauf einer Bestellabwicklung im neuen Onlineshop für das Entwicklungsteam dokumentieren. Welches UML-Diagramm wählst du dafür?