08.12.2012 Aufrufe

Objektorientierte Analyse und Design - beim Fachbereich Informatik ...

Objektorientierte Analyse und Design - beim Fachbereich Informatik ...

Objektorientierte Analyse und Design - beim Fachbereich Informatik ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Hochschule Darmstadt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong><br />

<strong>Objektorientierte</strong> <strong>Analyse</strong> <strong>und</strong> <strong>Design</strong><br />

5.2 Umsetzung von UML-Klassen in C++<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong>


5.2 Umsetzung von UML-Klassen in C++<br />

Das Gr<strong>und</strong>problem<br />

class CTaschenrechner<br />

{<br />

private:<br />

CSpeicher m_cSpeicher;<br />

private:<br />

CEinAusgabe m_cEinAusgabe;<br />

private:<br />

CProzessor m_cProzessor;<br />

public:<br />

CTaschenrechner(void);<br />

public:<br />

void benutze();<br />

OOD-Modell Abbildung Coderahmen in<br />

bestimmter<br />

Programmiersprache<br />

(hier C++)<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 213<br />

};


5.2 Umsetzung von UML-Klassen in C++<br />

Umsetzung von Klassen <strong>und</strong> Assoziationen<br />

n� Umsetzung von Attributen, Methoden<br />

ð� Diese Konstrukte werden von OO-Sprachen direkt angeboten <strong>und</strong> können 1:1<br />

umgesetzt werden<br />

n� Spezialisierung/Generalisierung<br />

ð� Vererbung<br />

n� Schnittstellen<br />

ð� Klassen mit ausschließlich pure virtual Methoden<br />

n� Umsetzung einfacher Assoziationen<br />

ð� Realisierung über Attribute mit Referenz(en) auf ein anderes Objekt<br />

- Multiplizität = 0..1, 1..1 ein Zeiger<br />

- Multiplizität = 0..*, 1..* Verweis auf eine Menge von Objekten über Zeiger<br />

(Container-Klasse, z. B. Menge, Liste, Bäume,<br />

statische <strong>und</strong> dynamische Arrays, Hash-Tabellen)<br />

- Name des Attributes = Rollenname/Name der assoziierten Klasse<br />

Automatische Umsetzung durch Code(rahmen)generator ist möglich!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 214


5.2 Umsetzung von UML-Klassen in C++<br />

Assoziationen als Klassenattribute<br />

n� Umsetzung Dozent <strong>und</strong> Veranstaltung aus unserem Beispiel<br />

generierbar<br />

1<br />

Gehaltene_Veranstaltung<br />

*<br />

Dozent Veranstaltung<br />

Dozent<br />

Liste <br />

gehaltene_Veranstaltung<br />

...<br />

Veranstaltung*<br />

getVeranstaltung()<br />

...<br />

Referent<br />

...<br />

...<strong>und</strong> wie sieht der C++ Code aus?<br />

Veranstaltung<br />

Dozent* Referent :<br />

Dozent* getReferent ()<br />

...<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 215<br />

...<br />

generierbar


5.2 Umsetzung von UML-Klassen in C++<br />

Assoziationen als Klassenattribute in C++<br />

// Spezifikation von Veranstaltung<br />

class Veranstaltung {<br />

}<br />

protected:<br />

public:<br />

...<br />

Dozent* Referent;<br />

// Spezifikation von Dozent<br />

class Dozent {<br />

protected:<br />

public:<br />

...<br />

}<br />

Liste gehaltene_Veranstaltung;<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 216


5.2 Umsetzung von UML-Klassen in C++<br />

Frage: Umsetzung folgender Assoziation?<br />

*<br />

Firma Person<br />

Arbeitgeber<br />

Firma<br />

Liste <br />

Arbeitnehmer<br />

...<br />

arbeitet _für<br />

Person*<br />

getArbeitnehmer(string name)<br />

...<br />

1..*<br />

Arbeitnehmer<br />

FirmaA<br />

FirmaB<br />

Liste <br />

Arbeitgeber<br />

...<br />

Person<br />

Firma*<br />

getArbeitgeber(string name)<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 217<br />

...<br />

Maier<br />

Müller


5.2 Umsetzung von UML-Klassen in C++<br />

Umsetzung von Assoziationsklassen<br />

* 1..*<br />

A B<br />

C<br />

n� a kennt 1..n Objekte der Klasse B <strong>und</strong><br />

daran „hängt“ je ein Objekt der Klasse C<br />

n� a wählt ein Objekt der Klasse B aus <strong>und</strong><br />

erhält dazu ein Objekt c<br />

A B<br />

n� a kennt 1..n Objekte der Klasse C <strong>und</strong><br />

daran hängt je ein Objekt der Klasse B<br />

n� a durchsucht die Objekte der Klasse C<br />

bis das gesuchte b gef<strong>und</strong>en ist<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 218<br />

1<br />

1..*<br />

C<br />

*<br />

1


5.2 Umsetzung von UML-Klassen in C++<br />

Beispiel: Assoziationsklassen<br />

2.<br />

*<br />

Firma Person<br />

Arbeitgeber<br />

arbeitet _für<br />

Anstellung<br />

Gehalt<br />

urlaub_von_bis<br />

Urlaub_beantragen<br />

Firma<br />

Liste <br />

Arbeitnehmer<br />

...<br />

Anstellung*<br />

getAnstellung(Person* p)<br />

...<br />

1..*<br />

Arbeitnehmer<br />

1.<br />

Anstellung<br />

Firma* Arbeitgeber<br />

Person* Arbeitnehmer<br />

...<br />

Firma*<br />

getArbeitgeber()<br />

Person*<br />

getArbeitnehmer()<br />

...<br />

Firma Person<br />

Anstellung<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 219<br />

1<br />

1..*<br />

Person<br />

Liste <br />

Arbeitgeber<br />

...<br />

Anstellung*<br />

getAnstellung(Firma* f)<br />

...<br />

*<br />

1


5.2 Umsetzung von UML-Klassen in C++<br />

Beispiel: Assoziationsklassen (I)<br />

class Anstellung {<br />

protected:<br />

Firma* m_Arbeitgeber; // Referenz auf assoziiertes Objekt<br />

Person* m_Arbeitnehmer; // Referenz auf assoziiertes Objekt<br />

unsigned int Gehalt; // Attribut der Assoziation<br />

string urlaub_von_bis; // Attribut der Assoziation ...<br />

public:<br />

virtual Person* getArbeitnehmer (void) const{ return (m_Arbeitnehmer); }<br />

virtual Anstellung* setArbeitnehmer (const Person* einArbeitnehmer){<br />

m_Arbeitnehmer = einArbeitnehmer;<br />

return (this);<br />

}<br />

virtual Firma* getArbeitgeber (void) const{ return (m_Arbeitgeber);}<br />

virtual Anstellung* setArbeitgeber (const Firma* einArbeitgeber){<br />

m_Arbeitgeber = einArbeitgeber;<br />

return (this);<br />

}<br />

virtual void Urlaub_beantragen (string anfang_ende){<br />

urlaub_von_bis = anfang_ende;<br />

};<br />

...<br />

} // class Anstellung<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 220


5.2 Umsetzung von UML-Klassen in C++<br />

Beispiel: Assoziationsklassen (II)<br />

class Person {<br />

protected:<br />

Liste m_Arbeitgeber;<br />

public:<br />

Anstellung* getAnstellung (const Firma* dieFirma) const {<br />

// Navigieren auf dem Container gemäß gegebener Datenstruktur (Liste).<br />

// Liefert die Referenz auf das Objekt der Assoziationsklasse, das die<br />

// Referenz auf die übergebene Firma hält. So ist das Setzen <strong>und</strong> Lesen von<br />

// Attributen bzw. das Ausführen von Methoden der Assoziation möglich.<br />

}<br />

virtual unsigned getAnstellungsGehalt (const Firma* derArbeitgeber) const {<br />

// Zugriff auf ein Assoziationsklassen-Attribut:<br />

return (getAnstellung (derArbeitgeber)-> getGehalt());<br />

}<br />

void do_Anstellung_Urlaub_beantragen (const Firma* derArbeitgeber, string<br />

anfang_ende) {<br />

// Ausführen einer Assoziationsklassen-Methode:<br />

getAnstellung(derArbeitgeber)->Urlaub_beantragen(string anfang_ende);<br />

}<br />

...<br />

} // class Person<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 221


5.2 Umsetzung von UML-Klassen in C++<br />

Umsetzung von ternären <strong>und</strong> höherwertigen Assoziationen<br />

Verein Spieler<br />

*<br />

Statistik<br />

Siege<br />

Niederlagen<br />

Unentschieden<br />

Gegentore<br />

*<br />

Saison<br />

Torwart<br />

*<br />

Verein<br />

Liste<br />

<br />

dieStatistik<br />

Spieler<br />

Liste<br />

<br />

dieStatistik<br />

Saison<br />

Liste<br />

<br />

dieStatistik<br />

Statistik<br />

Verein* v<br />

Spieler* p<br />

Saison* s<br />

int Siege<br />

int Niederlagen<br />

int Unentschieden<br />

int Gegentore<br />

ð� Falls keine Assoziationsklasse existiert, lege eine (leere) Assoziationsklasse an<br />

ð� Ergänze die Attribute der Assoziationsklasse um die Referenzen auf alle 3 bzw. n<br />

assoziierten Objekte<br />

ð� In den assoziierten Objekten ergänze die Liste der Referenzen auf die Objekte<br />

der Assoziationsklasse<br />

- Sowohl die Assoziationsklasse als auch die assoziierten Klassen bieten Operationen,<br />

über die zu n assoziierten Objekten navigiert werden kann.<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 222<br />

1<br />

1<br />

1<br />

*<br />

*<br />

*


5.2 Umsetzung von UML-Klassen in C++<br />

Umsetzung von Aggregation <strong>und</strong> Komposition<br />

Computersystem<br />

n� Normale Aggregation (Shared Aggregation)<br />

ð� Attribut vom Typ Zeiger auf das aggregierte Objekt<br />

(d. h. genau wie eine Assoziation)<br />

n� Komposition (Unshared Aggregation)<br />

1 0..1<br />

1 1..* 1..*<br />

Motherboard Festplatte<br />

Netzwerkkarte<br />

ð� Attribut vom Typ der Klasse selbst<br />

(Die Klasse ist im aggregierenden Objekt integriert)<br />

Monitor<br />

Stirbt das Ganze,<br />

leben die Teile weiter!<br />

Stirbt das Ganze,<br />

sterben auch die Teile!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 223


5.2 Umsetzung von UML-Klassen in C++<br />

Komposition<br />

n� Umsetzung der Komposition zwischen Computersystem <strong>und</strong> Motherboard aus<br />

unserem Beispiel<br />

1<br />

Computersystem Motherboard<br />

Computersystem<br />

Motherboard m_Motherboard<br />

...<br />

Motherboard getMotherboard()<br />

...<br />

...<strong>und</strong> wie sieht der C++Code aus?<br />

Motherboard<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 224<br />

...<br />

...


5.2 Umsetzung von UML-Klassen in C++<br />

Beispiel: Komposition als Klassenattribute in C++<br />

// Spezifikation von Computersystem<br />

class Computersystem {<br />

}<br />

protected:<br />

public:<br />

...<br />

Motherboard m_Motherboard;<br />

Motherboard getMotherboard();<br />

// Spezifikation von Motherboard<br />

class Motherboard {<br />

}<br />

protected:<br />

...<br />

public:<br />

...<br />

kein Pointer, sondern echte<br />

Instanz der Klasse!<br />

Frage: Was ändert sich<br />

(im Diagramm <strong>und</strong> im Code),<br />

wenn es mehrere Motherboards<br />

geben darf?<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 225


5.2 Umsetzung von UML-Klassen in C++<br />

Kontrollfragen<br />

n� Wissen Sie jetzt, wie die UML Konstrukte auf C++ abgebildet werden?<br />

ð� Klassen mit Attributen <strong>und</strong> Methoden<br />

ð� Generalisierung/Spezialisierung<br />

ð� Abstrakte Klasse/Schnittstelle<br />

ð� Assoziationen: (normale) Assoziationen: einfache, mehrfache<br />

ð� Aggregation<br />

ð� Komposition<br />

ð� Navigationsrichtung<br />

ð� Assoziationsklassen<br />

Sie können jetzt ein UML-Klassendiagramm<br />

in C++-Code überführen!?<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 226


Hochschule Darmstadt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong><br />

<strong>Objektorientierte</strong> <strong>Analyse</strong> <strong>und</strong> <strong>Design</strong><br />

5.3 Darstellung der Dynamik eines Systems<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong>


5.3 Darstellung der Dynamik eines Systems<br />

Grenzen von Klassendiagrammen<br />

n� Klassendiagramme liefern einen Überblick über die Bestand-<br />

teile des Systems <strong>und</strong> deren Beziehungen untereinander<br />

ð� Klassen mit Attributen, Methoden <strong>und</strong> Spezifikation beschreiben die<br />

(potenziellen) Fähigkeiten <strong>und</strong> die Verantwortlichkeiten der Bestandteile<br />

ð� Assoziationen stellen logische Beziehungen zwischen Klassen dar <strong>und</strong> zeigen<br />

(potenzielle) Kommunikations- <strong>und</strong> Verknüpfungsmöglichkeiten zwischen<br />

Objekten der Klassen<br />

ð� Beschreibung der Statik des Systems: „Strukturdiagramme“<br />

n� sie liefern keine Information darüber in welcher Art <strong>und</strong> Reihenfolge Objekte <strong>und</strong><br />

Methoden interagieren müssen, um eine geforderte Funktionalität zu liefern!<br />

ð� Ergänze die Beschreibung des Systems um<br />

„Verhaltensdiagramme“<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 228


5.3 Darstellung der Dynamik eines Systems<br />

Lernziele<br />

n� Sie sollen in diesem Kapitel verstehen,<br />

ð� Was man mit Sequenzdiagrammen ausdrücken kann<br />

ð� Wie man mit Sequenzdiagrammen Programmabläufe ausdrückt<br />

ð� Worauf man bei Sequenzdiagrammen achten muss<br />

ð� Welche Modellierungselemente die UML dafür bietet<br />

ð� Was man mit Kommunikationsdiagrammen ausdrücken kann<br />

ð� Wie Zustandsdiagramme funktionieren<br />

ð� Wozu Zustandsdiagramme eingesetzt werden<br />

Hinterher können Sie die Dynamik eines Systems in<br />

Diagrammen darstellen!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 229


5.3 Darstellung der Dynamik eines Systems<br />

Gr<strong>und</strong>idee<br />

n� Wie stellt man die Dynamik eines Systems dar?<br />

ð� „spiele“ mit Instanzen der (bereits gef<strong>und</strong>enen) Klassen<br />

die Methodenaufrufe durch, die erforderlich sind,<br />

um eine geforderte Funktionalität zu liefern<br />

n� Beschreibe<br />

ð� die Reihenfolge der Interaktionen <strong>beim</strong> Ablauf eines Anwendungsfalls<br />

ð� die (prinzipiellen) Aufrufe im Code<br />

ð� die Interaktion von Objekten<br />

ð� Zustände <strong>und</strong> Übergänge von Objekten<br />

ð� die Erzeugung <strong>und</strong> Zerstörung von Objekten<br />

Aus lauffähigem Code kann die Sequenz der Methodenaufrufe leicht extrahiert<br />

werden, indem man mit dem Debugger die Methodenaufrufe verfolgt!<br />

Wir machen es jetzt andersrum – <strong>und</strong> entwerfen so die Sequenz der Aufrufe!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 230


Hochschule Darmstadt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong><br />

<strong>Objektorientierte</strong> <strong>Analyse</strong> <strong>und</strong> <strong>Design</strong><br />

5.3.1 Darstellung der Dynamik eines Systems:<br />

Sequenzdiagramme<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong>


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Notation am Beispiel<br />

n� Betrachten Sie ein Kino-<br />

Reservierungssystem:<br />

ð� Es gibt Aktoren, Objekte <strong>und</strong><br />

verschiedene Aufrufe<br />

ð� Objekte werden in Bahnen<br />

nebeneinander dargestellt<br />

ð� Die Aktivität eines Objekts wird durch<br />

einen (optionalen) Balken symbolisiert<br />

ð� Nur ein aktiviertes Objekt kann Aufrufe<br />

machen!<br />

Aktor<br />

Objekt<br />

Steuerungsfokus<br />

(Aktivierungsbalken)<br />

Nachricht<br />

Aufruf<br />

Return<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 232


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Notationen für synchrone Aufrufe <strong>und</strong> asynchrone Nachrichten<br />

n� Synchron:<br />

ð� Der Sender wartet, bis der Empfänger die Nachricht empfangen <strong>und</strong> vollständig<br />

abgearbeitet hat. Erst dann arbeitet er weiter.<br />

n� Asynchron:<br />

ð� Sender setzt Nachricht ab <strong>und</strong> arbeitet sofort weiter, ohne auf den Empfänger zu<br />

warten. Der Empfänger arbeitet parallel zum Sender die Nachricht ab.<br />

synchroner Aufruf<br />

Rückgabewert<br />

asynchrone Nachricht<br />

Aufruf einer Operation<br />

Ablauf der Methode<br />

Return der Methode<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 233


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Durchgängiges Beispiel<br />

n� Aufgabe<br />

ð� Wir formulieren nun ein Sequenzdiagramm zu einem konkreten Anwendungsfall:<br />

n� Anwendungsfall „Student immatrikulieren“<br />

ð� Ein Sachbearbeiter der Hochschule erfasst am Bildschirm neue Studenten.<br />

Wurde ein Student bisher noch nicht erfasst, so wird ein neuer Eintrag angelegt<br />

<strong>und</strong> der Sachbearbeiter erhält eine Rückmeldung über den Erfolg der Erfassung.<br />

ð� Die Kommunikation des Systems „Hochschulverwaltung“ mit der Außenwelt<br />

(Sachbearbeiter) soll über Bildschirmmasken erfolgen.<br />

n� Es wurden folgende Klassen identifiziert<br />

ð� Maske, Studentenverwalter, Student, Popup<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 234


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Durchgängiges Beispiel – Lösung<br />

n� Szenario zu Use Case „Student immatrikulieren“:<br />

Objekt<br />

erzeugen<br />

:Klasse<br />

nur die Klasse ist festgelegt –<br />

es ist klar welches Objekt<br />

gemeint ist<br />

Objekt:Klasse<br />

ein bestimmtes<br />

Objekt einer Klasse<br />

Objekt<br />

zerstören<br />

Return ist<br />

optional<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 235


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Durchgängiges Beispiel – Erläuterung<br />

n� Über eine Erfassungsmaske zur Immatrikulation werden Studentendaten erfasst.<br />

Ein Objekt Student wird kreiert, wenn es noch nicht vorhanden ist.<br />

n� Um dies herauszufinden, wird die Klasse StudentenVerwalter befragt, die alle<br />

Studenten kennt <strong>und</strong> verwaltet.<br />

n� Ist die Immatrikulation (das Kreieren des Studenten) erfolgreich, so teilt dies der<br />

neu angelegte Eintrag dem Sachbearbeiter selbst mit, indem er ein Popup mit<br />

der entsprechenden Nachricht öffnet, die bestätigt werden muss.<br />

In UML 1.x wurden zur Verwaltung<br />

der Gesamtheit aller<br />

Klasseninstanzen so genannte<br />

„Multi Object Icons“ eingesetzt.<br />

Diese gibt es in UML 2.x nicht mehr!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 236


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Anmerkungen<br />

n� UML-CASE-Tools<br />

ð� bieten Ihnen <strong>beim</strong> Erstellen eines Sequenzdiagramms<br />

die in den Klassen vorhandenen Operationen zur Auswahl an.<br />

Neue Operationen können aus neu definierten<br />

Aufrufen erzeugt werden bzw.<br />

ð� erlauben oft nur Operationen, die bereits in Klassen definiert sind<br />

n� ein Sequenzdiagramm konkretisiert häufig einen<br />

Anwendungsfall<br />

n� ein Sequenzdiagramm kann aber auch Sachverhalte illustrieren, die den<br />

Anwender nicht interessieren (z. B. zur Veranschaulichung der Initialisierung)<br />

n� Konventionen<br />

ð� Sequenzdiagramme haben die Leserichtung links→rechts, oben→unten<br />

ð� Überkreuzungen von Aufrufen (in der Darstellung) sind möglichst zu vermeiden<br />

ð� Aktoren (d. h. Personen oder andere Systeme, die nicht im modellierten System<br />

enthalten sind) stehen üblicherweise links außen<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 237


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Zweites Beispiel<br />

n� Anwendungsfall „Student exmatrikulieren“<br />

ð� Ein Sachbearbeiter der Hochschule erfasst an einer Bildschirmmaske Studenten,<br />

die exmatrikuliert werden. Die Löschung der Studentenakte darf nur erfolgen,<br />

wenn darin keine entliehenen Gegenstände mehr eingetragen sind. Der<br />

Sachbearbeiter erhält eine Rückmeldung über den Erfolg der Exmatrikulation.<br />

n� Es wurden bereits folgende Klassen identifiziert:<br />

- Maske<br />

- Studentenverwalter<br />

- Student<br />

- Popup<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 238


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Zweites Beispiel – Lösung<br />

n� Szenario zu Use Case „Student exmatrikulieren“:<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 239


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Tipps zur Erstellung von Sequenzdiagrammen<br />

n� Überlegen Sie zuerst, was (nicht) dargestellt werden soll<br />

ð� welche Aufruftiefe soll dargestellt werden?<br />

ð� welche konkreten Abläufe („Szenarien“) sollen dargestellt werden?<br />

(nur wenige Pfade bei Verzweigungen; nicht alle Alternativen gleichzeitig)<br />

n� Achten Sie auf eine geordnete Aufrufreihenfolge<br />

ð� die Aktivierung eines Objekts startet mit einem synchronen Aufruf <strong>und</strong> endet mit<br />

einem „Return“ (auf eine klammerartige Schachtelung achten!)<br />

ð� Methodenaufrufe können nur von „aktiven“ Objekten erfolgen. Wird eine<br />

Methode aufgerufen, geht die Aktivität an dieses Objekt über <strong>und</strong> kommt erst<br />

mit dessen „Return“ zurück<br />

ð� die Kommunikation mit Aktoren <strong>und</strong> anderen eigenständigen Systemen erfolgt<br />

asynchron<br />

ð� stellen Sie – zur Verbesserung der Lesbarkeit – auch optionale Konstrukte dar<br />

(Returns von Konstruktoren/Destruktoren bzw. Aktivierungsbalken)<br />

- Dann kann man die synchronen Aufrufe <strong>und</strong> Returns eines korrekten Diagramms von<br />

oben links nach unten links „durchfahren“.<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 240


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Schwierigeres Beispiel<br />

n� Anwendungsfall „Essen zahlen“ (in der Mensa)<br />

ð� Ein Mensak<strong>und</strong>e kommt mit seinem Essen zur Kasse. Die Kassenfrau gibt die<br />

Artikelnummern ein <strong>und</strong> die Kasse zeigt den Betrag an. Der K<strong>und</strong>e schiebt seine<br />

Mensakarte in das Lesegerät <strong>und</strong> der Betrag wird abgebucht. Reicht das<br />

Guthaben nicht aus, wird eine Fehlermeldung angezeigt. Der K<strong>und</strong>e entnimmt in<br />

beiden Fällen seine Karte.<br />

n� Es wurden bereits folgende Klassen identifiziert:<br />

- Kasse<br />

- Display<br />

- LeseSchreibEinheit<br />

- MensaKarte<br />

ð� Welche Aktoren gibt es?<br />

ð� Wie laufen die Aufrufe?<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 241


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Schwierigeres Beispiel – Diskussion einer Lösung<br />

Verzweigung<br />

(UML 1.4)<br />

triviale<br />

Returns<br />

fehlen<br />

(optional)<br />

n� Anmerkungen:<br />

ð� In dieser Lösung<br />

kontrolliert die Schreib-<br />

Lese-Einheit den<br />

Gesamtvorgang.<br />

Die Kasse wäre<br />

realistischer.<br />

ð� Der Input ist sichtbar,<br />

der Output nicht.<br />

ð� Gehört die Karte zu<br />

unserem System?<br />

Hat sie wirklich eine<br />

Methode „lies“?<br />

ð� Was würde passieren,<br />

wenn die Bezahlung<br />

durch einen Daumen‐<br />

abdruck <strong>und</strong> direkte<br />

Abbuchung von einem<br />

Bank-Konto ersetzt<br />

würde?<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 242


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Häufige Fehler<br />

1. Fehler: Methodenaufruf <strong>beim</strong> Aktor<br />

ð� Ein Aktor ist in der Regel menschlich. Er hat deshalb<br />

keine Methoden, die man aufrufen könnte.<br />

2. Fehler: Kontrollverlust durch synchronen Aufruf<br />

ð� Ein Aktor führt ein eigenständiges Leben. Er hat<br />

seine eigene „CPU“. Wegen des synchronen Aufrufs<br />

darf das aufrufende System aber erst weitermachen,<br />

wenn der Aktor ein Return zurückschickt – <strong>und</strong> das<br />

tut er vielleicht nie. Ein „Timeout-Verhalten“ kann so<br />

nicht mehr implementiert werden.<br />

ð� Richtig wäre, eine asynchrone Nachricht (als<br />

Ausgabe) an den Aktor zu schicken, <strong>und</strong> zu hoffen,<br />

dass er wie gewünscht reagiert. Falls nicht, kann<br />

nach einem Timeout entsprechend reagiert werden.<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 243


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Häufige Ungeschicklichkeiten<br />

n� Verletzung der Kapselung<br />

ð� Der Kartenleser sagt der Kasse was sie tun soll<br />

(CheckePin). Der Kartenleser kann (bzw. soll) aber<br />

gar nicht wissen, ob eine Pin geprüft werden muss.<br />

Ob die Prüfung über eine PIN erfolgt (oder über einen<br />

Daumenabdruck) gehört zur Verantwortung der Kasse.<br />

ð� Besser wäre, nur das zu sagen, was in der eigenen<br />

Verantwortung liegt. Dann kann die Kasse so<br />

reagieren wie sie es für richtig hält.<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 244


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Schwierigeres Beispiel – 2. Versuch<br />

n� Anwendungsfall „Essen zahlen“ (in der Mensa)<br />

ð� Ein Mensak<strong>und</strong>e kommt mit seinem Essen zur Kasse. Die Kassenfrau gibt die<br />

Artikelnummern ein <strong>und</strong> die Kasse zeigt den Betrag an. Der K<strong>und</strong>e schiebt seine<br />

Mensakarte in das Lesegerät <strong>und</strong> der Betrag wird abgebucht. Reicht das<br />

Guthaben nicht aus, wird eine Fehlermeldung angezeigt. Der K<strong>und</strong>e entnimmt in<br />

beiden Fällen seine Karte.<br />

n� Es wurden bereits folgende Klassen identifiziert:<br />

- Kasse<br />

- Display<br />

- SchreibLeseEinheit<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 245


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Schwierigeres Beispiel – Alternative Lösung<br />

n� Anmerkungen:<br />

ð� In dieser Lösung kontrolliert<br />

die Kasse den Gesamtvor‐<br />

gang. Die RW_Unit küm‐<br />

mert sich bloß um die Karte.<br />

ð� Der Output erfolgt über die<br />

Klasse Display.<br />

ð� Die Karte wird nicht mehr<br />

modelliert, sondern<br />

übergeben.<br />

ð� Was würde jetzt passieren,<br />

wenn die Bezahlung durch<br />

einen Daumenabdruck <strong>und</strong><br />

direkte Abbuchung von<br />

einem Bank-Konto ersetzt<br />

würde?<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 246


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Übung: Mikrowellenherd<br />

n� Modellieren Sie einen Mikrowellenherd.<br />

Die Funktionsweise wird stichwortartig zusammengefasst:<br />

ð� die Bedienelemente für den Benutzer sind der Einschaltknopf <strong>und</strong> die Tür<br />

ð� durch Drücken des Knopfes wird die Mikrowelle (die „Backröhre“) eingeschaltet<br />

ð� die Kochzeit wird über eine interne Zeituhr auf eine Minute festgelegt<br />

ð� durch weiteres n-maliges Drücken des Knopfes wird die Kochzeit um n Minuten<br />

verlängert<br />

ð� wenn die Zeit abgelaufen ist, wird die Backröhre ausgeschaltet, ein Piepton<br />

ertönt <strong>und</strong> als nächstes muss die Tür geöffnet werden bevor die Mikrowelle<br />

erneut gestartet werden kann<br />

ð� durch Öffnen der Tür wird die Backröhre abgeschaltet <strong>und</strong> die verbleibende<br />

Kochzeit gelöscht<br />

ð� der Mikrowellenherd startet nur bei geschlossener Tür<br />

ð� wenn die Tür offen ist oder wenn der Herd an ist, leuchtet das Licht<br />

ð� wenn der Mikrowellenherd ein- bzw. ausschaltet, muss die Backröhre ebenfalls<br />

ein- bzw. ausgeschaltet werden<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 247


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Übung: Mikrowellenherd<br />

n� Erstellen Sie<br />

ð� ein Klassendiagramm<br />

- mit Klassen, Attribute, Methoden, Beziehungen<br />

ð� Sequenzdiagramme für die Szenarien<br />

- 2 Minuten kochen<br />

- Tür öffnen <strong>und</strong> schließen<br />

- Kochvorgang mit Abbruch durch Tür öffnen<br />

n� Versuchen Sie die Diagramme selbst zu entwerfen, bevor Sie sich die folgenden<br />

Lösungen anschauen!<br />

ð� Entwickeln Sie zuerst ein Klassendiagramm <strong>und</strong> vergleichen Sie Ihr Ergebnis mit<br />

der Lösung.<br />

ð� Entwickeln Sie die Sequenzdiagramme mit den Klassen <strong>und</strong> Methoden aus dem<br />

Lösungs-Klassendiagramm.<br />

ð� Beachten Sie dabei, dass es nicht nur eine einzige richtige Lösung gibt.<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 248


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Lösung Mikrowellenherd: Klassendiagramm<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 249


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Lösung Mikrowellenherd: Sequenzdiagramm „2 Minuten kochen“<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 250


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Lösung Mikrowellenherd: Sequenzdiagramm „Tür öffnen <strong>und</strong> schließen“<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 251


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Lösung Mikrowellenherd: Sequenzdiagramm „Kochen mit Abbruch“<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 252


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Notation in UML 2.x (I)<br />

The image cannot be displayed. Your computer<br />

may not have enough memory to open the<br />

image, or the image may have been corrupted.<br />

Restart your computer, and then open the file<br />

again. If the red x still appears, you may have to<br />

delete the image and then insert it again.<br />

The image cannot be<br />

displayed. Your computer<br />

may not have enough<br />

memory to open the image,<br />

or the image may have been<br />

corrupted. Restart your<br />

computer, and then open the<br />

file again. If the red x still<br />

appears, you may have to<br />

delete the image and then<br />

insert it again.<br />

Klasse, Objekt<br />

In dem Rechteck oberhalb der gestrichelten Linie wird der Objektname<br />

<strong>und</strong> der Klassenname angegeben. Der Name wird unterstrichen.<br />

Die senkrechte, gestrichelte Linie stellt die Lebenslinie<br />

(lifeline) eines Objekts dar. Im diesem zeitlichen Bereich existiert<br />

das Objekt. Das schmale Rechteck auf der gestrichelten Linie<br />

stellt eine Aktivierung dar. Eine Aktivierung ist der Bereich, in<br />

dem eine Methode des Objektes aktiv ist (ausgeführt wird). Auf<br />

einer Lebenslinie können mehrere Aktivierungen enthalten sein.<br />

Nachricht, Botschaft<br />

Objekte kommunizieren über Nachrichten. Nachrichten werden<br />

als Pfeile zwischen den Aktivierungen eingezeichnet. Der Name<br />

der Nachricht steht an dem Pfeil. Eine Nachricht liegt immer<br />

zwischen einem sendenden <strong>und</strong> einem empfangenden Objekt.<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 253


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Notation in UML 2.x (II)<br />

The image cannot be displayed.<br />

Your computer may not have<br />

enough memory to open the image,<br />

or the image may have been<br />

corrupted. Restart your computer,<br />

and then open the file again. If the<br />

red x still appears, you may have to<br />

delete the image and then insert it<br />

again.<br />

The image cannot be displayed. Your computer<br />

may not have enough memory to open the<br />

image, or the image may have been corrupted.<br />

Restart your computer, and then open the file<br />

again. If the red x still appears, you may have to<br />

delete the image and then insert it again.<br />

Synchrone Nachricht (Aufruf)<br />

Der Pfeil mit der ausgefüllten Spitze bezeichnet einen synchronen<br />

Aufruf. Der Aufruf erfolgt von der Quelle zum Ziel, d. h. die Zielklasse<br />

muss eine entsprechende Methode implementieren. Die Quelle wartet<br />

mit der weiteren Verarbeitung bis die Zielklasse ihre Verarbeitung beendet<br />

hat <strong>und</strong> setzt die Verarbeitung dann fort. Ein Aufruf muss einen<br />

Namen haben; in r<strong>und</strong>en Klammern können Aufrufparameter angegeben<br />

werden. Der gestrichelte Pfeil ist der Return. Die Bezeichnung des Return<br />

mit einem Namen ist optional.<br />

Asynchrone Nachricht<br />

Mit einer offenen Pfeilspitze werden asynchrone Nachrichten gekennzeichnet.<br />

Der Aufruf erfolgt von der Quelle zum Ziel. Die Quelle wartet<br />

mit der Verarbeitung nicht auf die Zielklasse, sondern setzt ihre Arbeit<br />

nach dem Senden der Nachricht fort. Asynchrone Aufrufe werden verwendet,<br />

um parallele Threads zu modellieren.<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 254


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Notation in UML 2.x (III)<br />

The image cannot be<br />

displayed. Your computer may<br />

not have enough memory to<br />

open the image, or the image<br />

may have been corrupted.<br />

Restart your computer, and<br />

then open the file again. If the<br />

red x still appears, you may<br />

have to delete the image and<br />

then insert it again.<br />

Objekt erzeugen, zerstören<br />

Das Erzeugen eines Objektes wird durch eine Nachricht, die im<br />

Kopf des Objekts endet, dargestellt.<br />

Das Zerstören (Löschen) eines Objektes wird durch ein x auf der<br />

Lebenslinie markiert.<br />

Aufruf einer Operation im gleichen Objekt (Rekursion)<br />

Sendet ein Objekt eine Nachricht an sich selbst, so nennt man<br />

dies Rekursion. Das Objekt ruft eine Operation auf, die es selbst<br />

anbietet.<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 255


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Erweiterte Notation in UML 2.x (I)<br />

Links oben stehen der<br />

Diagrammtyp (sd) <strong>und</strong> der<br />

Diagrammname (NameSQ).<br />

Der mit ref bezeichnete Block<br />

stellt einen Verweis auf ein<br />

Diagramm mit dem Namen „SQ-<br />

Diagramm 2“ dar, das eine<br />

Verfeinerung des Blockes<br />

enthält. Der mit alt markierte<br />

Block beschreibt eine<br />

Alternative (Verzweigung). Ist<br />

die Bedingung [b=wahr] erfüllt,<br />

wird der Bereich oberhalb der<br />

gestrichelten Linie ausgeführt,<br />

sonst der Bereich unterhalb der<br />

gestrichelten Linie.<br />

kombinierte Fragmente (combined fragment)<br />

Mit kombinierten Fragmenten können in Sequenzdiagrammen die Kontrollstrukturen höherer<br />

Programmiersprachen ausgedrückt werden. Ab der UML 2.0 können damit Sequenzdiagramme<br />

verschachtelt werden. Ein kombiniertes Fragment wird als rechteckiger Block dargestellt. In der<br />

linken, oberen Ecke trägt es eine Bezeichnung, die den Typ der Kontrollstruktur angibt (interaction<br />

operator). Die wichtigsten Interaktionsoperatoren in der UML 2.x sind ref (Verweis), alt<br />

(Alternative) <strong>und</strong> loop (Schleife).<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 256


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Erweiterte Notation in UML 2.x (II)<br />

ref<br />

Sequenzdiagramme können ande‐<br />

re Sequenzdiagramme beinhalten<br />

(als eine Art Unter-Programm).<br />

Dabei können <strong>beim</strong> „Aufruf“ <strong>und</strong> in<br />

der „Definition“ des Unterpro‐<br />

gramms Parameter übergeben<br />

bzw. spezifiziert werden.<br />

loop<br />

Eine Schleife in einem Sequenz‐<br />

diagramm bewirkt, dass die enthal‐<br />

tene Sequenz von Botschaften<br />

solange ausgeführt wird, bis die<br />

Abbruchbedingung erfüllt ist.<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 257


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Erweiterte Notation in UML 1.4<br />

n� In UML 1.4 gibt es diese erweiterte Notation nicht.<br />

n� Schleifen, Verzweigungen <strong>und</strong> das Beinhalten von anderen<br />

Sequenzdiagrammen können mit Hilfe von Zeitabschnitten <strong>und</strong> manuell<br />

eingeführten Kommentaren dargestellt werden:<br />

statt in 2.x: in 1.x:<br />

xxx[…]<br />

XXX[...]<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 258


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Anwendung<br />

n� Sequenzdiagramme sind z. B. in folgenden Situationen nützlich:<br />

ð� vor Implementierungsbeginn<br />

- zur Verifikation des <strong>Design</strong>s: besonders interessante (oder schwierige)<br />

Systemzustände anschaulich darstellen <strong>und</strong> „testen“ (z. B. Anwendungsfälle)<br />

- um zu verifizieren ob die Klassenaufteilung (<strong>Design</strong>) gut gewählt ist <strong>und</strong> alle<br />

benötigten Assoziationen vorhanden sind<br />

ð� im Team<br />

- verbesserte Kommunikation der wesentlichen Abläufe<br />

ð� <strong>beim</strong> Test<br />

- kritische Abläufe im System können für Tests spezifiziert (<strong>und</strong> evtl. generiert) werden<br />

Das Sequenzdiagramm ist eines der wichtigsten<br />

Interaktionsdiagramme in der UML!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 259


5.3.1 Darstellung der Dynamik eines Systems: Sequenzdiagramme<br />

Tipps<br />

n� Sequenzdiagramme sind sehr leicht zu lesen…<br />

… aber gar nicht so leicht zu erstellen!<br />

ð� Welche Objekte sind (nicht) erforderlich?<br />

- Auf das Beschränken was wichtig ist bzw. dargestellt werden soll<br />

- aber auch nicht zu wenige Objekte<br />

ð� Wer ruft wen auf?<br />

- Überlegen, wer den Trigger erhält, der die Aktion startet<br />

ð� Welche bzw. wie viele Alternativen sollen dargestellt werden?<br />

- Nur die wichtigsten für das Szenario. Lieber mehrere Diagramme!<br />

- Oder kombinierte Fragmente verwenden – aber bitte nicht programmieren!<br />

- Nicht versuchen, alles auf einmal darzustellen!<br />

Sequenzdiagramme zeigen immer nur je ein Szenario!<br />

ð� Wie wird die Interaktion mit der Außenwelt (Aktoren) modelliert?<br />

- Tipp: Asynchrone Aufrufe <strong>und</strong> I/O-Objekte verwenden<br />

immer iterativ vorgehen!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 260


Hochschule Darmstadt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong><br />

<strong>Objektorientierte</strong> <strong>Analyse</strong> <strong>und</strong> <strong>Design</strong><br />

5.3.2 Darstellung der Dynamik eines Systems:<br />

Kommunikationsdiagramme<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong>


5.3.2 Darstellung der Dynamik eines Systems: Kommunikationsdiagramme<br />

Inhalt<br />

n� Ein Kommunikationsdiagramm beschreibt<br />

ð� die Interaktion zwischen Objekten im Überblick<br />

ð� die zeitliche Reihenfolge, in der die Nachrichten gesendet werden<br />

ð� die Beziehungen zwischen den Objekten <strong>und</strong> die Nachrichten,<br />

die übertragen werden<br />

in UML 1.x:<br />

„Kollaborationsdiagramme“<br />

ð� Dabei steht der Überblick der Kommunikationsstruktur im Vordergr<strong>und</strong><br />

n� Das kommt Ihnen bekannt vor?<br />

ð� Kommunikationsdiagramme werden für die selben Zwecke eingesetzt wie<br />

Sequenzdiagramme!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 262


5.3.2 Darstellung der Dynamik eines Systems: Kommunikationsdiagramme<br />

entspricht der ersten Lösung<br />

Notation am Beispiel: „Essen zahlen“<br />

Der „Mensa-Aufgabe“<br />

als Sequenzdiagramm!<br />

mehrstellige<br />

Nummerierung<br />

gliedert <strong>und</strong> erlaubt<br />

leichtere Änderung<br />

Alternativen<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 263


5.3.2 Darstellung der Dynamik eines Systems: Kommunikationsdiagramme<br />

Kommunikationsdiagramm vs. Sequenzdiagramm<br />

Kommunikationsdiagramm Sequenzdiagramm<br />

Objekte in der Fläche verteilt Objekte in einer Linie<br />

Sequenz der Nachrichten durch<br />

Nummerierung<br />

Stärke: viele Objekte, die wenige<br />

Nachrichten austauschen<br />

Parallelität <strong>und</strong> Alternativen durch<br />

Nummerierung mit Buchstaben<br />

Sequenz der Nachrichten graphisch<br />

auf Zeitachse<br />

Stärke: wenige Objekte, die viele<br />

Nachrichten austauschen<br />

Parallelität durch Asynchronität<br />

(wird mit offenen Pfeilen angedeutet)<br />

Keine Verschachtelung verschachtelte Diagramme möglich<br />

Kommunikationsdiagramme bieten<br />

nur eine Untermenge der Sequenzdiagramme!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 264


5.3.2 Darstellung der Dynamik eines Systems: Kommunikationsdiagramme<br />

Anwendung<br />

n� Kommunikationsdiagramme sind z. B. in folgenden Situationen nützlich:<br />

ð� wenn das Zusammenspiel zwischen vielen interagierenden Teilen möglichst<br />

einfach dargestellt werden soll<br />

ð� wenn es um das gr<strong>und</strong>sätzliche Verständnis des Ablaufs <strong>und</strong> der<br />

Verantwortungen geht – weniger um Details im Timing<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 265


5.3.2 Darstellung der Dynamik eines Systems: Kommunikationsdiagramme<br />

Notation in UML 2.x<br />

The image cannot be displayed. Your<br />

computer may not have enough memory to<br />

open the image, or the image may have been<br />

corrupted. Restart your computer, and then<br />

open the file again. If the red x still appears,<br />

you may have to delete the image and then<br />

insert it again.<br />

The image cannot be displayed. Your computer may not have<br />

enough memory to open the image, or the image may have been<br />

corrupted. Restart your computer, and then open the file again. If<br />

the red x still appears, you may have to delete the image and then<br />

insert it again.<br />

Objekt<br />

Das Rechteck stellt ein Objekt dar. Es kann einen Objekt‐<br />

namen <strong>und</strong> einen Klassennamen tragen.<br />

Beziehung, Nachricht<br />

Die Kommunikationsbeziehungen zwischen Objekten wer‐<br />

den als Linie dargestellt. An die Beziehungen werden die<br />

Nachrichten, die darüber übertragen werden geschrieben.<br />

Die Nummerierung vor den Nachrichtennamen gibt die zeit‐<br />

liche Reihenfolge der Nachrichten an. (2.1, 2.2, ...).<br />

Alternativen (Nebenläufigkeit) werden durch Angabe von<br />

Buchstaben dargestellt (2.3.a, 2.3.b, ...). Der Pfeil gibt die<br />

Richtung der Nachrichten an.<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 266


Hochschule Darmstadt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong><br />

<strong>Objektorientierte</strong> <strong>Analyse</strong> <strong>und</strong> <strong>Design</strong><br />

5.3.3 Darstellung der Dynamik eines Systems:<br />

Zustandsdiagramme<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong>


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Beobachtung<br />

n� Betrachten Sie die Zustände, in der sich Ihre Digitalkamera befinden kann:<br />

ð� Das Verhalten der Kamera ist sehr stark davon abhängig, in welchem Zustand<br />

sie sich gerade befindet: Kamera reagiert <strong>beim</strong> Drücken eines Knopfes abhängig<br />

vom Zustand in dem sie sich gerade befindet (z. B. wird durch Drücken des<br />

rechten Knopfes im Zustand Display das nächste Bild angezeigt, im Zustand<br />

Fotografieren der Zustand des Blitzlichtes verändert).<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 268


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Beobachtung<br />

n� Betrachten Sie die Zustände, in denen sich ein<br />

typischer Laserdrucker befinden kann:<br />

Betriebsbereit Papierstau<br />

Kein Papier<br />

eingelegt<br />

Selbsttest<br />

Druckend<br />

Keine Tonerkassette<br />

eingelegt<br />

ð� Das Verhalten eines Druckers ist sehr stark davon abhängig, in welchem<br />

Zustand er sich gerade befindet.<br />

Toner<br />

fast leer<br />

ð� Der Drucker geht unter bestimmten Bedingungen von einem Zustand in den<br />

anderen über.<br />

Es handelt sich offensichtlich um die Dynamik eines Systems,<br />

aber wie beschreiben <strong>und</strong> implementieren wir das?<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 269


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Gr<strong>und</strong>idee Zustandsautomat (State Machine)<br />

n� Wie stellt man die Zustände <strong>und</strong> Übergänge eines Systems dar?<br />

ð� Modelliere das System als eventgetriebenes System mit<br />

Zuständen, Übergängen <strong>und</strong> Ereignissen<br />

ð� „Zustandsdiagramm“ (State (Machine) Diagram)<br />

Schranke offen<br />

Öffnen<br />

Schließen<br />

Schranke geschlossen<br />

Es ist immer nur ein Zustand in einem Zustandsautomaten aktiv!<br />

Anfangszustand<br />

Zustand<br />

Ereignis<br />

Zustandsübergang<br />

Endzustand<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 270


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Interpretation des Beispiels<br />

n� Zustandsdiagramm zu einer Schranke<br />

ð� Eine Schranke wird eingebaut <strong>und</strong> erreicht nach ihrer Fertigstellung<br />

ihren Anfangszustand (hier: Schranke offen). Sie ist betriebsbereit.<br />

Während ihrer Existenz kann sie die Zustände „Schranke offen“ <strong>und</strong><br />

„Schranke geschlossen“ einnehmen.<br />

ð� Durch die Ereignisse „Schließen“ <strong>und</strong> „Öffnen“, die von anderen Objekten<br />

(z. B. einem Benutzer, Kontaktschleife) verursacht werden, ändert sie ihren<br />

Zustand. Die Schranke reagiert aber in jedem Zustand nur auf bestimmte<br />

Ereignisse. Ist die Schranke im Zustand geschlossen, so reagiert sie nur auf das<br />

Ereignis „Öffnen“. Ist die Schranke im Zustand offen, so reagiert sie nur auf das<br />

Ereignis „Schließen“.<br />

ð� Alle Nachrichten, die in einem Zustand eines Objektes nicht sinnvoll sind (es<br />

existiert kein vom Zustand herausführender Pfeil mit diesem Ereignis), werden<br />

ignoriert <strong>und</strong> verursachen keine Reaktion des Objekts.<br />

Beispiel: Öffnen im Zustand „Schranke offen“<br />

ð� Das Erreichen des finalen Zustandes bedeutet die Zerstörung des Objekts.<br />

ð� Das Modell könnte bei Bedarf um weitere Zustände ergänzt werden:<br />

z. B. „Schranke öffnend“, „Schranke schließend“<br />

Öffnen<br />

Schranke offen<br />

Schließen<br />

Schranke geschlossen<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 271


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Was ist ein Zustand?<br />

n� Der Zustand eines Objekts ist eine Zeitspanne, in der<br />

ð� das Objekt eine bestimmte Aktivität ausführt <strong>und</strong><br />

ð� das Objekt auf ein oder mehrere bestimmte Ereignisse wartet oder<br />

ð� das Objekt wartet, bis eine bestimmte Bedingung erfüllt ist<br />

Schranke<br />

offen<br />

n� Ein Objekt kann sich im Laufe der Zeit in verschiedenen, klar voneinander<br />

abgegrenzten Zuständen befinden<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 272


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Was ist kein Zustand?<br />

n� Verwechseln Sie die Zustände, die ein Objekt oder das System<br />

einnehmen kann, nicht<br />

ð� mit den Objekten oder Komponenten des Systems selbst<br />

ð� oder mit Aktivitäten<br />

n� Beispiel: Betrachten Sie die Steuerung einer Parkhausschranke.<br />

ð� Falsch:<br />

ð� Richtig:<br />

Schranke<br />

Schranke<br />

offen<br />

oder<br />

Schranke öffnen<br />

Schranke<br />

geschlossen<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 273


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Zustandsübergänge benötigen keine Zeit!<br />

Was ist ein Zustandsübergang?<br />

Die Aktionen müssen entsprechend schnell<br />

ablaufen!<br />

n� Beispiel:<br />

ð� Betrachten Sie einen typischen Laserdrucker.<br />

Der Toner ist leer <strong>und</strong> Sie legen eine neue Tonerkassette ein.<br />

- Erkennen Sie einen Übergang von einem Zustand zu einem anderen?<br />

- Welche Elemente sind an dem Übergang beteiligt?<br />

ð� Beschreibung: „Wenn der Drucker keinen Toner mehr hat <strong>und</strong> eine<br />

Tonerkassette eingelegt wird <strong>und</strong> der Deckel geschlossen wird, dann wird ein<br />

Reset durchgeführt <strong>und</strong> anschließend ist der Drucker im Zustand ‚Selbsttest‘.“<br />

n� Ein Zustandsübergang („Transition“) liegt vor, wenn ein Objekt<br />

ð� in einem bestimmten Zustand ist <strong>und</strong><br />

ð� ein bestimmtes Ereignis eintrifft <strong>und</strong><br />

ð� bestimmte Bedingungen erfüllt sind <strong>und</strong><br />

ð� dann eine bestimmte (kurze) Aktion ausgeführt wird <strong>und</strong><br />

ð� das Objekt sich anschließend in einem anderen Zustand befindet.<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 274


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Notation von Zustandsübergängen<br />

n� Zustandsübergänge werden durch Pfeile zwischen dem aktuellen Zustand <strong>und</strong><br />

einem Folgezustand dargestellt.<br />

n� An einem solchen Pfeil werden die Details des Zustandsübergangs notiert:<br />

Liste von Auslösern<br />

(„Trigger“)<br />

(durch Kommata<br />

getrennt)<br />

Tür zu<br />

EC-Karte ins<br />

Lesegerät<br />

gesteckt<br />

Eine optionale<br />

Bedingung („Guard“)<br />

(in eckigen Klammern)<br />

[EC-Karte ist gültig]<br />

/ Kartennummer<br />

mit Zeitstempel<br />

ins Logfile schreiben;<br />

Tür öffnen<br />

Für einen Trigger sollte immer nur<br />

ein Zustandsübergang möglich sein!<br />

Aktionen („Action“) die<br />

<strong>beim</strong> Zustandswechsel<br />

stattfindet<br />

(durch/abgetrennt)<br />

Tür offen<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 275


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Verhalten in Zuständen<br />

Vorgänge, die Zeit kosten, müssen innerhalb<br />

der Zustände umgesetzt werden!<br />

n� Beispiel:<br />

ð� Betrachten Sie einen Beamer, den Sie anschalten.<br />

- Erkennen Sie Aktivitäten, die dann ausgeführt werden? Wann werden Sie ausgeführt?<br />

ð� Im Zustand „Systemstart“ wird zuerst eine rote LED angeschaltet, dann wird die<br />

Birne vorgewärmt bis die Betriebstemperatur erreicht ist. Ist dies der Fall, wird<br />

der Beamer aktiviert <strong>und</strong> statt der roten eine grüne LED angeschaltet. Während<br />

der Aufwärmphase wird alle 5 Sek<strong>und</strong>en geprüft, ob die Temperatur erreicht ist.<br />

n� Verhalten in einem Zustand tritt auf, als<br />

ð� Eintrittsverhalten (entry behavior)<br />

- Verhalten eines Objekts, wenn es einen bestimmten Zustand einnimmt<br />

ð� Zustandsverhalten (state behavior oft auch do behavior)<br />

- Verhalten eines Objekts, solange es sich in dem Zustand befindet<br />

ð� Austrittsverhalten (exit behavior)<br />

- Verhalten eines Objekts, wenn es den Zustand verlässt<br />

ð� Interne Transition (internal transition)<br />

- bedingtes Verhalten bei Ereignissen, die den Zustand nicht verlassen<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 276


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Notation des Verhaltens<br />

n� Darstellung in einem eigenen Bereich unterhalb des Zustandsnamens<br />

ð� Das Verhalten wird mit Schrägstrich von den Labels entry, do <strong>und</strong> exit abgetrennt<br />

ð� Interne Übergänge werden analog zu Transitionen beschrieben<br />

ð� Mehrere Aktionen werden durch, getrennt<br />

Eintrittsverhalten<br />

Aktionen, die <strong>beim</strong> Eintritt in den<br />

Zustand ausgeführt werden<br />

Zustandsverhalten<br />

Aktivitäten, die ausgeführt werden, solange<br />

man sich in dem Zustand befindet (es findet<br />

jedoch keine automatische Wiederholung statt)<br />

Austrittsverhalten<br />

Aktionen, die <strong>beim</strong> Verlassen des<br />

Zustands ausgeführt werden<br />

Interne Transition<br />

Aktionen, die ausgeführt werden, wenn der Trigger (hier<br />

Time-Trigger) auftritt <strong>und</strong> der (optionale) Guard erfüllt ist<br />

Systemstart<br />

entry / roteLEDan()<br />

do / Birne aufheizen()<br />

exit / roteLEDaus()<br />

alle 5 Sek. [true] / checkTemp()<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 277


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Aktionen <strong>und</strong> Aktivitäten<br />

n� Aktionen („actions“)<br />

ð� sind ein nicht unterbrechbares Verhalten, das an bestimmten Stellen in einem<br />

Zustandsautomat ausgeführt wird<br />

ð� von Aktionen wird angenommen, dass Sie keine Zeit verbrauchen<br />

ð� eine Aktion kann wiederum aus einer Sequenz von Aktionen bestehen, die dann<br />

wieder nicht unterbrechbar ist<br />

ð� in Zustandsübergängen können Aktionen ausgeführt werden<br />

ð� eine Aktion kann daraus bestehen eine Nachricht an andere Objekte (oder sich<br />

selbst) verschicken<br />

n� Aktivitäten („activities“)<br />

ð� sind Verhalten, die endliche Zeit benötigen<br />

ð� Aktivitäten werden nur innerhalb des Zustandsverhaltens ausgeführt<br />

(do behavior)<br />

ð� Aktivitäten bestehen normalerweise aus mehreren Aktionen<br />

ð� Aktivitäten werden unterbrochen, wenn ein Ereignis einen Zustandswechsel auslöst<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 278


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Reihenfolge der Aktionsausführung nach Eingang eines Triggers<br />

n� Bei einem Zustandsübergang werden<br />

die Aktivitäten in folgender Reihenfolge ausgeführt<br />

ð� Do-Aktivität wird unterbrochen<br />

ð� Austrittsverhalten des alten Zustands<br />

ð� Aktionen, die zur Transition gehören<br />

ð� Eintrittsverhalten des neuen Zustands<br />

ð� Zustandsverhalten des neuen Zustands<br />

n� Auch bei rekursiven Transitionen (Loops)<br />

werden alle diese Aktionen ausgeführt<br />

n� Bei internen Transitionen<br />

ð� werden nur die Aktivitäten ausgeführt, aber<br />

kein Exit <strong>und</strong> kein Entry behavior<br />

ð� wird eine laufende do-Aktivität unterbrochen, die<br />

Aktionen der internen Transition ausgeführt <strong>und</strong><br />

anschließend wird die do-Aktivität fortgeführt<br />

LOOP<br />

entry/ z=read()<br />

INT<br />

entry/ z=read()<br />

alle 5 Sek. / doIt()<br />

Exit behavior<br />

(actions) des<br />

vorhergehenden<br />

Zustands<br />

Transition<br />

actions<br />

Entry<br />

behavior<br />

(actions)<br />

State behavior<br />

(activity)<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 280


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Transitionen im Detail<br />

n� Transition ohne Trigger (Automatische Transition/Completion Transition)<br />

ð� 1. Fall: ohne Guard<br />

ð� feuert von selbst, sobald das Zustandsverhalten (do behavior) abgearbeitet ist<br />

A<br />

do / grinsen<br />

ð� 2. Fall: mit Guard<br />

ð� feuert von selbst, sobald das Zustandsverhalten (do behavior) abgearbeitet ist,<br />

aber nur wenn der Guard erfüllt ist<br />

ð� ist der Guard nicht erfüllt, kann der Zustand nur über eine andere Transition<br />

verlassen werden<br />

A<br />

do / lachen<br />

[Bauch tut weh]<br />

- Nach dem Lachen werden – falls der Bauch weh tut – die Muskeln gelockert<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 281<br />

B<br />

do / Muskeln lockern<br />

B<br />

do / Muskeln lockern


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Transitionen im Detail II<br />

n� Änderungsauslöser (Change Trigger)<br />

ð� an der Transition steht eine When-Bedingung<br />

ð� falls die Bedingung erfüllt ist, erfolgt die Transition (auch vor oder während der<br />

do-Aktivität)<br />

ð� falls die Bedingung nicht erfüllt ist, erfolgt der Zustandsübergang dann, wenn sich<br />

die Bedingung von false auf true ändert<br />

ð� die Bedingung wird „ständig“ neu ausgewertet <strong>und</strong> bei Erfüllung wird die<br />

Transition ausgelöst<br />

- damit die Auswertung der Bedingung technisch möglich ist, wird die Überwachung in<br />

der Praxis auf bestimmte Zeitpunkte, bestimmt Ereignisse oder die Attribute des<br />

Zustands eingeschränkt<br />

A<br />

do / lachen<br />

when (Bauch tut weh)<br />

- Das Lachen wird unterbrochen, sobald der Bauch weh tut!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 282<br />

B<br />

do / Muskeln lockern


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Ereignisse im Detail<br />

n� Wenn ein Ereignis eintrifft, gibt es entweder<br />

ð� eine Transition, die feuern kann<br />

- das ist der Normalfall; im Beispiel für z='+'<br />

ð� mehrere Transitionen, die feuern können<br />

- Der Trigger passt zu mehreren Transitionen <strong>und</strong> der Guard<br />

liefert „true“; im Beispiel für z='*'<br />

- das Verhalten der Zustandsmaschine ist nicht vorhersagbar;<br />

es wird eine zufällig bestimmte Transition durchlaufen<br />

- Dieser Fall sollte vermieden werden!<br />

ð� keine Transition, die feuern kann<br />

- Der Trigger passt zu keiner Transitionen oder der Guard<br />

liefert „false“; im Beispiel für z='/'<br />

- dann verfällt das Ereignis <strong>und</strong> es wird keine Transition ausgeführt<br />

n� Bei Automatischen Transitionen (Transitionen ohne Ereignis)<br />

gilt das Gleiche – auch wenn es kein echtes Ereignis gibt<br />

Ereignis1 [z!='/']<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 283<br />

SX<br />

entry/ z=read()<br />

Ereignis1 [z='*']<br />

[z!='/']<br />

SY<br />

entry/ z=read()<br />

[z='*']


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Sonderfälle: Kreuzungen vs. Entscheidungen<br />

n� Eine Kreuzung erlaubt, bei Kombinationen von Zustandsübergängen das<br />

Diagramm zu vereinfachen.<br />

ð� Aber Vorsicht – es gibt einen wichtigen Unterschied zu Entscheidungen<br />

Kreuzung<br />

B<br />

A<br />

do / z = 17<br />

Trigger / z++<br />

[z gerade] [z ungerade]<br />

Entscheidung<br />

C B<br />

Trigger / z++<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 284<br />

A<br />

do / z = 17<br />

[z gerade] [z ungerade]<br />

C


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Kreuzungen vs. Entscheidungen (Darstellung transformiert)<br />

n� Die Kreuzung kann als 2 Transitionen, die Entscheidung mit 3 Transitionen <strong>und</strong><br />

Zwischenzustand dargestellt werden:<br />

A<br />

Kreuzung Entscheidung<br />

do / z = 17<br />

Trigger [z gerade]<br />

/ z++<br />

B<br />

Trigger [z ungerade]<br />

/ z++<br />

C B<br />

ohne Aktivitäten oder Aktionen<br />

Trigger / z++<br />

ð� Die Auswertung der Bedingung erfolgt bei der Kreuzung VOR der Ausführung der<br />

Aktion; bei der Entscheidung nach der Aktion!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 285<br />

A<br />

do / z = 17<br />

[z gerade] Zwischenzustand<br />

[z ungerade]<br />

C


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Wie findet man Zustände, Übergänge <strong>und</strong> Ereignisse?<br />

n� Analysiere, in welchen unterschiedlichen Zuständen<br />

sich das System befinden kann<br />

ð� Suche nach gleichem Verhalten über einen Zeitraum<br />

n� Analysiere welche Ereignisse in dem System auftauchen<br />

ð� löst das Ereignis einen Zustandsübergang aus?<br />

ð� welche Aktion erfolgt als Reaktion auf das Ereignis?<br />

ð� welche Aktionen werden dauerhaft ausgeführt <strong>und</strong> welche Aktionen nur <strong>beim</strong><br />

Eintreten oder Verlassen eines Zustands?<br />

n� Analysiere die Übergänge zwischen den Zuständen<br />

ð� sollte es einen Übergang zwischen einem Zustandspaar geben?<br />

ð� achte darauf, dass jedes Ereignis höchstens einen Übergang auslöst<br />

Analysiere auch vorliegende<br />

Use Cases <strong>und</strong> Sequenzdiagramme!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 286


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Lösung der Übung: C++ Kommentarfilter<br />

“*” im /* Kom. gelesen<br />

[z='*']<br />

[z!='*' && z!='/']<br />

entry/ z=read()<br />

[z!='“']<br />

/write(z)<br />

[z='*']<br />

[z='/']<br />

in String<br />

entry/ z=read()<br />

In “/*”-Kommentar<br />

entry/ z=read()<br />

[z!='/' && z!='“' && z!=EOF]<br />

/write(z)<br />

[z='“']<br />

/write(z) [z='“']<br />

/write(z)<br />

im Progr-Code<br />

entry/ z=read()<br />

[z!='*']<br />

[z='/']<br />

[z='*']<br />

[z!='/' && z!='*']<br />

/write('/'); write(z);<br />

[z!=EOLN<br />

&& z!=EOF]<br />

Ein “/” gelesen<br />

entry/ z=read()<br />

[z='/']<br />

[z=EOLN]<br />

/write(z);<br />

[z=EOF]<br />

/write(z) In “//”-Kommentar<br />

entry/ z=read()<br />

[z=EOF] / write(z);<br />

Finden Sie noch<br />

einen Fehler?<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 288


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Beschreibung des Zustandsverhaltens<br />

n� Gr<strong>und</strong>sätzlich kann das Zustandsverhalten (do / Zustandsverhalten) auch<br />

außerhalb des Zustandsdiagramms näher beschrieben werden:<br />

ð� verbal<br />

ð� als Aktivitätsdiagramm<br />

ð� als weiteres Zustandsdiagramm (ein Zustand wird in Unterzustände mit<br />

Zustandsübergängen zerlegt)<br />

ð� oder auch mit dem Konzept der zusammengesetzten Zustände<br />

(siehe nächste Folie)<br />

Systemstart<br />

entry / roteLEDAn()<br />

do / Birne aufheizen()<br />

exit / roteLEDAus()<br />

alle 5 Sek. [true] / CheckTemp()<br />

Birne aufheizen<br />

Damit die Birne...<br />

Birne aufheizen<br />

The image cannot be displayed. Your computer may<br />

not have enough memory to open the image, or the<br />

image may have been corrupted. Restart your<br />

computer, and then open the file again. If the red x<br />

still appears, you may have to delete the image and<br />

then insert it again.<br />

Birne aufheizen<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 289


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Zusammengesetzte Zustände (composite states)<br />

n� Bisher haben wir nur einfache Zustände betrachtet<br />

ð� Ein Zustand kann jedoch selbst wiederum als ein Automat mit Unterzuständen<br />

beschrieben werden<br />

ð� Das Vorhandensein von Unterzuständen kann durch das Composite-Icon<br />

(„Brille“) angedeutet werden<br />

Zustandsname<br />

entry / Eintrittsverhalten<br />

do / Zustandsverhalten<br />

exit / Austrittsverhalten<br />

UZ1 UZ1<br />

Zustandsname<br />

entry / Eintrittsverhalten<br />

do / Zustandsverhalten<br />

exit / Austrittsverhalten<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 290


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Eintritt in einen zusammengesetzten Zustand<br />

n� Ein zusammengesetzter Zustand kann wie folgt betreten werden:<br />

ð� Default entry<br />

Die Pfeilspitze des Zustandsübergangs zeigt<br />

auf den Rand des zusammengesetzten Zustands.<br />

Damit wird der Startzustand des zusammengesetzten<br />

Zustands implizit als Folgezustand ausgewählt.<br />

ð� Explicit entry<br />

Die Pfeilspitze zeigt direkt auf einen bestimmten<br />

Unterzustand eines zusammengesetzten Zustands.<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 291<br />

UZ<br />

UZ1<br />

UZ2


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Verlassen eines zusammengesetzten Zustands<br />

n� Ein zusammengesetzter Zustand kann auf folgende Arten verlassen werden:<br />

ð� Der zusammengesetzte Zustand erreicht seinen Endzustand (weiter mit C).<br />

ð� Ein Unterzustand wechselt explizit in einen anderen Zustand außerhalb des<br />

zusammengesetzten Zustands (B nach D).<br />

ð� Ein Auslöser weg von dem zusammengesetzten Zustand findet statt<br />

(Wechsel nach E – egal aus welchem Zustand).<br />

C<br />

A B<br />

T1[G1]/A1<br />

T2[G2]/A2<br />

Was passiert, wenn T1 eintrifft <strong>und</strong> G1 erfüllt ist, während der Do-Teil von A ausgeführt wird?<br />

Was passiert, wenn T1 eintrifft <strong>und</strong> G1 erfüllt ist, während der Do-Teil von B ausgeführt wird?<br />

Was passiert, wenn T2 eintrifft <strong>und</strong> G2 erfüllt ist, während der Do-Teil von A ausgeführt wird?<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 292<br />

D<br />

E


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Zwischenstand Zustandsdiagramme<br />

n� Modellierungselemente<br />

ð� Zustände <strong>und</strong> Verhalten in Zuständen<br />

ð� Transitionen <strong>und</strong> Aktionen<br />

ð� Ereignisse<br />

ð� Zusammengesetzte Zustände<br />

n� Bisher:<br />

ð� Beschreibung von zustandsbasierten Vorgängen (Laserdrucker, Tür)<br />

ð� Beschreibung von Algorithmen (C++-Parser)<br />

ð� eher als Mittel für die <strong>Analyse</strong><br />

Aber wie funktioniert das im <strong>Design</strong>,<br />

d. h. mit Objektorientierung – mit Klassen <strong>und</strong> Objekten?<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 294


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Erste Beobachtung<br />

n� Betrachten Sie die Zustände, in denen<br />

sich ein typisches Objekt befinden<br />

kann:<br />

ð� Objekt wird angelegt (Konstruktor)<br />

ð� Objekt ist vorhanden<br />

- empfängt Nachrichten<br />

bzw. macht Methodenaufrufe<br />

- je nach Aufruf <strong>und</strong> Attributen des<br />

Objekts werden Attribute verändert<br />

oder weitere Nachrichten verschickt<br />

- Ereignisse (z. B. Timer) können<br />

Aktionen auslösen<br />

ð� Objekt wird zerstört (Destruktor)<br />

... durchläuft<br />

mehrere<br />

Zustände<br />

Ein Objekt<br />

wird erzeugt...<br />

Aktiv<br />

… <strong>und</strong> stirbt<br />

Der Lebenszyklus von Objekten einer Klasse kann durch Zustandsdiagramme<br />

beschrieben werden!<br />

Neu<br />

Sterbend<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 295


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Zweite Beobachtung<br />

n� Objekte in einem Sequenzdiagramm zeigen Zustände an!<br />

ð� eingehende Signale ändern den Zustand<br />

Waiting<br />

Checking Student<br />

Exmatriculating<br />

Zustandsdiagramm<br />

Exmatrikulationsmaske<br />

in(MatrNr)<br />

return (ExStudi) d. h.<br />

when Studi existiert<br />

Waiting<br />

Checking Student<br />

entry/SV.existiertStud(MatrNr)<br />

Exmatriculating<br />

entry/ExStudi.exmatrikulieren()<br />

return(ok), d. h.<br />

when Studi exmatrikuliert<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 296


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Von Sequenzdiagrammen zum Zustandsdiagramm<br />

n� Vorgehen zum Herausarbeiten der Zustände<br />

1. Wähle ein Objekt aus <strong>und</strong> analysiere ein Sequenzdiagramm in dem es vorkommt<br />

2. Markiere eintreffende Ereignisse für das betreffende Objekt<br />

3. Wähle ein Paar von „benachbarten“ Ereignissen<br />

4. Analysiere was das Objekt zwischen den beiden Ereignissen tut <strong>und</strong> vergebe<br />

einen entsprechenden Namen für diesen Zustand<br />

5. Führe den vorigen Schritt für alle benachbarten Paare durch<br />

6. Wiederhole das Vorgehen für weitere Sequenzdiagramme<br />

n� Zeichne ein Zustandsdiagramm<br />

1. Beginne das Diagramm mit einem Startzustand <strong>und</strong> den gef<strong>und</strong>enen Zuständen<br />

2. Zeichne Transitionen zwischen Zuständen, die im Sequenzdiagramm<br />

benachbart sind<br />

3. Ergänze das Diagramm um Ereignisse, Aktionen <strong>und</strong> bei Bedarf um einen<br />

Endzustand<br />

4. Überprüfe, ob es weitere Transitionen geben sollte, die nicht in den<br />

Sequenzdiagrammen vorkommen<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 297


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Übung: Mikrowellenherd<br />

n� Modellieren Sie einen Mikrowellenherd.<br />

Die Funktionsweise wird stichwortartig zusammengefasst:<br />

ð� Die Bedienelemente für den Benutzer sind der Einschaltknopf <strong>und</strong> die Tür<br />

ð� Durch Drücken des Knopfes wird die Mikrowelle (die „Backröhre“) eingeschaltet<br />

ð� Die Kochzeit wird über eine interne Zeituhr auf eine Minute festgelegt<br />

ð� Durch weiteres n-maliges Drücken des Knopfes wird die Kochzeit um n Minuten<br />

verlängert<br />

ð� Wenn die Zeit abgelaufen ist, wird die Backröhre ausgeschaltet, ein Piepton<br />

ertönt <strong>und</strong> als nächstes muss die Tür geöffnet werden bevor die Mikrowelle<br />

erneut gestartet werden kann<br />

ð� Durch Öffnen der Tür wird die Backröhre abgeschaltet <strong>und</strong> die verbleibende<br />

Kochzeit gelöscht<br />

ð� Der Mikrowellenherd startet nur bei geschlossener Tür<br />

Die Aufgabe kennen Sie aus<br />

dem Kapitel Sequenzdiagramme!<br />

ð� Wenn die Tür offen ist oder wenn der Herd an ist, leuchtet das Licht<br />

ð� Wenn der Mikrowellenherd ein- bzw. ausschaltet, muss die Backröhre ebenfalls<br />

ein- bzw. ausgeschaltet werden<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 298


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Übung: Mikrowellenherd<br />

n� Erstellen Sie<br />

ð� ein Klassendiagramm<br />

- mit Klassen, Attribute, Methoden, Assoziationen<br />

ð� die Zustandsdiagramme der Klassen. Suchen Sie dazu:<br />

- Zustände (z. B. auch in den Sequenzdiagrammen)<br />

- Ereignisse<br />

- Zustandsübergänge<br />

- Aktivitäten<br />

ð� Die Sequenzdiagramme für folgende Szenarien sollen abgedeckt werden<br />

- 2 Minuten kochen<br />

- Tür öffnen <strong>und</strong> schließen<br />

- Kochvorgang mit Abbruch durch Tür öffnen<br />

Die Aufgabe kennen Sie aus<br />

dem Kapitel Sequenzdiagramme!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 299


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Lösung Mikrowellenherd: Klassendiagramm<br />

Die Lösung kennen Sie aus<br />

dem Kapitel Sequenzdiagramme!<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 300


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Lösung Mikrowellenherd: Sequenzdiagramm „2 Minuten kochen“<br />

wartend<br />

kochend<br />

kochen fertig<br />

n� Analysiere die Objekte auf Zustände<br />

ð� Backröhre<br />

- an<br />

- aus<br />

ð� Licht<br />

- an<br />

- aus<br />

ð� Timer<br />

- aus<br />

- aktiv<br />

ð� Mikrowelle<br />

- wartend<br />

- kochend<br />

- kochen fertig<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 301


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Lösung Mikrowellenherd: Sequenzdiagramm „Tür öffnen <strong>und</strong> schließen“<br />

n� Analysiere die Objekte auf Zustände<br />

ð� Backröhre<br />

- an<br />

- aus<br />

ð� Licht<br />

- an<br />

- aus<br />

ð� Timer<br />

- aus<br />

- aktiv<br />

ð� Mikrowelle<br />

- wartend<br />

- geöffnet<br />

schon bekannt<br />

neu<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 302


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Lösung Mikrowellenherd: Sequenzdiagramm „Kochen mit Abbruch“<br />

n� Analysiere die Objekte auf Zustände<br />

ð� Backröhre<br />

- an<br />

- aus<br />

ð� Licht<br />

- an<br />

- aus<br />

ð� Timer<br />

- aus<br />

- aktiv<br />

ð� Mikrowelle<br />

- wartend<br />

- kochend<br />

- geöffnet<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 303


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Lösung Mikrowellenherd: Zustandsdiagramme für Licht <strong>und</strong> Backröhre<br />

Licht<br />

Licht an<br />

entry / lichtstatus = on;<br />

an aus<br />

Licht aus<br />

entry / lichtstatus = off;<br />

Backroehre<br />

Backröhre an<br />

entry / backstatus = on;<br />

an aus<br />

Backröhre aus<br />

entry / backstatus = off;<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 304


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Lösung Mikrowellenherd: Zustandsdiagramm Timer<br />

Timer<br />

Timer aus<br />

entry / reset()<br />

erhoehe / zeit++;<br />

start when<br />

zeit==0<br />

/myback.alert<br />

Timer aktiv<br />

do / zähle zeit runter<br />

erhoehe / zeit++;<br />

stop<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 305


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Lösung Mikrowellenherd: Zustandsdiagramm Mikrowelle<br />

Mikrowelle<br />

wartend<br />

entry /MyBack.aus,<br />

MyLicht.aus, MyTimer.reset<br />

Tür_zu<br />

Knopf<br />

/ MyTimer.<br />

erhoehe<br />

Tür_auf / MyLicht.an<br />

kochend<br />

entry / MyBack.an,<br />

MyLicht.an, MyTimer.start<br />

exit / MyBack.aus<br />

Knopf /MyTimer.erhoehe<br />

geöffnet<br />

kochen fertig<br />

entry / MyLicht.aus, out(Piep)<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 306<br />

alert<br />

Tür_auf / MyTimer.stop<br />

Tür_auf / MyLicht.an


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Lösung Mikrowellenherd: Bewertung<br />

n� Aktionen können häufig an verschiedenen Stellen umgesetzt werden<br />

ð� z. B. als Austrittverhalten des alten Zustands oder als Aktion, die zur Transition<br />

gehört oder auch als Verhalten des neuen Zustands<br />

ð� achten Sie darauf, dass Aktionen nicht unnötig oder mehrfach ausgeführt wird<br />

ð� bedenken Sie, dass nur das Zustandsverhalten länger dauern darf<br />

ð� bei zyklischen Transitionen wird jeweils das Exit <strong>und</strong> Entry behavior ausgeführt<br />

- bei internen Transitionen nicht!<br />

kochend<br />

entry / MyBack.an,<br />

MyLicht.aus, MyTimer.start<br />

exit / MyBack.aus<br />

Knopf / MyTimer.erhoehe<br />

Knopf<br />

/ Timer.erhoehe<br />

kochend<br />

entry / MyBack.an,<br />

MyLicht.aus, MyTimer.start<br />

exit / MyBack.aus<br />

n� Die Verwendung des Exit Verhaltens im Zustand „kochend“ verhindert, dass in<br />

einem anderen Zustand versehentlich die Backröhre „an“ ist<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 307


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Orthogonale zusammengesetzte Zustände<br />

n� Der Inhalt eines Zustands ist schwer auf Korrektheit zu prüfen, wenn darin<br />

mehrere eigenständige Objekte behandelt werden<br />

ð� üblicherweise bei einer Aggregation im Klassendiagramm<br />

(z. B. auch Timer, Licht, Backröhre)<br />

n� Ein Zustand kann zur Verbesserung der Übersichtlichkeit in sogenannte<br />

Regionen (oder Gebiete) aufgeteilt werden<br />

ð� jede enthält einen parallel ausführbaren<br />

(„orthogonalen“) Unterzustandsautomaten<br />

ð� wenn der Oberzustand betreten wird,<br />

werden alle Unterzustandsautomaten<br />

parallel betreten<br />

ð� Auftretende Ereignisse werden<br />

für jede Region betrachtet<br />

ð� das Ein- <strong>und</strong> Austrittsverhalten wird analog<br />

zu den zusammengesetzten Zuständen<br />

dargestellt<br />

kochend<br />

Backröhre<br />

an<br />

entry / an<br />

exit / aus<br />

Licht<br />

an<br />

entry / an<br />

Timer<br />

aktiv<br />

entry / start<br />

Knopf / zeit++<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 308


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Weitere Modellierungselemente: Gabelung <strong>und</strong> Vereinigung<br />

n� Um parallele Abläufe für orthogonal zusammengesetzte Zustände explizit zu<br />

machen, gibt es die Gabelung („Fork“)<br />

ð� die ausgehenden Kanten enthalten weder Trigger<br />

noch Bedingung<br />

ð� jede ausgehende Kante führt in eine (andere) Region<br />

ð� nun können mehrere (Unter-)Zustände aktiv sein, allerdings müssen Sie<br />

unabhängig voneinander sein <strong>und</strong> können deshalb auch leicht sequentialisiert<br />

werden<br />

n� Um die Synchronisation von parallelen Abläufen (innerhalb von orthogonal<br />

zusammengesetzten Zuständen) explizit zu machen, gibt es die<br />

Vereinigung („Join“)<br />

ð� jede der eingehenden Kanten stammt aus einer Region<br />

ð� die eingehenden Kanten haben weder Trigger<br />

noch Bedingung<br />

n� Die Verfolgung der aktiven Unterzustände erfolgt nach dem Tokenprinzip<br />

Auslöser [Bedingung]<br />

Verhalten Verhalten<br />

Verhalten Verhalten<br />

Auslöser [Bedingung]<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 309


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Weitere Modellierungselemente: Gr<strong>und</strong>idee Historie<br />

n� Unterzustandsautomaten können auch komplizierter sein, als im<br />

vorherigen Beispiel<br />

ð� Stellen Sie sich z. B. ein Autoradio vor, das CD-Player, Radio usw. enthält<br />

ð� dann wird das Autoradio zu einem Zustandsautomaten, der viele Zustände<br />

enthält <strong>und</strong> wiederum selbst Unterzustandsautomaten für CD <strong>und</strong> Radio enthält<br />

ð� <strong>beim</strong> Wiedereintritt in einen Unterzustand wäre es oft praktisch zu wissen, in<br />

welchem Zustand der Unterautomat zuletzt war<br />

- z. B. war das Radio auf MW, oder auf UKW, bevor Sie zur CD wechselten?<br />

ð� Man braucht so etwas wie einen „intelligenten Eingangszustand“, der sich den<br />

letzten Zustand merkt<br />

ð� dann wird <strong>beim</strong> Wiedereintritt<br />

in den Unterautomaten<br />

der vorherige Zustand<br />

wiederhergestellt<br />

ð� „Historie“<br />

CD Betrieb<br />

Taste RADIO<br />

[CD eingelegt]<br />

Radiobetrieb<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 310<br />

FM<br />

Taste AM<br />

Taste FM<br />

AM


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Weitere Modellierungselemente: Flache Historie<br />

n� Eine flache Historie („Shallow History“)<br />

ð� merkt sich den Zustand der <strong>beim</strong> Verlassen eines Unterzustandsautomaten<br />

zuletzt aktiv war<br />

ð� kann eine Transition definieren, die ausgeführt wird, wenn die Historie noch nicht<br />

„gesetzt“ ist bzw. gelöscht wurde<br />

ð� wird gelöscht (d. h. der Inhalt), wenn ein Endzustand des<br />

Unterzustandsautomaten erreicht wird<br />

ð� merkt sich NICHT die Zustände von verschachtelten Unterzustandsautomaten<br />

CD Betrieb<br />

Taste RADIO<br />

when(CD eingelegt)<br />

definiert Zielzustand<br />

bei leerer Historie<br />

H<br />

FM<br />

Radiobetrieb<br />

flache Historie<br />

Taste AM<br />

Taste FM<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 311<br />

AM


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Weitere Modellierungselemente: Tiefe Historie<br />

n� Eine tiefe Historie („Deep History“)<br />

ð� merkt sich den zuletzt aktiven Unterzustand in der aktuellen <strong>und</strong> in allen weiteren<br />

Unterzustandsautomaten<br />

ð� kann eine Transition definieren, die ausgeführt wird, wenn die Historie noch nicht<br />

„gesetzt“ ist bzw. gelöscht wurde<br />

ð� wird gelöscht (d. h. der Inhalt), wenn ein Endzustand des<br />

Unterzustandsautomaten erreicht wird<br />

ð� merkt sich die Zustände von allen verschachtelten Unterzustandsautomaten<br />

CD Betrieb<br />

Taste RADIO<br />

[CD eingelegt]<br />

H*<br />

FM1<br />

FM<br />

Taste FM<br />

Taste FM<br />

tiefe Historie<br />

Radiobetrieb<br />

FM2<br />

Taste AM<br />

Taste FM<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 312<br />

AM


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Vom Zustandsautomat zum laufenden Code (Prinzip)<br />

n� Umsetzung eines Systems mit Zustandsautomaten<br />

ð� Die Implementierung der Klassen mit Methoden <strong>und</strong> Attributen ist bekannt<br />

ð� Die Zustände <strong>und</strong> Ereignisse kann man mit Switch/Case <strong>und</strong> Enums umsetzen<br />

ð� Das Eintreffen eines Ereignisses kann man durch Methodenaufrufe realisieren<br />

ð� Das ist für jeden Zustandsautomat das Gleiche!<br />

ð� Verwende eine generische Laufzeitumgebung für Zustandsdiagramme!<br />

n� Es gibt mächtige Tools/Frameworks für Zustandsautomaten (z. B. Rhapsody)<br />

ð� lesen Zustandsautomaten bzw. -diagramme ein<br />

ð� erzeugen lauffähigen Code<br />

ð� stellen die erforderliche Infrastruktur bereit (Timer, Messaging,...)<br />

- zum Verschicken von Nachrichten, zum Aufrufen von Methoden, zum Verfolgen des<br />

aktiven Zustands, usw.<br />

ð� unterstützen bei der Entwicklung mit „Debugger“, <strong>Analyse</strong>verfahren usw.<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 313


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Parallelität, synchron oder asynchron? Aktive Objekte<br />

n� In den Zustandsdiagrammen tauchen mehrere Objekte auf, die offensichtlich<br />

eigenständig „leben“<br />

ð� z. B. muss der Timer weiterzählen, während die Mikrowelle auf einen<br />

Tastendruck wartet; das heißt die Mikrowelle <strong>und</strong> der Timer arbeiten parallel<br />

ð� <strong>und</strong> die Backröhre heizt eigentlich für eine längere Zeitdauer – wir haben das<br />

einfach auf das An-/Ausschalten beschränkt<br />

ð� in den Sequenzdiagrammen wurde das Problem schon angedeutet<br />

(durch asynchrone Nachrichten mit einer in()-/out()-Notation)<br />

– aber dort dürfen auch mehrere Objekte gleichzeitig aktiv sein!<br />

ð� In einem Zustandsautomaten darf immer nur ein Zustand aktiv sein!<br />

n� Eigentlich braucht man mehrere Zustandsautomaten, die parallel arbeiten <strong>und</strong><br />

Nachrichten austauschen können!<br />

ð� Das Konzept der „aktiven Objekte“ erlaubt dies <strong>und</strong> die zuvor erwähnten Tools<br />

unterstützen auch diese Fähigkeit<br />

ð� Durch Multitasking, kritische Bereiche, asynchrone Kommunikation etc. wird die<br />

Umsetzung dann deutlich komplizierter... (<strong>und</strong> wird deshalb hier nicht behandelt)<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 314


5.3.3 Darstellung der Dynamik eines Systems: Zustandsdiagramme<br />

Kontrollfragen<br />

n� Welche Verhalten können innerhalb eines Zustands auftreten?<br />

n� Wie ist die Ausführungsreihenfolge bei einem Zustandsübergang?<br />

n� Was passiert, wenn es mehr als eine Transition gibt, deren Wächter <strong>und</strong> Trigger<br />

erfüllt sind?<br />

n� Was bedeutet eine Transition, die keinen Trigger hat, sondern nur einen<br />

Wächter?<br />

n� Was haben Zustandsdiagramme mit Objekten zu tun?<br />

n� Wie extrahiert man aus Sequenzdiagrammen die Zustände?<br />

n� Wie kann man Zustandsautomaten ausführbar machen?<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 315


Hochschule Darmstadt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong><br />

<strong>Objektorientierte</strong> <strong>Analyse</strong> <strong>und</strong> <strong>Design</strong><br />

5.3.4 Darstellung der Dynamik eines Systems:<br />

Zusammenfassung<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong>


5.3.4 Darstellung der Dynamik eines Systems: Zusammenfassung<br />

Kontrollfragen<br />

n� Warum sind Verhaltensdiagramme eine wichtige Ergänzung zu<br />

Strukturdiagrammen?<br />

n� Welche Elemente enthält ein Sequenzdiagramm?<br />

n� Gehört ein Aktor zum System?<br />

n� Wann verwendet man (a)synchrone Aufrufe?<br />

n� Welche Bedeutung hat die Aktivierung?<br />

n� Was sind „Combined Fragments“?<br />

n� Sind Sequenzdiagramme ausführbar?<br />

n� Welchen Vorteil bieten Kommunikationsdiagramme?<br />

n� Wann verwenden Sie Zustandsdiagramme?<br />

n� Sind Zustandsdiagramme ausführbar?<br />

Können Sie jetzt die Dynamik eines Systems<br />

in Diagrammen darstellen?<br />

OOAD, Dr. Eicke Godehardt WS2012/13, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 317

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!