đŻ Ă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.
đ§© Grundkonzepte 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Â
Wahlvorgang Zustand zu verlassen.
đĄÂ SelbstĂŒbergĂ€nge sind entscheidend fĂŒr die Behandlung von Eingabefolgen wie Telefonnummern.
2. Verbindungslogik und Ausnahmehandhabung
đč Wahlvorgang â Verbindungsaufbau (gĂŒltigeNummer)
- Ereignis:Â
gĂŒltigeNummer (vollstĂ€ndige Nummer bestĂ€tigt) - Ăbergang:Â
gĂŒltigeNummer â Verbindungsaufbau - Aktion:Â Rufaufbau mit dem Netzwerk initiieren.
đč Wahlvorgang â 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 im Dienst.â
đč Verbindungsaufbau â Besetztton (NummerBesetzt)
- Ereignis:Â
NummerBesetzt - Ăbergang:Â
NummerBesetzt â Besetztton - Aktion:Â Besetztton abspielen; Benutzer informieren, dass die Leitung belegt ist.
đč Verbindungsaufbau â Schneller Besetztton (LeitungBelegt)
- Ereignis:Â
LeitungBelegt - Ăbergang:Â
LeitungBelegt â 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 (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; Aufnahme des Anrufs starten (falls aktiviert).
đč Verbunden â Getrennt (auflegen ODER angerufene Partei legt auf)
- Zwei Wege zur Trennung:
- Benutzer legt auf:Â
auflegen â Getrennt - Andere Partei legt auf:Â
calledPhoneHangsUp â Getrennt
- Benutzer legt auf:Â
đ Beide ĂbergĂ€nge fĂŒhren zuÂ
Getrennt bevor erreicht wirdÂEndzustand.
đč Getrennt â Endzustand
- Ereignis:Â Kein (implizit oder ĂŒber Aktion zur Bereinigung)
- Ăbergang:Â
Getrennt â End - 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 (Wartend â 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. |
| VerknĂŒpfe 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 falls nötig 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ĂŒck 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 | Reale Systeme versagen. Gestaltung fĂŒr ungĂŒltigeNummer, ZeitĂŒberschreitung, Leitung besetzt 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. |
| ZustÀnde deutlich benennen | VermeideZustand1, Zustand2. VerwendeWÀhlen, Klingeln, Verbunden. |
| Annahmen dokumentieren | 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
[*] --> Idle
Idle --> DialTone : aufgelegt
DialTone --> Dialing : Ziffer(n)
Dialing --> Dialing : Ziffer(n) ' SelbstĂŒbergang
Dialing --> Connecting : gĂŒltigeNummer
Dialing --> RecordedMessage : ungĂŒltigeNummer
Dialing --> Warning : Timeout
Warning --> Timeout : Timeout
Connecting --> Ringing : weitergeleitet
Connecting --> BusyTone : NummerBesetzt
Connecting --> FastBusyTone : TrunkBesetzt
Ringing --> Connected : angerufenesTelefonantwortet
Connected --> Disconnected : aufgelegt
Connected --> Disconnected : angerufenesTelefonlegteauf
Disconnected --> [*] : Bereinigung
state "Fehler" as ErrorState {
state "Besetztton" as BusyTone
state "SchnellBesetztton" as FastBusyTone
state "AufgezeichneteNachricht" as RecordedMessage
}
' Interne Aktionen
Idle : entry / Warten auf Abheben
DialTone : entry / WĂ€hlen-Ton abspielen
Dialing : entry / Ziffern sammeln
Connecting : entry / Anruf weiterleiten
Ringing : entry / FerngerÀt klingeln lassen
Connected : entry / Anrufsession aufbauen
Disconnected : entry / Session beenden
@enduml đ„ Wie man verwendet: EinfĂŒgen in PlantUML Live oder Ihre IDE-Erweiterung.
â Mermaid-Code

stateDiagram-v2
[*] --> Idle
Idle --> DialTone : onHook
DialTone --> Dialing : digit(n)
Dialing --> Dialing : digit(n) ' SelbstĂŒbergang
Dialing --> Connecting : validNumber
Dialing --> RecordedMessage : invalidNumber
Dialing --> Warning : timeout
Warning --> Timeout : timeout
Connecting --> Ringing : routed
Connecting --> BusyTone : numberBusy
Connecting --> FastBusyTone : trunkBusy
Ringing --> Connected : calledPhoneAnswers
Connected --> Disconnected : onHook
Connected --> Disconnected : calledPhoneHangsUp
Disconnected --> [*] : cleanup
state Error {
BusyTone
FastBusyTone
RecordedMessage
}
Connecting --> BusyTone : numberBusy
Connecting --> FastBusyTone : trunkBusy
Dialing --> RecordedMessage : invalidNumber
note right of BusyTone
Standard-Besetztton abspielen
end note
note right of FastBusyTone
Schnellen Besetztton abspielen (NetzĂŒberlastung)
end note
note right of RecordedMessage
Aufgezeichnete Nachricht abspielen: "Die Nummer ist nicht im Service."
end note
note right of Timeout
Anrufversuch nach 40 Sekunden abgebrochen
end note
đ„ So verwenden Sie es: EinfĂŒgen in Mermaid Live Editor oder unterstĂŒtzte Markdown-Tools (VS Code, Obsidian usw.).
đ Zusammenfassung und abschlieĂende Gedanken
Dieses Telefonie-Anrufsteuerungssystem Zustandsmaschine ist ein realer Anwendungsfall davon, wie UML komplexe, ereignisgesteuerte Systeme mit hoher ZuverlÀssigkeit modellieren kann.
â Was diesen Diagramm effektiv macht:
- Klare glĂŒcklicher Pfad mit logischem Ablauf.
- Umfassende Fehlerbehandlung.
- Verwendung von SelbstĂŒbergĂ€nge, zusammengesetzte ZustĂ€nde, und WĂ€chter.
- Visuelle Klarheit durch Gruppierung und Anmerkung.
đ ïž 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Ă€chlich/tiefes Verlauf) fĂŒr die Wiederaufnahme nach Unterbrechung
đ EndgĂŒltige Empfehlung
Modellieren Sie immer sowohl die Erfolgspfade als auch die FehlervorgÀnge.
Eine 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, bei dem ZustandsĂŒbergĂ€nge, Ereignisse, und Fehlerrobustheit wichtig sind.
â
 Bereit zum Generieren, Visualisieren oder 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 Komponenten- oder Ablaufdiagrammen)!
đ âDie besten Systeme sind nicht nur korrekt â sie antizipieren Fehler.â
â Entwerfen mit UML-Zustandsmaschinen










