# State Machine Diagrams
## Introduction
- Beschreiben den Zustand von Objekten oder des Systems

### Introduction Example
- Light can be on / off
- ![image_117.png](image_117.png)

## 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
![image_118.png](image_118.png)
- 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
![image_119.png](image_119.png)

### Internal Pseudostate
![image_121.png](image_121.png)
- **nur einmalig**
- Markieren den Start eines Maschinen-Diagramms
- Keine eingehenden Pfeile
- Ein ausgehender Pfeil zum ersten _richtigen_ Zustand
  - ohne Events

### Final State
![image_120.png](image_120.png)
- **können mehrere existieren**
- Objekte können permanent in einem End-Status sein


## State Transitions
### External Transitions
![image_122.png](image_122.png)
- 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

![image_123.png](image_123.png)

#### 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
- ![image_124.png](image_124.png)

## 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
- ![image_125.png](image_125.png)
- ![image_126.png](image_126.png)
- ![image_127.png](image_127.png)

## Möglicher Spicker
![image_270.png](image_270.png)
