# State Machine Diagrams ## Introduction - Beschreiben den Zustand von Objekten oder des Systems ### Introduction Example - Light can be on / off -  ## States - Diskretes, durchgehendes Segment von Zeit, während der das Verhalten des Objekts stabil ist - Kann eine passive Qualität haben - _Licht an / aus_ - Kann auch eine aktive Qualität haben / Was das Objekt tut - _Kaffeemaschine mahlt Kaffee_ - Objekt bleibt in dem Zustand bis es von einem Event stimuliert wird - States sind **nicht**: - Objekte oder Komponenten des Systems - Aktivitäten des Systems ### Internal Activities of States  - 3 Aktivitäten die an einem definierten Moment ausgeführt werden - **entry behavior** - **do-activity behavior** - kann unterbrochen werden - **exit behavior** - entry- und exit behavior können nicht unterbrochen werden #### Activities Example  ### Internal Pseudostate  - **nur einmalig** - Markieren den Start eines Maschinen-Diagramms - Keine eingehenden Pfeile - Ein ausgehender Pfeil zum ersten _richtigen_ Zustand - ohne Events ### Final State  - **können mehrere existieren** - Objekte können permanent in einem End-Status sein ## State Transitions ### External Transitions  - Repräsentiert eine Änderung des Zustands von einem Ursprungs-Zustand zu einem Ziel-Zustand - Eine Transition braucht keine Zeit - Das System ist immer in einem Zustand, nie in einer Transition  #### Syntax of Description: trigger[guard] / behavior - Alles **optional**: - **Trigger** (Event), dass eine [Transition](#state-transitions) hervorruft - **Guard** (Condition), welche die Ausführung der Transition aktiviert - Sobald das Event stattfindet, muss der Guard erfüllt werden - Falls dasselbe Event mehrere Transitions eines einzigen States hervorruft - Die Guards müssen sich gegenseitig ausschließen - Falls nicht: EIne Transition wird zufällig ausgesucht - **Behavior** (Effects) wird während der Transition ausgeführt ### Internal Transition - Handhaben Events innerhalb eines States -  ## Types of Events ### Call Events - Operation calls inklusive der Parameter - _occupy(user, LectureHall)_ ### Time Events - Zeitbasierter Zustandsübergang (relativ / absolut) - _relative: after(5 sec)_ - _absolute: when(time == 16:00)_ ### Change Events - Permanente Überwachung, ob eine Bedingung wahr wird - _when (registration == numberOfSeats)_ ### Any Receive Events - Zur Spezifikation einen Typ eines _else_ Übergangs - Falls ein Event auftritt, welches keine Übergänge für den aktiven Zustand auslöst - _the object transitions to S4 without any event that is not e1 or e2_ ### Completion Events - Falls alle Verhaltensweisen eines States vollständig sind - _once A1 is completed completion event triggers transition to S2_ ## State Transition Examples -  -  -  ## Möglicher Spicker 