6. Zustandsorientierte Modellierung · Die Delphi-Oberfläche mit allen nötigen Objekten ist...

8
[email protected] Informatik 11 Seite 25 6. Zustandsorientierte Modellierung Im Alltag benutzen wir vielfältige Automaten: denke an Getränkeautomat, Am- pelanlage, Kaffeeautomat, Waschmaschine, Aufzug, CD-Spieler und so weiter. Diese Geräte vollziehen vordefinierte zeitliche Abläufe. Um diese Abläufe zu strukturieren, zerlegt man sie in Zustände, die der Automat annehmen kann. Von den Objekten wissen wir schon, dass ein Zustand festgelegt ist durch die Attributwerte des Objekts (siehe Karol oder siehe ein Objekt der Klasse l l TKonto). Zustandsübergänge werden bei Objekten durch Algorithmen realisiert. Karol (Zustand1) Schritt() . . . PositionX = 2 PositionY = 4 Richtung = O maxSprunghöhe = 1 Karol (Zustand2) Schritt() . . . PositionX = 5 PositionY = 4 Richtung = S maxSprunghöhe = 1 Konto1(Zustand2) Einzahlen() Auszahlen() Überweisen() . . . Nummer = 1234 Inhaber = ’Huber’ Stand = 120,34 Konto1(Zustand1) Einzahlen() Auszahlen() Überweisen() . . . Nummer = 1234 Inhaber = ’Huber’ Stand = 270,34 Z1 Z2 T T Der Pfeil kennzeichnet den Start-Zustand, dieser ist hier gleichzeitig der End-Zustand (fett mar- kiert). Das Ereignis T löst Zustandsübergange aus. Für Z1 ist der Folgezustand Z2, für Z2 ist der Folgezustand Z1. Auch bei Automaten werden die Zustände durch die Werte bestimm- ter Attribute (=Variablen) festgelegt. Bestimmte Ereignisse (Einga- ben) lösen dann Zustandsübergänge aus, die man wieder als Algo- rithmen formulieren kann. Einen sehr einfachen Automaten stellt ein Stromkreis mit einem Wippschalter (Taster) dar. Dieser Automat kennt nur zwei Zustände und ein Ereignis: Zustand Z1: Schalter offen, Lampe brennt nicht Zustand Z2: Schalter geschlossen, Lampe brennt Ereignis T: Taste wird gedrückt Der Automat lässt sich durch folgendes Zustandsdiagramm beschreiben: Um Automaten in den Griff zu bekommen benutzt man ein weiteres wichtiges Hilfsmittel: die Zustandstabelle: Zustand Schalter geschlossen Lampe Folgezustand bei T 1 nein aus 2 2 ja an 1 Der Zustand dieses Automaten ist allein festgelegt durch die Stellung des Schalters: geschlossen (ja/ nein).

Transcript of 6. Zustandsorientierte Modellierung · Die Delphi-Oberfläche mit allen nötigen Objekten ist...

Page 1: 6. Zustandsorientierte Modellierung · Die Delphi-Oberfläche mit allen nötigen Objekten ist bereits fertig vorgege-ben, allerdings ohne jeglichen Programm-Code. Die Lehrer-Version

[email protected] Informatik 11 Seite 25

6. Zustandsorientierte Modellierung

Im Alltag benutzen wir vielfältige Automaten: denke an Getränkeautomat, Am-pelanlage, Kaffeeautomat, Waschmaschine, Aufzug, CD-Spieler und so weiter. Diese Geräte vollziehen vordefi nierte zeitliche Abläufe. Um diese Abläufe zu strukturieren, zerlegt man sie in Zustände, die der Automat annehmen kann. Von den Objekten wissen wir schon, dass ein Zustand festgelegt ist durch die Attributwerte des Objekts (siehe Karol oder siehe ein Objekt der Klasse Karol oder siehe ein Objekt der Klasse Karol TKonto). Zustandsübergänge werden bei Objekten durch Algorithmen realisiert.

Karol (Zustand1)

Schritt(). . .

PositionX = 2PositionY = 4Richtung = OmaxSprunghöhe = 1

Karol (Zustand2)

Schritt(). . .

PositionX = 5PositionY = 4Richtung = SmaxSprunghöhe = 1

Konto1(Zustand2)

Einzahlen()Auszahlen()Überweisen(). . .

Nummer = 1234Inhaber = ’Huber’Stand = 120,34

Konto1(Zustand1)

Einzahlen()Auszahlen()Überweisen(). . .

Nummer = 1234Inhaber = ’Huber’Stand = 270,34

Z1 Z2

T

T

Der Pfeil kennzeichnet den Start-Zustand, dieser ist hier gleichzeitig der End-Zustand (fett mar-kiert). Das Ereignis T löst Zustandsübergange aus. Für Z1 ist der Folgezustand Z2, für Z2 ist der Folgezustand Z1.

Auch bei Automaten werden die Zustände durch die Werte bestimm-ter Attribute (=Variablen) festgelegt. Bestimmte Ereignisse (Einga-ben) lösen dann Zustandsübergänge aus, die man wieder als Algo-rithmen formulieren kann. Einen sehr einfachen Automaten stellt ein Stromkreis mit einem Wippschalter (Taster) dar. Dieser Automat kennt nur zwei Zustände und ein Ereignis:

Zustand Z1: Schalter offen, Lampe brennt nicht

Zustand Z2: Schalter geschlossen, Lampe brennt

Ereignis T: Taste wird gedrückt

Der Automat lässt sich durch folgendes Zustandsdiagramm beschreiben:

Um Automaten in den Griff zu bekommen benutzt man ein weiteres wichtiges Hilfsmittel: die Zustandstabelle:

Zustand Schaltergeschlossen Lampe Folgezustand

bei T1 nein aus 2

2 ja an 1

Der Zustand dieses Automaten ist allein festgelegt durch die Stellung des Schalters: geschlossen (ja/nein).

Page 2: 6. Zustandsorientierte Modellierung · Die Delphi-Oberfläche mit allen nötigen Objekten ist bereits fertig vorgege-ben, allerdings ohne jeglichen Programm-Code. Die Lehrer-Version

[email protected] Informatik 11 Seite 26

Simulation in einem Delphi-Programm:

Zur visuellen Umsetzung benutzen wir folgende Objek-te:

Taste: TButtonSchalter, SchalterOffen: TImageLampe, LampeGrau: TShape

In Zustand 2 ist Lampe sichtbar, LampeGrau liegt da-hinter. Ebenso ist Schalter (mit dem geschlossenen Schalter (mit dem geschlossenen SchalterSchaltersymbol) sichtbar und überdeckt SchalterOffen. Die Schaltersymbole wurden im Bildeditor als Bitmap erstellt und in ein TImage-Objekt geladen. Das Ein- und Ausschalten der Lampe realisieren wir, indem wir die Eigenschaft Lampe.Visible auf true oder false setzen, entsprechend die Eigenschaft Schalter.Visible.

Dieser einfache Sachverhalt ließe sich jetzt durch eine einfache Anweisung in der ButtonClick-Methode steu-ButtonClick-Methode steu-ButtonClickern:

Da wir aber dieses Musterbeispiel auf kom-plexere Automaten übertragen wollen, pa-cken wir die Aufgabe etwas Grund legender an:

In der Zustandstabelle haben wir die benötigten Variablen und ihre Werte schon aufgelistet. Ich schlage vor, die Variablenwerte (=Daten) eines Zustands in einem Record zusammenzufassen. Deswegen dekla-rieren wir folgenden Record-Typ:

TZustand = record S, L: boolean; fz: integer;end;

Die gesamte Tabelle kommt dann in ein konstantes Array[1..2] of TZustand:constTabelle: array[1..2] of TZustand = ((S: false; L: false; fz: 2), (S: true; L: true; fz: 1));

Der Automat muss natürlich jederzeit wissen, in welchem Zustand er sich befi ndet. Dazu erhält er die Integer-Variable z. Und den Zustandsübergang geben wir nicht wie oben in die Hand eines Button, sondern deklarieren eine Methode GeheInZustand(nr: integer), die beim Ereignis T (Tastendruck) auf-gerufen wird. (Später bei anderen Automaten kann sie dann bei Eintritt eines beliebigen Ereignisses auf-gerufen werden). Beim Programmstart (in der onCreate-Methode von Form1) versetzen wir das System in den Start-Zustand: GeheInZustand(1). Beim Drücken der Taste lesen wir die Nummer des Folgezu-stands aus der Tabelle heraus: Tabelle[z].fz , wobei z die Nummer des Aktuellen Zustands enthält. Die Tabelle[z].fz , wobei z die Nummer des Aktuellen Zustands enthält. Die Tabelle[z].fzgesamte Anweisung zum Wechsel in den nächsten Zustand lautet dann: GeheInZustand(Tabelle[z].fz).

Page 3: 6. Zustandsorientierte Modellierung · Die Delphi-Oberfläche mit allen nötigen Objekten ist bereits fertig vorgege-ben, allerdings ohne jeglichen Programm-Code. Die Lehrer-Version

[email protected] Informatik 11 Seite 27

. . .

Page 4: 6. Zustandsorientierte Modellierung · Die Delphi-Oberfläche mit allen nötigen Objekten ist bereits fertig vorgege-ben, allerdings ohne jeglichen Programm-Code. Die Lehrer-Version

[email protected] Informatik 11 Seite 28

Parallelschaltung mit zwei Schaltern Folgende Schaltung soll als Zustandsautomat simuliert werden:

Jeder Druck auf eine Taste ändert den Zustand des zuge-hörigen Schalters und damit der ganzen Schaltung. Der Automat kennt zwei Ereignisse: T1, T2 (Druck auf Taste 1 / 2). Der Zustand der Schaltung hängt von zwei Vari-ablen ab: Stellung von Schalter 1 und Schalter 2. Damit ergeben sich vier mögliche Zustände.

Vervollständige folgende Zustandstabelle:

Zustand Schalter 1 Schalter 2 Lampe 1 Lampe 2 Folgezustand bei T1 bei T2

1 offen offen aus aus

2

3

4

Zeichne ein Zustandsdiagramm:

Aufgaben:

1. Programmiere die vorbereitete Delphi-Anwendung. Sie enthält alle Bauteile, aber noch keine Zeile Code.

2. Gib der Schaltung noch einen dritten Schalter im zweiten Zweig. Erweitere dazu deine Zustandstabelle.

Page 5: 6. Zustandsorientierte Modellierung · Die Delphi-Oberfläche mit allen nötigen Objekten ist bereits fertig vorgege-ben, allerdings ohne jeglichen Programm-Code. Die Lehrer-Version

[email protected] Informatik 11 Seite 29

AutomatEin endlicher, deterministischer Automat

- hat eine feste Anzahl verschiedener Zustände.

- Ein Zustand ist Startzustand,

- (mind.) ein Zustand ist Endzustand.

- Er kennt eine Menge von möglichen Eingaben (Ereignisse).

- Eine Eingabe kann einen Zustandsübergang auslösen,

- dabei werden bestimmte Aktionen ausgeführt.

Diese Seite ist sinngemäß übernommen aus einer ppt-Datei von U. Freiberger.

Beispiel: einfacher Getränke-Automat: Dieser nimmt nur 1Euro- und 50Cent-Münzen. Cola/Fanta kosten €1,50. Wenn €1,50 eingeworfen sind, nimmt er keine Münze mehr an und gibt auf Tastendruck das gewünschte Getränk aus.

Zustandsübergangsdiagramm Eingabe / Aktion

hat 0,5 hat 1

hat 1,5

hat 0

Einwurf 1 / Anzeige 1,00

Einwurf 50 / Anzeige 0,50 Einwurf 50 / Anzeige 1,00

Einwurf 50 / Anzeige 1,50

Einwurf 1 / Anzeige 1,50Taste Cola /

Auswurf Cola, Anzeige 0,00

Taste Fanta / Auswurf Fanta, Anzeige 0,00

Zustandsübergangstabelle

Aktueller Zustand

Eingabe (Ereignis)

AktionFolgezu-

stand

hat 0Einwurf 50Einwurf 1

Anzeige 0,50Anzeige 1,00

hat 0,5hat 1

hat 0,5Einwurf 50Einwurf 1

Anzeige 1,00Anzeige 1,50

hat 1,0hat 1,5

hat 1 Einwurf 50 Anzeige 1,50 hat 1,5

hat 1,5Taste ColaTaste Fanta

Auswurf Cola, Anzeige 0,00Auswurf Fanta, Anzeige 0,00

hat 0

Page 6: 6. Zustandsorientierte Modellierung · Die Delphi-Oberfläche mit allen nötigen Objekten ist bereits fertig vorgege-ben, allerdings ohne jeglichen Programm-Code. Die Lehrer-Version

[email protected] Informatik 11 Seite 30

► Die folgenden vorbereiteten Delphi-Beispiele liegen in einer S-Version und einer L-Versi-on vor. Die Schüler-Version enthält eine klare Formulierung des Sachverhalts mit Aufga-benstellung. Die Delphi-Oberfläche mit allen nötigen Objekten ist bereits fertig vorgege-ben, allerdings ohne jeglichen Programm-Code.

Die Lehrer-Version ist eine fertige Delphi-Anwendung. Sie enthält aber außer dem Code:- Sachverhalt und Aufgabenstellung wie in der Schülerversion- die Lösung der gestellten Aufgabe in Form von Tabellen und Diagrammen.Der geschriebene Code hält sich sehr genau an diese Lösung. Diese L-Version ist im Unterricht sehr flexibel einsetzbar:- Zum kompletten Durchsprechen eines Beispiels von der Aufgabenstellung bis zum fertigen Programm.- Teilschritt als Aufgabe stellen, den Rest vorführen (z.B. nur Zustandsdiagramm erstel-len lassen, nur Zustandstabelle erstellen lassen)- Beim Umsetzen in Programm-Code kann der Lehrer bestimmte Teile einfach zeigen oder auch abschreiben lassen.- Fertige Anwendung vorführen als Zielvorgabe für eine Projektarbeit.

Fußgänger-Bedarfsampel

Page 7: 6. Zustandsorientierte Modellierung · Die Delphi-Oberfläche mit allen nötigen Objekten ist bereits fertig vorgege-ben, allerdings ohne jeglichen Programm-Code. Die Lehrer-Version

[email protected] Informatik 11 Seite 31

Getränkeautomat

Dieses Beispiel ist aus mehreren Gründen schwieriger als die bisherigen:

- Bisher hatten unsere Automaten nur eine einzige Variable z. Da dieser Automat viele Münzbeträge annimmt, sind die Zustände kaum mehr überschaubar, wenn wir alle denkbaren Beträge aufl isten. Deswegen unterscheiden wir nur zwischen Geld reicht / Geld reicht nicht. Dann brauchen wir aber eine Variable a, in der sich der Automat den aktuellen Betrag merkt.

- Die Aktionen, die durch die Ereignisse ausgelöst werden, sind umfangreicher. Wenn etwa eine Wahl-taste gedrückt wird, muss das richtige Getränk ausgegeben werden, der Betrag um 1,50 vermindert werden, das Restgeld zurückgegeben werden, der Betrag auf Null gesetzt und die Anzeige aktualisiert werden.

- Das Ereignis M (Münzwurf) in Zustand 1 führt nicht immer zum Folgezustand 2 sondern nur, wenn die Bedingung a+m ≥ 1,50 erfüllt ist.

► Lege dir in einer Zustandsübergangs-TabelleZustandsübergangs-Tabelle (Ereignis-Tabelle) zurecht, bei welchem Er-eignis welche Aktionen auszuführen sind. Da es vier Zustände gibt und vier Ereignisse, musst du dir 16 verschiedene Fälle durchdenken!

Weil die Aktionen hier komplexer sind als bei der Ampel, genügt es nicht mehr, einfach zu schreiben geheInZustand(...) und dabei die Attribut-Werte aus einer Tabelle zu lesen. Deswegen brauchst du die Zustandsübergangs-Tabelle dann beim Programmieren der Ereignis-Methoden MuenzeClick(), RückgabeTasteClick(), WahlCClick(), ...

► Zeichne das ZustandsdiagrammZustandsdiagramm.

► Erstelle anschließend eine Zustandstabelle, in der du dir die Zustandswerte der verschie-denen Objekte zurecht legst: Ausgabefach (leer/voll), Wahltasten (aktiv/nicht aktiv) usw.

Page 8: 6. Zustandsorientierte Modellierung · Die Delphi-Oberfläche mit allen nötigen Objekten ist bereits fertig vorgege-ben, allerdings ohne jeglichen Programm-Code. Die Lehrer-Version

[email protected] Informatik 11 Seite 32

Stoppuhr

Aufzugsteuerung Wolf-Ziege-Kohl