Automatensimulator

Download Report

Transcript Automatensimulator

Ein Automatensimulator
Klaus Becker
2004
2
Automatensimulator
Automatensimulator
Tag
AusAusAn
KB
Automatensimulator
3
KB
Teil 1
Endliche Automaten
4
Beispiel: Ampelsteuerung
Automatensimulator
Ziel ist es, eine steuerbare Ampel zu modellieren.
/1/ Die Ampel kann mit Hilfe eines Steuersignals auf Tag- und
Nachtbetrieb eingestellt werden.
/2/ Im Tagbetrieb durchläuft die Ampel die üblichen Phasen. Alle
Phasen sollen der Einfachheit halber gleich lang sein.
/3/ Im Nachtbetrieb soll nur die gelbe Lampe blinken.
KB
Zustandsbasierte Modellierung
Automatensimulator
5
KB
Erstellt mit Violet
Automatensimulator
6
KB
Zustandsbasierte Modellierung
7
Automat als Datenverarbeitungsmodell
Tag
Automatensimulator
Eingabe
Verarbeitung
AusAusAn
KB
Ausgabe
Automatensimulator
8
Präzisierung des Automatenbegriffs
Ein endlicher Automat ist ein Tupel A = (Z, za, E, A, , )
bestehend aus
- einer endlichen Menge Z von Zuständen,
- einem Anfangszustand zaZ,
- einer endlichen Menge E von Eingabezeichen,
- einer endlichen Menge A von Ausgabezeichen,
- einer Überführungsfunktion : Z x E  Z und
- einer Ausgabefunktion : Z x E  A.
Zustandsmenge:
Z = {rot, rotgelb, gruen, gelb, aus}
Anfangszustand:
za = gelb
Eingabemenge:
E = {Tag, Nacht}
Ausgabemenge:
A = {AnAusAus, AnAnAus, AusAusAn, ...}
Überführungsfunktion: : (rot, Tag)  rotgelb, ...
KB
Ausgabefunktion:
: (rot, Tag)  AnAnAus, ...
Automatensimulator
9
KB
Beispiel: Steuerung einer Klimaanlage
Aus der Bedienungsanleitung:
Die Klimaanlage hat drei Schaltstufen:
1. Aus: Es leuchtet keine Kontrollleuchte.
2. Halbe Kühlleistung: Eine Kontrollleuchte ist an.
3. Volle Kühlleistung: Beide Kontrollleuchten sind an.
Drücken Sie jeweils auf den Schalter, um zwischen den
Schaltstufen umzuschalten.
nach D. Jonietz: Lehrprobenentwurf
10
Übung
Automatensimulator
Beschreiben Sie das Verhalten der Klimaanlage mit Hilfe eines
endlichen Automaten. Geben Sie für Ihren Automaten auch die
einzelnen Automatenbestandteile (Zustandsmenge etc.) an.
KB
Automatensimulator
11
KB
Teil 2
Auftrag und Pflichtenheft
12
Auftrag
Automatensimulator
Es soll ein Programm zur Simulation von endlichen Automaten
entwickelt werden. Mit Hilfe dieses Programms soll der Benutzer
einen beliebigen Automaten festlegen und sein Verhalten
simulieren können.
KB
Automatensimulator
13
KB
Prototyp
14
Pflichtenheft
Automatensimulator
/0/ Der Benutzer kann einen beliebigen Automaten (in einer
vorgegebenen Sprache) festlegen.
/1/ Die Beschreibung des Automaten soll ein standardisiertes
Format besitzen. Wir orientieren uns an der Automatendefinition
und die benutzen die Sprache XML.
/2/ Die Automatenbeschreibung kann gespeichert und wieder
geladen werden.
/3/ Zur Simulation des Automatenverhaltens kann der Benutzer
beliebige Eingaben vorgeben und den Automaten diese Eingabe
verarbeiten lassen. Das Programm zeigt dann die vom
Automaten erzeugte Ausgabe an.
/4/ Der jeweilige aktuelle Zustand des Automaten soll dem
Benutzer angezeigt werden.
KB
15
Exkurs: XML
Automatensimulator
XML (Abk. für extended markup language) ist eine Metasprache
zur Beschreibung von Auszeichnungssprachen für allgemeine
Dokumente. XML wurde 1996 entworfen und 1998 eingeführt.
XML ist aus SGML und HTML entstanden. (Duden Informatik)
KB
XML erlaubt es, neue Sprachen zu entwerfen, z. B. um eine
Dokumentenstruktur festzulegen.
<?xml version="1.0"?>
<automat name="Ampel">
<zustandsmenge>
<zustand>rot</zustand>
<zustand>rotgelb</zustand>
...
</zustandsmenge>
...
</automat>
Informationen zu XML: http://selfhtml.teamone.de/xml/
16
Exkurs: XML
Die Informationen in einem XML-Dokument werden mit Hilfe von
sog. Tags eingeschlossen. Z. B.:
Automatensimulator
<zustand>rot</zustand>
KB
Ein Tag kann mit Attributen versehen werden. Z. B.:
<automat name="Ampel">
Das gesamte XML-Dokument ist hierarchisch aus Tags und
Texten aufgebaut.
<?xml version="1.0"?>
<automat name="Ampel">
<zustandsmenge>
<zustand>rot</zustand>
<zustand>rotgelb</zustand>
...
</zustandsmenge>
...
</automat>
Automatensimulator
17
KB
Automatenbeschreibung mit XML
<?xml version="1.0"?>
<automat name="Ampel">
<zustandsmenge>
<zustand>rot</zustand>
<zustand>rotgelb</zustand>
...
</zustandsmenge>
<anfangszustand>
<zustand>gelb</zustand>
</anfangszustand>
<eingabemenge>
<eingabe>Tag</eingabe>
<eingabe>Nacht</eingabe>
</eingabemenge>
<ausgabemenge>
<ausgabe>AusAusAus</ausgabe>
<ausgabe>AnAusAus</ausgabe>
...
</ausgabemenge>
...
Automatensimulator
18
KB
Automatenbeschreibung mit XML
...
<ueberfuehrungsfunktion>
<delta>rot,Tag,rotgelb</delta>
<delta>rot,Nacht,aus</delta>
<delta>rotgelb,Tag,gruen</delta>
<delta>rotgelb,Nacht,aus</delta>
<delta>gruen,Tag,gelb</delta>
<delta>gruen,Nacht,aus</delta>
...
</ueberfuehrungsfunktion>
<ausgabefunktion>
<lambda>rot,Tag,AnAnAus</lambda>
<lambda>rot,Nacht,AusAusAus</lambda>
<lambda>rotgelb,Tag,AusAusAn</lambda>
<lambda>rotgelb,Nacht,AusAusAus</lambda>
<lambda>gruen,Tag,AusAnAus</lambda>
<lambda>gruen,Nacht,AusAusAus</lambda>
<lambda>gelb,Tag,AnAusAus</lambda>
...
</ausgabefunktion>
</automat>
Automatensimulator
19
KB
Vereinfachte Automatenbeschreibung
<?xml version="1.0"?>
<automat name="Ampel">
<zustandsmenge>
<zustand>rot</zustand>
<zustand>rotgelb</zustand>
...
</zustandsmenge>
<anfangszustand>
<zustand>gelb</zustand>
</anfangszustand>
<eingabemenge>
<eingabe>Tag</eingabe>
<eingabe>Nacht</eingabe>
</eingabemenge>
linksbündig
<ausgabemenge>
<ausgabe>AusAusAus</ausgabe>
<ausgabe>AnAusAus</ausgabe>
...
</ausgabemenge>
...
Kann
festgelegt
werden
Muss
festgelegt
werden
Automatensimulator
20
KB
Vereinfachte Automatenbeschreibung
...
<ueberfuehrungsfunktion>
<delta>rot,Tag,rotgelb</delta>
<delta>rot,Nacht,aus</delta>
<delta>rotgelb,Tag,gruen</delta>
<delta>rotgelb,Nacht,aus</delta>
<delta>gruen,Tag,gelb</delta>
<delta>gruen,Nacht,aus</delta>
...
</ueberfuehrungsfunktion>
<ausgabefunktion>
<lambda>rot,Tag,AnAnAus</lambda>
<lambda>rot,Nacht,AusAusAus</lambda>
<lambda>rotgelb,Tag,AusAusAn</lambda>
<lambda>rotgelb,Nacht,AusAusAus</lambda>
<lambda>gruen,Tag,AusAnAus</lambda>
Trennung mit Komma,
<lambda>gruen,Nacht,AusAusAus</lambda>
keine Leerzeichen,
<lambda>gelb,Tag,AnAusAus</lambda>
alle Informationen in eine Zeile
...
</ausgabefunktion>
</automat>
21
Übung
Automatensimulator
Beschreiben Sie den Klimaanlage-Automaten mit Hilfe der
vereinfachten Automatensprache. Diese Automatenbeschreibung
wird später zu Testzwecken benötigt.
KB
22
Übung
Automatensimulator
Die vorgestellte XML-Beschreibung eines Automaten kann auf
verschiedene Weisen modifiziert und verbessert werden.
KB
- Die Tag-Bezeichner sind recht lang (viel Schreibarbeit). Man
könnte hier geeignete Abkürzungen einführen.
- Die Überführungs- und Ausgabefunktion können gemeinsam
erfasst werden.
- Die durch das Komma dargestellte innere Struktur der <delta>und <lambda>-Einheiten sollte durch XML selbst erfasst werden.
Entwickeln Sie einen geeigneten Vorschlag.
Automatensimulator
23
KB
Teil 3
Objektorientierte Analyse
24
Zielsetzung der OOA
Automatensimulator
Modellierung des Problembereichs („Miniwelt“), der vom zu
entwickelnden Informatiksystem erfasst werden soll.
KB
- Unabhängig von der späteren Implementierung wird die
Miniwelt mit Hilfe von Objekten, Klassen sowie deren
Beziehungen beschrieben.
- Die Miniwelt wird dabei soweit abstrahiert, dass alle für den
Auftraggeber relevanten Bestandteile des Problembereichs
abgebildet sind.
- Das Ergebnis einer OOA ist also eine präzise, abstrahierende
Beschreibung der Miniwelt.
25
Beschreibung der Miniwelt
Automatensimulator
Tag
KB
AusAusAn
26
Beschreibung der Miniwelt
Automatensimulator
Tag
KB
rotgelb
...
<?xml version="1.0"?>
<automat name="Ampel">
<zustandsmenge>
<zustand>rot</zustand>
<zustand>rotgelb</zustand>
...
</zustandsmenge>
<anfangszustand>
<zustand>gelb</zustand>
</anfangszustand>
<eingabemenge>
<eingabe>Tag</eingabe>
<eingabe>Nacht</eingabe>
</eingabemenge>
<ausgabemenge>
<ausgabe>AusAusAus</ausgabe>
<ausgabe>AnAusAus</ausgabe>
...
Automatensimulator
27
KB
Übung
Überlegen Sie sich, wie ein Objekt zur Beschreibung eines
Automaten strukturiert sein könnte. Beschreiben Sie die
Zuständigkeiten dieses Objektes und modellieren Sie seine
Attribute und Methoden. Stellen Sie die Ergebnisse mit Hilfe
geeigneter Diagramme dar.
28
Der Automat als Objekt
Automatensimulator
Zuständigkeiten:
- verwaltet die Automatenbeschreibung
- verwaltet den aktuellen Zustand
KB
Dienste:
- in den Anfangszustand setzen
- zu einer Eingabe eine Ausgabe bestimmen und zur Verfügung
stellen
- zu einer Eingabe den neuen Zustand setzen
- den aktuellen Zustand zur Verfügung stellen
Erste Objektdiagramme
29
Automatensimulator
Zuständigkeiten:
- verwaltet die Automatenbeschreibung
- verwaltet den aktuellen Zustand
KB
Version 1:
Version 2:
Automatensimulator
30
KB
Ein erstes Klassendiagramm
Dienste:
- in den Anfangszustand setzen
- zu einer Eingabe eine Ausgabe bestimmen und zur Verfügung
stellen
- zu einer Eingabe den neuen Zustand setzen
- den aktuellen Zustand zur Verfügung stellen
- die Beschreibung festlegen
Automatensimulator
31
KB
Teil 4
Objektorientiertes Design
32
Zielsetzung des OOD
Automatensimulator
Anpassung des OOA-Modells an die Rahmenbedingungen des zu
erstellenden Systems
KB
- Genaue Spezifikation der Attribute (Datentypen) und Methoden
(Parameter und ihre Datentypen)
- Modellierung der Benutzungsoberfläche
Automatensimulator
33
KB
Spezifikation der Attribute und Methoden
Datentypen:
- Eingaben, Ausgaben und Zustände werden als Zeichenketten
dargestellt.
- Die Automatenbeschreibung wird als Liste von Zeichenketten
dargestellt.
Automatensimulator
34
KB
Benutzungsoberfläche
Ereignisbehandlung
Automatensimulator
35
KB
Benutzeraktion
Programmreaktionen
Mausklick auf den
„Laden“-Button
Die Automatenbeschreibung wird in das MemoFeld geladen.
Mausklick auf den
„Speichern“-Button
Die Automatenbeschreibung im Memo-Feld wird
gespeichert.
Mausklick auf den
„Löschen“-Button
Das Memo-Feld wird gelöscht. Der Automat hat
keine Beschreibung mehr.
Mausklick auf den
„Übernehmen“-Button
Der Automat übernimmt die Automatenbeschreibung.
Mausklick auf den
„Initialisieren“-Button
Der Automat wird in den Anfangszustand gesetzt.
Mausklick auf den
„Verarbeiten“-Button
Der Automat übernimmt die Eingabe, berechnet
die Ausgabe und geht in den neuen Zustand über.
Die Ausgabe und der neue Zustand werden
angezeigt.
Automatensimulator
36
KB
Klasse TGUI
37
Übung
Automatensimulator
Erstellen Sie mit Hilfe von UMLEd ein Klassendiagramm zur
Klasse TAutomat mit integrierter Dokumentation.
KB
Automatensimulator
38
KB
Automatensimulator
39
KB
Teil 5
Implementierung und Testen
Automatensimulator
40
Beispiel: TAutomat.anfangszustand
<?xml version="1.0"?>
<automat name="Ampel">
<anfangszustand>
<zustand>gelb</zustand>
</anfangszustand>
...
ALGORITHMUS anfangszustand
Suche die Zeile <anfangszustand>
Gehe zur nächsten Zeile
Bestimme die Zeichenkette zwischen den Tags
Weise „zustand“ den entsprechenden Wert zu
KB
41
Exkurs: Stringverarbeitung mit Delphi
function Length(S: string): integer;
Automatensimulator
Beschreibung:
Length gibt die Anzahl der im angegebenen String vorhandenen Zeichen zurück.
Beispiel:
L := Length('<zustand>') // L  9
function Pos(Substr: string; S: string): integer;
Beschreibung:
Pos sucht in dem String S nach dem Teilstring Substr. Wird der Teilstring
gefunden, gibt Pos den Integer-Index des ersten Zeichens von Substr in S
zurück. Die Groß/Kleinschreibung wird von Pos nicht berücksichtigt. Ist Substr
nicht vorhanden, wird der Wert 0 zurückgegeben.
Beispiele:
Position := Pos('</z>', '<z>test</z>')
Position := Pos('Hi', 'Delphibuch')
Position := Pos('ihi', 'Delphibuch')
KB
// Position  8
// Position  5
// Position  0
42
Exkurs: Stringverarbeitung mit Delphi
function Copy(S; Index, Count: Integer): string;
Automatensimulator
Beschreibung:
S ist ein Ausdruck des Typs String. Index und Count sind Integer-Ausdrücke.
Copy gibt einen Substring zurück, das Count Zeichen ab S[Index] enthält.
KB
Ist Index größer als die Länge von S, gibt Copy einen leeren String zurück.
Gibt Count mehr Zeichen an, als verfügbar sind, werden nur die Zeichen von
S[Index] bis zum Ende von S zurückgegeben.
Beispiele:
Hilf := Copy('<z>test</z>',8,4)
Hilf := Copy('<z>test</z>',4,4)
Hilf := Copy('<z>test</z>',8,6)
// Hilf  '</z>'
// Hilf  'test'
// Hilf  '</z>'
43
Exkurs: Die Delphi-Klasse TStringList
TStringList verwaltet eine Liste, die Strings enthält.
Automatensimulator
Beschreibung:
KB
TStringList-Objekte dienen zum Speichern und Verwalten von String-Listen.
TStringList implementiert die von TStrings eingeführten abstrakten
Eigenschaften und Methoden und führt selbst neue Eigenschaften, Ereignisse
und Methoden ein, die
- die in der Liste enthaltenen Strings sortieren.
- doppelte Strings aus sortierten Listen entfernen.
- auf Änderungen des Listeninhalts reagieren.
(Quelle: Delphi-Hilfe)
Exkurs: Die Delphi-Klasse TStringList
Automatensimulator
44
<?xml version="1.0"?>
<automat name="Ampel">
<zustandsmenge>
<zustand>rot</zustand>
<zustand>rotgelb</zustand>
<zustand>gruen</zustand>
<zustand>gelb</zustand>
<zustand>aus</zustand>
</zustandsmenge>
<anfangszustand>
<zustand>gelb</zustand>
</anfangszustand>
...
beschreibung[0]: '<?xml version="1.0"?>'
beschreibung[1]: '<automat name="Ampel">'
beschreibung[2]: '<zustandsmenge>'
...
KB
Zugriff auf die
Listenelemente
45
Exkurs: Die Delphi-Klasse TStringList
Attribut
0
'<?xml version="1.0"?>'
1
'<automat name="Ampel">'
2
'<zustandsmenge>'
Automatensimulator
...
beschreibung.Count-1
...
'</automat>'
procedure Add(S: string);
- fügt die Zeichenkette S am Ende der Liste an
procedure Clear;
- löscht die gesamte Liste
Methoden
procedure Delete(Index: Integer);
- löscht nur den Eintrag mit dem übegebenen Index
procedure Insert(Index: Integer; S: string);
- fügt die Zeichenkette S an die durch Index beschriebenen Zeile in der Liste ein
procedure LoadFromFile(FileName: string);
procedure SaveToFile(FileName: string);
KB
- lädt eine Liste aus einer Datei / speichert eine Liste in eine Datei
46
Übung
Automatensimulator
Implementieren Sie zunächst die Klasse TAutomat gemäß der
modellierten Klassenbeschreibung.
KB
Testen Sie das entwickelte System. Zum Testen soll zum einen
der vorgefertigte Ampelautomat, zum anderen ein selbst
erstellter Klimaanlagenautomat benutzt werden.
Automatensimulator
47
KB
Teil 6
Erweiterung und Überarbeitung
Verarbeitung von Eingabefolgen
48
Tag
Tag
Nacht
...
AnAusAus
AnAnAus
AusAusAn
AusAusAus
...
Automatensimulator
Tag
KB
Verarbeitung von Eingabefolgen
49
Automatensimulator
Tag
Tag
Tag
Nacht
...
KB
TStringList
gelb
TStringList
AnAusAus
AnAnAus
AusAusAn
AusAusAus
...
<?xml version="1.0"?>
<automat name="Ampel">
<zustandsmenge>
<zustand>rot</zustand>
<zustand>rotgelb</zustand>
...
</zustandsmenge>
<anfangszustand>
<zustand>gelb</zustand>
</anfangszustand>
<eingabemenge>
<eingabe>Tag</eingabe>
<eingabe>Nacht</eingabe>
</eingabemenge>
<ausgabemenge>
<ausgabe>AusAusAus</ausgabe>
<ausgabe>AnAusAus</ausgabe>
...
TStringList
50
Aufgabe
Automatensimulator
Erweitern Sie den Automatensimulator um die Möglichkeit, ganze
Eingabefolgen zu verarbeiten.
KB
51
Aufgabe
Automatensimulator
Der entwickelte Automatensimulator arbeitet recht ineffizient.
Woran liegt das? Wie könnte man diesen Mangel beheben?
KB
Lösungsvorschlag von K. Merkert:
http://hsg.region-kaiserslautern.de/faecher/inf/material/xml/delphi/xmlautomat.zip