• Keine Ergebnisse gefunden

Modellierung und Implementation Zustandsdiagramme:

N/A
N/A
Protected

Academic year: 2021

Aktie "Modellierung und Implementation Zustandsdiagramme:"

Copied!
52
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Zustandsdiagramme:

Modellierung und Implementation

OOPM, Ralf Lämmel

(2)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

UML: Unified Modeling Language

2

UML ist eine Modellierungssprache.

UML dient der Anforderungsbeschreibung für Organisationssysteme und

Softwaresysteme.

UML ermöglicht die Beschreibung von Struktur

und Verhalten (Abläufe).

(3)

UML: Unified Modeling Language

Benutzer

Softwareentwickler Systemanalytiker Systemarchitekten

Anwendungsbereiche Informatik

Prozessmanagement

Informationsmanagement

(4)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

UML: Unified Modeling Language

4

Wichtige Ziele des UML-Sprachentwurfs:

Höhere Abstraktionsform Verständlichkeit

❖ durch die Verwendung der Diagrammform

❖ Lesbarkeit für diese Zielgruppen:

Manager

Benutzer

Ausführbarkeit (z.B. Code-Generierung)

(5)

UML: Unified Modeling Language

Strukturdiagramme

Klassendiagramme

Kompositionsstrukturdiagramme Komponentendiagramme

Objektdiagramme Paketdiagramme

Verteilungsdiagramme

Verhaltensdiagramme

Aktivitätsdiagramme

Anwendungsfalldiagramme Interaktionsübersichtsdiagramme Kommunikationsdiagramme

Sequenzdiagramme Zeitverlaufsdiagramme

Zustandsdiagramme

(6)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

UML: Unified Modeling Language

Strukturdiagramme

Klassendiagramme

Kompositionsstrukturdiagramme Komponentendiagramme

Objektdiagramme Paketdiagramme

Verteilungsdiagramme

Verhaltensdiagramme

Aktivitätsdiagramme

Anwendungsfalldiagramme Interaktionsübersichtsdiagramme Kommunikationsdiagramme

Sequenzdiagramme Zeitverlaufsdiagramme

Zustandsdiagramme

Basis der Modellierung im Allgemeinen.

Basis der Verhaltensmodellierung im Speziellen.

(7)

Beispiel eines Anwendungsfalldiagramms

Ein Modell von

Anwendungsfällen ist eine Sicht auf das

System welches das

Systemverhalten aus

externer Sicht (oder aus

Nutzersicht) betont.

(8)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

8

(C) OMG TUTORIAL SERIES

Siehe

Verwendung von Constraints

Weiteres Beispiel

(9)

Modellierungsphilosophien

Anwendungsfälle zuerst

Beginne mit Anwendungsfällen

Leite Struktur- und Verhaltensmodelle ab Nicht Anwendungsfall-getrieben

Regelmäßige Konsistenzkontrolle zwischen

‣ Anwendungsfallmodellen und

‣ allen anderen Modellen

(10)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

UML: Unified Modeling Language

Strukturdiagramme

Klassendiagramme

Kompositionsstrukturdiagramme Komponentendiagramme

Objektdiagramme Paketdiagramme

Verteilungsdiagramme

Verhaltensdiagramme

Aktivitätsdiagramme

Anwendungsfalldiagramme Interaktionsübersichtsdiagramme Kommunikationsdiagramme

Sequenzdiagramme Zeitverlaufsdiagramme

Zustandsdiagramme

Zur Darstellung von Szenarien = Instanzen eines Anwendungsfalles im Sinne eines typischen

Beispiels seiner Ausführung

(11)

Ein Sequenzdiagramm für den Kauf am Telefon

Objekt

Nachricht Objekt

Rückkehr

Nachricht

Rückkehr

Merke: Instanzen (Objekte) müssen nicht zwangsläufig zu implementierten

(12)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Zum Vergleich:

Ein Anwendungsfalldiagramm

12

(13)

Ein größeres Beispiel Weitere Aspekte

Kreieren von Objekten Zerstören von Objekten Asynchrone Aufrufe

Constraints bei Nachrichten

...

(14)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

UML: Unified Modeling Language

Strukturdiagramme

Klassendiagramme

Kompositionsstrukturdiagramme Komponentendiagramme

Objektdiagramme Paketdiagramme

Verteilungsdiagramme

Verhaltensdiagramme

Aktivitätsdiagramme

Anwendungsfalldiagramme Interaktionsübersichtsdiagramme Kommunikationsdiagramme

Sequenzdiagramme Zeitverlaufsdiagramme

Zustandsdiagramme

Verallgemeinerte Programmflusspläne

(15)

Ein Aktivitätsdiagramm zum Besuch einer Vorlesung

Startzustand

Endzustand

Aktivität

Entscheidung

(16)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Strukturelle Modellierung vs.

Verhaltensmodellierung

16

Klassendiagramm für die Modellierung

einer Universität

Aktivitätsdiagramm für die

Modellierung eines

Vorlesungsbesuches

(17)

Parallelität und Datenfluss am Beispiel

Nebenläufigkeit beginnt: “fork”

Nebenläufigkeit endet: “join”

Fluss-Objekt

Fluss-Objekt

Weitere (nicht illustrierte) Ausdrucksmittel Unterbrechungen

Signale (Eingabe/Ausgabe)

...

(18)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

UML: Unified Modeling Language

Strukturdiagramme

Klassendiagramme

Kompositionsstrukturdiagramme Komponentendiagramme

Objektdiagramme Paketdiagramme

Verteilungsdiagramme

Verhaltensdiagramme

Aktivitätsdiagramme

Anwendungsfalldiagramme Interaktionsübersichtsdiagramme Kommunikationsdiagramme

Sequenzdiagramme Zeitverlaufsdiagramme

Zustandsdiagramme

Zustandsänderung von Objekten

bei Ereignissen

(19)

Modellierung der Struktur eines U-Bahn-Systems

Das Verhalten ist offensichtlich

unterspezifiziert.

(20)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Ein Zustandsdiagramm für die Drehtür

20

Anfangszustand

Zustand

der Drehtür Zustand

der Drehtür

Ereignis Aktion

Ereignis

Transition

(21)

Eigenschaften von Zustandsdiagrammen

Vollständigkeit

Ist das Verhalten für jedes mögliche Ereignis in jedem möglichen Zustand definiert?

Terminierung

Gibt es Folgen von Zustandsübergängen die irgendwann zu einem Endzustand führen?

Determinismus

Ist der Folgestand in jedem Zustand durch das eintreffende Ereignis determiniert?

Im Beispiel:

Nein!

Im Beispiel:

Nein!

Im Beispiel:

Ja!

(22)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Ergänztes Zustandsdiagramm

22

Der Versuch des Passierens der Drehtür im blockierten Zustand führt zu einem Alarm.

Das Einfügen eines Tickets im unblockierten

Zustand impliziert das Auswerfen des Tickets.

(23)

Talking to a finite state machine?

Locked > Pass?

Alarm!

Locked > Ticket?

Collect!

Unlocked > Pass?

Locked > …

(24)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Weiter ergänztes Zustandsdiagramm

24

(25)

Nebenbemerkung/Übung:

Der Lebenszyklus eines Objektes kann auch als ein Zustandsdiagramm verstanden werden.

1. Konstruktion a) Stempeln b) Initialisieren c) Assoziieren 2. Mitarbeit

a) Nachrichten verarbeiten b) Nachrichten versenden c) Zustand anpassen

3. Persistieren (optional) 4. Dekonstruktion

a) Aufgeben b) Abschließen c) Vergehen

5. Auferstehen (optional)

(26)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Implementation von Zustandsdiagrammen

Zweck der Übung?

Demonstration der Ausführbarkeit von Objekten Illustration des Abstandes zwischen

Modell und

Implementation.

Illustration stark unterschiedlicher Optionen.

Illustration von Programmiertechniken.

26

(27)

Optionen der Implementation von Zustandsdiagrammen

SwitchCase -- Überführung mittels switch-case-Anweisung MethodDispatch -- Überführung mittels dynamischer Bindung TableDriven -- Überführung mittels Datenstruktur

https://svn.code.sf.net/p/developers/code/repository/oopm/eclipse/chrestomathy/uml/state/

(28)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Optionen der Implementation von Zustandsdiagrammen

SwitchCase -- Überführung mittels switch-case-Anweisung MethodDispatch -- Überführung mittels dynamischer Bindung TableDriven -- Überführung mittels Datenstruktur

28

(29)

SwitchCase:

Aufzählungstyp für Zustände

public enum State { Locked,

Unlocked }

Kurzform für eine abstrakte Klasse State mit zwei

Unterklassen Locked und Unlocked.

(30)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

SwitchCase:

Ereignis “(insert a) ticket”

30

public void ticket() {

System.out.println("Someone trying to \"Ticket\".");

switch (state) { case Locked :

Collect();

state = State.Unlocked;

break;

case Unlocked : Eject();

break;

}

print();

}

Aufruf einer Methode für die Aktion

Zuweisung des Zielzustandes

Aufruf einer Methode für die Aktion

Abfrage des aktuellen

Zustandes (Attribut)

(31)

SwitchCase:

Ereignis “pass (the turnstile)”

public void pass() {

System.out.println("Someone trying to \"Pass\".");

switch (state) { case Locked :

Alarm();

break;

case Unlocked :

state = State.Locked;

break;

}

print();

}

(32)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

SwitchCase: Aktionen

32

protected void alarm() {

System.out.println("Alarm!");

}

protected void collect() {

System.out.println("Ticket collected.");

}

protected void eject() {

System.out.println("Ticket ejected.");

}

(33)

enum State { EXCEPTION, LOCKED, UNDEFINED, UNLOCKED };

enum Event { RELEASE, TICKET, MUTE, PASS };

void collect() { } void alarm() { } void nop() { } void eject() { }

enum State next(enum State s, enum Event e) { switch(s) {

case EXCEPTION:

switch(e) {

case RELEASE: nop(); return LOCKED;

case TICKET: eject(); return EXCEPTION;

case PASS: nop(); return EXCEPTION;

case MUTE: nop(); return EXCEPTION;

default: return UNDEFINED;

}

case LOCKED:

switch(e) {

case TICKET: collect(); return UNLOCKED;

case PASS: alarm(); return EXCEPTION;

default: return UNDEFINED;

}

case UNLOCKED:

switch(e) {

case TICKET: eject(); return UNLOCKED;

case PASS: nop(); return LOCKED;

default: return UNDEFINED;

}

default: return UNDEFINED;

enum State { EXCEPTION, LOCKED, UNDEFINED, UNLOCKED };

enum Event { RELEASE, TICKET, MUTE, PASS };

void collect() { } void alarm() { } void nop() { } void eject() { }

enum State next(enum State s, enum Event e) { switch(s) {

case EXCEPTION:

switch(e) {

case RELEASE: nop(); return LOCKED;

case TICKET: eject(); return EXCEPTION;

case PASS: nop(); return EXCEPTION;

case MUTE: nop(); return EXCEPTION;

default: return UNDEFINED;

}

case LOCKED:

switch(e) {

case TICKET: collect(); return UNLOCKED;

case PASS: alarm(); return EXCEPTION;

default: return UNDEFINED;

}

case UNLOCKED:

switch(e) {

case TICKET: eject(); return UNLOCKED;

case PASS: nop(); return LOCKED;

default: return UNDEFINED;

}

default: return UNDEFINED;

} }

Kompakte Variante in C

Online-Lokation mit vollständigem Java-Code:

https://svn.code.sf.net/p/developers/code/repository/oopm/eclipse/chrestomathy/uml/state/

(34)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Rezept der SwitchCase-Option

Ein Aufzählungstyp zur Modellierung der Zustände.

Ein zentrales Objekt mit Zustand und Ereignisbehandlung.

Eine Methode per Aktion.

Eine Methode per Ereignis.

Eine Switch-Case-Anweisung zur Überführung.

34

(35)

Die SwitchCase-Option in UML

Sowohl Ereignisse

als auch Aktionen

(36)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Diskussion der SwitchCase -Option

Pros

Einfachheit des Modells.

Wiederkennbarkeit von Ereignissen und Aktionen.

Cons

Fallunterscheidung basieren auf Low-Level-Code.

Monolithisch im Sinne des zentralen Objektes.

Zustände sind nur Werte (also keine Objekte).

Keine Laufzeitanpassung vorgesehen.

36

(37)

Optionen der Implementation von Zustandsdiagrammen

SwitchCase -- Überführung mittels switch-case-Anweisung

MethodDispatch -- Überführung mittels dynamischer Bindung

TableDriven -- Überführung mittels Datenstruktur

(38)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Die MethodDispatch-Option in UML

38

(39)

MethodDispatch:

Die Basisklasse für Zustände

public abstract class State {

public abstract void ticket(Turnstile me);

public abstract void pass(Turnstile me);

}

Zur zustandsspezifischen

Ereignisbehandlung

(40)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

MethodDispatch:

Wiederverwendbare Zustände

40

public abstract class State {

static protected Locked locked = new Locked();

static protected Unlocked unlocked = new Unlocked();

public abstract void ticket(Turnstile me);

public abstract void pass(Turnstile me);

}

Zur Wiederverwendung

von Zuständen

(41)

/**

* Behavior of turnstile in the locked state */

public class Locked extends State {

public String printState() { return "Locked"; } /** Event: (Insert a) ticket */

public void ticket(Turnstile me) { super.ticket(me);

me.collect();

me.state = unlocked;

}

/** Event: Pass (the turnstile) */

public void pass(Turnstile me) { super.pass(me);

me.alarm();

} }

Analog für den

Zustand Unlocked.

(42)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

MethodDispatch:

Der Kontext für die Überführungsfunktion

42

public class Turnstile {

State state = State.locked;

public void alarm() { ... } public void collect() { ... } public void eject() { ... } public void ticket() {

state.ticket(this);

}

public void pass() { state.pass(this);

} }

Zustandslokus des Automaten mit

Initialisierung Aktionen des

Automaten Delegation der

Ereignisbehandlung an

aktuellen Zustand

(43)

Rezept der MethodDispatch-Option

Eine Klassenhierarchie zur Modellierung der Zustände.

Eine abstrakte Klasse

mit einer abstrakten Methode pro Ereignis.

Eine konkrete Klasse pro Zustand

mit einer konkreten Methode pro Ereignis.

Ein Kontext-Objekt

zur Verwaltung des aktuellen Zustands.

(44)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Pros

Typüberprüfung impliziert Vollständigkeit.

Zustände sind Objekte (Attribute+Verhalten).

Cons

Keine Laufzeitanpassung vorgesehen.

Erweiterbarkeit durch neue Klassen praktisch nicht nutzbar.

44

Diskussion der MethodDispatch -Option

(45)

Optionen der Implementation von Zustandsdiagrammen

SwitchCase -- Überführung mittels switch-case-Anweisung

MethodDispatch -- Überführung mittels dynamischer Bindung

TableDriven -- Überführung mittels Datenstruktur

(46)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

TableDriven

Eine Datenstruktur (“Map”)

Schlüssel: Zustand und Ereignis Wert: Aktion und Zustand

Ein Wert (eines Aufzählungstyps) per Zustand.

Ein Wert (eines Aufzählungstyps) per Ereignis.

Ein Objekt (mit Methode) per Aktion.

46

(Zustand, Ereignis) → (Aktion, Zustand)

(47)

TableDriven:

Ereignisse und Zustände

public enum Event { Ticket,

Pass }

public enum State { Locked,

Unlocked

}

(48)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

TableDriven: Aktionen

48

public abstract class Action {

public abstract void execute();

}

public class Alarm extends Action {

public static final Alarm singleton = new Alarm();

public void execute() {

System.out.println("Alarm!");

} }

Zur

Wiederverwendung

(49)

TableDriven:

Die Überführungsfunktion als Tabelle

private HashMap<State, HashMap<Event, ActionState>> table = new HashMap<State, HashMap<Event,ActionState>>();

public class ActionState { public Action action;

public State state;

public ActionState(Action a, State s) { action = a;

state = s;

} }

(Zustand, Ereignis) → (Aktion, Zustand)

(50)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

TableDriven:

Füllen der Überführungsfunktion

50

HashMap<Event, ActionState> atLocked = new HashMap<Event, ActionState>();

atLocked.put(Event.Ticket, new ActionState(

Collect.singleton, State.Unlocked));

atLocked.put(Event.Pass, new ActionState(

Alarm.singleton, State.Locked));

table.put(State.Locked, atLocked);

(51)

Pros

Überführungsfunktion ist anpassbar zur Laufzeit.

Cons

Vollständigkeit ist nicht garantiert.

Zustände/Ereignisse sind nur Werte (keine Objekte).

Beschränkte Erweiterbarkeit.

Keine Attribute.

Kein Verhalten. All dies ist leicht zu adressieren.

Diskussion der TableDriven -Option

(52)

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Zusammenfassung

Verhaltensmodellierung

Anwendungsfalldiagramm Nutzersicht auf System

Sequenzdiagramm

Darstellung der Ausführung konkreter Szenarien Aktivitätsdiagramm

Sequentielle, parallele, kommunizierende Prozesse Zustandsdiagramm

Zustandsänderung von Objekten bei Ereignissen Ausblick

Generics

Referenzen

ÄHNLICHE DOKUMENTE

Dezember 1989 als gemeinnütziges Wohnungsunternehmen oder als Organ der staatlichen Wohnungspolitik anerkanntes Unternehmen aus dem Prüfungsverband, dem es angehört, aus, so hat

Vom Schliessungsentscheid für die Institute LLB Biel und Langenthal im Dezember 2001 wurden wiederum 70 Personen betroffen, die kurz zuvor, an diese Standorte versetzt

Schliesslich ist, drittens, zulässig, die Liegenschaften unter Aufschub der Steuer auf dem Kapitalgewinn zunächst einmal im Geschäftsvermögen zu belas- sen, auch wenn die Erben die

h) Dass der hiervor errechnete Mittelwert sachgerecht ist, ergibt sich überdies aus einem Vergleich mit der auf der Stockwerkeigentumswohnung lastendenden Hypothek gemäss Bilanz

Das Modul soll als Eigenentwicklung in der l&lt;oGls Plattform erstellt werden. Hierbei werden keine bestehenden Templates angepasst. so dass die Instanz weiterhin vollständig

Deshalb geht die bremen.online GmbH davon aus, dass für dieses Angebot die EVB- IT zu Grunde zu legen sind. Abweichend von anders lautenden Regelungen darin haften der

Deshalb geht die bremen.online GmbH davon aus, dass für dieses Angebot die EVB- IT zu Grunde zu legen sind. Abweichend von anders lautenden Regelungen darin haften der Auftraggeber

Deshalb geht die bremen.online GmbH davon aus, dass für dieses Angebot die EVB- IT zu Grunde zu legen sind. Abweichend von anders lautenden Regelungen darin haften der Auftraggeber