đŻ Ăbersicht
Diese Anleitung fĂŒhrt Sie durch die Gestaltung und Modellierung eines Telefonie-Anruf-Steuerungssystem unter Verwendung von UML-Zustandsmaschinen-Diagrammen. Sie konzentriert sich auf die Lebenszyklus ausgehender Anrufe, wobei gezeigt wird, wie eine Telefonleitung aufgrund von Benutzeraktionen und Netzwerkevents zwischen ZustĂ€nden wechselt.
Das Diagramm erfasst sowohl die glĂŒckliche Pfade (Erfolgreiche Anrufherstellung) als auch die unglĂŒckliche Pfade (Fehler, Timeouts, besetzte Leitungen), wobei der Fokus auf Robustheit, Ausnahmehandhabung und klaren ZustandsĂŒbergĂ€ngen liegt â zentrale Prinzipien in Echtzeitkommunikationssystemen.
đ§© Grundlegende Konzepte von UML-Zustandsmaschinen
Bevor Sie in das Diagramm einsteigen, verstehen Sie diese grundlegenden UML-Konzepte:
| Begriff | Beschreibung |
|---|---|
| Zustand | Ein Zustand, in dem ein Objekt bestimmte Bedingungen erfĂŒllt oder Aktionen ausfĂŒhrt. |
| Ăbergang | Ein Wechsel von einem Zustand zum anderen, ausgelöst durch ein Ereignis. |
| Ereignis | Ein Ereignis, das einen Ăbergang verursacht (z.âŻB. onHook, gĂŒltigeNummer). |
| SelbstĂŒbergang | Ein Ăbergang, der in demselben Zustand beginnt und endet (z.âŻB. Ziffer(n) wĂ€hrend in WĂ€hlen). |
| Pseudozustand | Spezielle Steuerpunkte wie Anfang oder Ende die keine echten ZustÀnde sind. |
| Verbundzustand | Ein Zustand, der Unterkonfigurationen enthĂ€lt (z.âŻB. Fehler Zustand mit Besetztton, Schneller Besetztton, Aufgezeichnete Nachricht). |
| WĂ€chterbedingung | Ein boolescher Ausdruck, der wahr sein muss, damit eine Ăbergang stattfindet. |
â Â Pro-Tipp:Â Verwenden SieÂ
Ereignis [WÀchter] / Aktion Syntax in UML, um Auslöser, Bedingungen und Nebenwirkungen zu dokumentieren.
đ Lebenszyklus ausgehender Anrufe: Schritt-fĂŒr-Schritt-AufschlĂŒsselung
1. Initiierungs- und WÀhlphase
đč AnfĂ€nglicher Pseudozustand â Bereitschaft
-
Das System startet im AnfÀnglicher Pseudozustand.
-
Noch keine AktivitÀt; das Telefon befindet sich am Hörer.
đč Bereitschaft â WĂ€hlton (am Hörer)
-
Ereignis:Â
am Hörer (Benutzer hebt den Hörer ab) -
Ăbergang:Â
am Hörer â WĂ€hlton -
Aktion:Â WĂ€hlton erzeugen; Vorbereitung auf Eingabe einer Ziffer.
đ Dies ist die erste sichtbare ZustandsĂ€nderung im Anruflebenszyklus.
đč WĂ€hlton â WĂ€hlen (Ziffer(n))
-
Ereignis:Â
Ziffer(n)Â (Benutzer gibt eine Ziffer ein) -
Ăbergang:Â
Ziffer(n) â WĂ€hlen -
Zustand:Â Wechseln inÂ
WÀhlen Modus.
đč Selbstdurchlauf: WĂ€hlen â WĂ€hlen (Ziffer(n))
-
Ereignis:Â
Ziffer(n)Â (Mehrere Ziffern eingegeben) -
Bedingung:Â Keine (immer erlaubt)
-
Aktion:Â FĂŒge Ziffer zur eingegebenen Nummer hinzu.
-
Zweck:Â Erlaube kontinuierliche Eingabe von Ziffern ohne den Zustand zu verlassenÂ
WÀhlen Zustand.
đĄÂ SelbstĂŒbergĂ€nge sind entscheidend fĂŒr die Behandlung von Eingabefolgen wie Telefonnummern.
2. Verbindungslogik und Ausnahmehandhabung
đč WĂ€hlen â Verbinden (gĂŒltigeNummer)
-
Ereignis:Â
gĂŒltigeNummer (vollstĂ€ndige Nummer validiert) -
Ăbergang:Â
gĂŒltigeNummer â Verbinden -
Aktion:Â Rufaufbau mit dem Netzwerk initiieren.
đč WĂ€hlen â Aufgezeichnete Nachricht (ungĂŒltigeNummer)
-
Ereignis:Â
ungĂŒltigeNummer (z. B. falsche LĂ€nge, ungĂŒltiger PrĂ€fix) -
Ăbergang:Â
ungĂŒltigeNummer â Aufgezeichnete Nachricht -
Aktion: Wiedergabe einer vorab aufgezeichneten Nachricht: âDie von Ihnen gewĂ€hlte Nummer ist nicht in Betrieb.â
đč Verbinden â Besetztton (NummerBesetzt)
-
Ereignis:Â
NummerBesetzt -
Ăbergang:Â
NummerBesetzt â Besetztton -
Aktion:Â Besetztton abspielen; Benutzer informieren, dass die Leitung belegt ist.
đč Verbindungsaufbau â Schneller Besetztton (LeitungBesetzt)
-
Ereignis:Â
LeitungBesetzt -
Ăbergang:Â
LeitungBesetzt â Schneller Besetztton -
Aktion:Â Schnellen Besetztton abspielen; NetzĂŒberlastung anzeigen.
â ïžÂ Hinweis: Dies sind FehlerzustĂ€nde die den normalen Ablauf unterbrechen. Sie mĂŒssen ordnungsgemÀà behandelt werden.
3. Timeout- und Warnmechanismus
đč WĂ€hlen â Warnung (Timeout)
-
Ereignis:Â
Timeout nach 30 Sekunden InaktivitÀt -
Ăbergang:Â
Timeout â Warnung -
Aktion:Â Warnsignal abspielen; Benutzer informieren, weiterzumachen oder aufzulegen.
đč Warnung â Timeout (Timeout)
-
Ereignis:Â
Timeout nochmals nach 10 Sekunden -
Ăbergang:Â
timeout â Timeout -
Aktion:Â Rufversuch abbrechen; zurĂŒck zuÂ
Wartezustand.
â±ïžÂ Die Timeout-Logik verhindert ein unendliches Warten und verbessert die Benutzererfahrung.
4. Aktueller Anruf und Trennung
đč Verbindung herstellen â Klingeln (weitergeleitet)
-
Ereignis:Â
weitergeleitet (Das Netzwerk leitet den Anruf erfolgreich weiter) -
Ăbergang:Â
weitergeleitet â Klingeln -
Aktion:Â Senden des Klingelsignals an die angerufene Partei.
đč Klingeln â Verbunden (angerufene Partei antwortet)
-
Ereignis:Â
angerufene Partei antwortet -
Ăbergang:Â
angerufene Partei antwortet â Verbunden -
Aktion:Â Audioverbindung herstellen; Anrufaufzeichnung starten (falls aktiviert).
đč Verbunden â Getrennt (aufgelegt ODER angerufene Partei legt auf)
-
Zwei Wege zur Trennung:
-
Benutzer legt auf:Â
aufgelegt â Getrennt -
Andere Partei legt auf:Â
calledPhoneHangsUp â Getrennt
-
đ Beide ĂbergĂ€nge fĂŒhren zuÂ
Getrennt bevor erreicht wirdÂEndzustand.
đč Getrennt â Endzustand
-
Ereignis:Â Kein (implizit oder ĂŒber Aktion zur Bereinigung)
-
Ăbergang:Â
Getrennt â EndgĂŒltig -
Aktion:Â RĂ€ume Ressourcen auf, protokolliere Anrufdauer, aktualisiere Statistiken.
â Â Der Endzustand markiert das Ende des Anruflebenszyklus.
đš Visuelle Gestaltungsprinzipien fĂŒr Klarheit
Um komplexe Zustandsmaschinen lesbar und wartbar zu machen:
| Prinzip | Implementierung |
|---|---|
| Zentrales Hauptpfad | Halte den Hauptverlauf (Ruhig â WĂ€hlton â WĂ€hlen â Verbinden â Klingeln â Verbunden) als saubere vertikale oder horizontale Linie. |
| Zweige nach auĂen fĂŒr Ausnahmen | Platziere FehlerzustĂ€nde (Besetztton, Schnellbesetztton, Aufgezeichnete Nachricht) als Seitenzweige. |
| Gruppiere verwandte ZustĂ€nde | Verwende zusammengesetzte ZustĂ€nde fĂŒr FehlerzustĂ€nde (siehe unten). |
| Verwende PseudozustÀnde weise | Anfang und Ende sollten deutlich gekennzeichnet werden. |
| Ăberkreuzende ĂbergĂ€nge vermeiden | Stellen Sie sicher, dass Pfeile sich nicht ĂŒberlappen; verwenden Sie gegebenenfalls orthogonale Bereiche. |
đ§ Erweiterte Modellierungstechniken
â Zusammengesetzter Zustand: Gruppierung âFehlerâ
Statt die Auflistung von Besetztton, Schneller Besetztton, und Aufgezeichnete Nachricht als separate ZustÀnde aufzulisten, gruppieren Sie sie unter einem zusammengesetzten Zustand namens Fehler:
[Fehler]
âââ Besetztton
âââ Schneller Besetztton
âââ Aufgezeichnete Nachricht
-
Eintrittsaktion:Â Spielt einen Fehlerton oder eine Fehlermeldung ab.
-
Austrittsaktion:Â ZurĂŒckkehren zuÂ
WĂ€hltone oderÂRuhestatus nach der Benutzerantwort.
â Â Vorteil:Verringert visuelle UnĂŒbersichtlichkeit und verbessert die Skalierbarkeit.
â WĂ€chterbedingungen (optionale Verbesserungen)
FĂŒgen Sie WĂ€chter hinzu, um ĂbergĂ€nge zu verfeinern:
digit(n) [number.length < 15] â WĂ€hlen
validNumber [number.isInternational] â Verbinden
đ ïž WĂ€chter verhindern ungĂŒltige ĂbergĂ€nge und unterstĂŒtzen bedingte Logik.
đ Wichtige Erkenntnisse: Best Practices fĂŒr komplexe Zustandsmaschinen
| Ăbung | Warum es wichtig ist |
|---|---|
| Unangenehme Pfade modellieren | Echte Systeme versagen. Gestaltung fĂŒr ungĂŒltigeNummer, ZeitĂŒberschreitung, LeitungBeschĂ€ftigt sorgt fĂŒr ZuverlĂ€ssigkeit. |
| Aktionsexpressionen verwenden | Enthalten Sie / logCallAttempt() oder / playTone() um Nebenwirkungen anzuzeigen. |
| Halten Sie Ereignisse ausfĂŒhrlich und handlungsorientiert | Verwenden Sie aufgelegt, weitergeleitet, angerufenesTelefonAntwortetanstatte1, e2. |
| Benennen Sie ZustÀnde eindeutig | Vermeiden SieZustand1, Zustand2. Verwenden SieWÀhlen, Klingeln, Verbunden. |
| Dokumentieren Sie Annahmen | Zum Beispiel: âTimeout nach 30 Sekunden InaktivitĂ€tâ sollte in Kommentaren erwĂ€hnt werden. |
đ» Codegenerierung: PlantUML & Mermaid
Hier sindfertige Codeblöckeum dieses Diagramm in Ihrem bevorzugten Format zu generieren.
â PlantUML-Code
@startuml
[*] â> Leerlauf
Leerlauf â> WĂ€hlton : aufgelegt
WĂ€hlton â> WĂ€hlen : Ziffer(n)
WĂ€hlen â> WĂ€hlen : Ziffer(n) â SelbstĂŒbergang
WĂ€hlen â> Verbinden : gĂŒltigeNummer
WĂ€hlen â> AufgezeichneteNachricht : ungĂŒltigeNummer
WĂ€hlen â> Warnung : ZeitĂŒberschreitung
Warnung â> ZeitĂŒberschreitung : ZeitĂŒberschreitung
Verbinden â> Klingeln : weitergeleitet
Verbinden â> Besetztton : NummerBesetzt
Verbinden â> SchnellerBesetztton : TrunkBesetzt
Klingeln â> Verbunden : angerufenesTelefonAntwortet
Verbunden â> Getrennt : aufgelegt
Verbunden â> Getrennt : angerufenesTelefonLegtAuf
Getrennt â> [*] : AufrĂ€umen
Zustand âFehlerâ als FehlerZustand {
Zustand âBesetzttonâ als Besetztton
Zustand âSchnellerBesetzttonâ als SchnellerBesetztton
Zustand âAufgezeichneteNachrichtâ als AufgezeichneteNachricht
}
â Interne Aktionen
Ruhig : Eingang / Warten auf Abheben
WĂ€hltone : Eingang / WĂ€hltone abspielen
WĂ€hlen : Eingang / Ziffern sammeln
Verbinden : Eingang / Anruf weiterleiten
Klingeln : Eingang / Fernes Telefon klingeln lassen
Verbunden : Eingang / Anrufsession herstellen
Getrennt : Eingang / Session beenden
@enduml
đ„ Wie man verwendet: EinfĂŒgen in PlantUML Live oder Ihre IDE-Plugin.
â Mermaid Code

stateDiagram-v2
[*] --> Idle
Idle --> DialTone : onHook
DialTone --> Dialing : digit(n)
Dialing --> Dialing : digit(n) ' SelbstĂŒbergang
Dialing --> Connecting : gĂŒltigeNummer
Dialing --> RecordedMessage : ungĂŒltigeNummer
Dialing --> Warning : timeout
Warning --> Timeout : timeout
Connecting --> Ringing : weitergeleitet
Connecting --> BusyTone : Nummer besetzt
Connecting --> FastBusyTone : Trunk besetzt
Ringing --> Connected : angerufeneNummer antwortet
Connected --> Disconnected : onHook
Connected --> Disconnected : angerufeneNummer legt auf
Disconnected --> [*] : Bereinigung
state Fehler {
BusyTone
FastBusyTone
AufgezeichneteNachricht
}
Connecting --> BusyTone : Nummer besetzt
Connecting --> FastBusyTone : Trunk besetzt
Dialing --> AufgezeichneteNachricht : ungĂŒltigeNummer
note right of BusyTone
Standard-Besetztton abspielen
end note
note right of FastBusyTone
Schneller Besetztton abspielen (NetzĂŒberlastung)
end note
note right of AufgezeichneteNachricht
Aufgezeichnete Nachricht abspielen: "Nummer nicht im Service."
end note
note right of Timeout
Anrufversuch nach 40 Sekunden abgebrochen
end note
đ„ Wie man es verwendet: EinfĂŒgen in Mermaid Live Editor oder unterstĂŒtzte Markdown-Tools (VS Code, Obsidian usw.).
đ Zusammenfassung & Schlussgedanken
Dieser Telefonie-Anrufsteuerungssystem Zustandsmaschine ist ein realitÀtsnahes Beispiel davon, wie UML komplexe, ereignisgesteuerte Systeme mit hoher ZuverlÀssigkeit modellieren kann.
â Was dieses Diagramm effektiv macht:
-
Klare glĂŒcklicher Pfad mit logischem Ablauf.
-
Umfassende Fehlerbehandlung.
-
Verwendung von SelbstĂŒbergĂ€nge, zusammengesetzte ZustĂ€nde, und Guard-Bedingungen.
-
Visuelle Klarheit durch Gruppierung und Anmerkungen.
đ ïž Wann sollte dieses Muster verwendet werden:
-
Telefoniesysteme
-
IoT-GerÀtesteuerung
-
Benutzersitzungsverwaltung
-
Workflowsysteme
-
Eingebettete Systeme mit endlichem Zustandslogik
đ Möchten Sie dies erweitern?
BerĂŒcksichtigen Sie Folgendes:
-
Anrufaufzeichnung Zustand (mitÂ
startAufzeichnung,ÂstopAufzeichnung Ereignisse) -
Anrufumleitung Logik (bedingte Routing)
-
Anrufwarteschleife UnterstĂŒtzung (parallele ZustĂ€nde)
-
Anrufweiterleitung als Unterzustand vonÂ
Verbunden -
Zustandsverlauf (oberflĂ€chlicher/tiefer Verlauf) fĂŒr erneuten Eintritt nach Unterbrechung
đ EndgĂŒltige Empfehlung
Modellieren Sie immer sowohl den Erfolg als auch den Fehlerpfad.
Ein Zustandsmaschine, die nur die âglĂŒcklichen Pfadeâ behandelt, ist unvollstĂ€ndig und in der Produktion anfĂ€llig fĂŒr Fehler.
Verwenden Sie diese Anleitung als Vorlage zur Modellierung jedes Echtzeit-Systems, wo ZustandsĂŒbergĂ€nge, Ereignisse, und Fehlerresilienz ist wichtig.
â
 Bereit, zu generieren, zu visualisieren oder zu erweitern?
đ Kopieren Sie den PlantUML oder Mermaid Code oben und integrieren Sie ihn in Ihre Dokumentation, Architekturdiagramme oder Systemdesigndokumente.
Lassen Sie mich wissen, wenn Sie eine PDF-Version, interaktives Diagramm, oder Integration in ein gröĂeres Systemmodell (z.âŻB. mit Komponentendiagrammen oder Ablaufdiagrammen)!
đ âDie besten Systeme sind nicht nur korrekt â sie antizipieren Fehler.â
â Entwerfen mit UML-Zustandsmaschinen











