Beispieltext
1. Beispiel:
Automat, der prüft, ob eine Dualzahl eine ungerade Anzahl von Einsen enthält
1.1 Aufteilung des Automaten in 3 Klassen
TTestAnwendung: konkrete GUI
TErkennenderAutomat: allgemeiner erkennender Automat
TTestAutomat: konkreter Automat als Unterklasse zu TErkennenderAutomat
1.2 Umsetzung der Bestandteile eines Automaten in das Programm
Aktueller Zustand: - Attribut von TErkennenderAutomat vom Typ Zahl
- erhält Startwert in der Methode Init von TTestAutomat
- wird durch die Übergangsfunktion im Programmverlauf neu gesetzt
Eingabealphabet: - Attribut von TErkennenderAutomat vom Typ Zahlenmenge
- erhält Startwert in der Methode Init von TTestAutomat
Zustandsmenge: - Attribut von TErkennenderAutomat vom Typ Zahlenmenge
- erhält Startwert in der Methode Init von TTestAutomat
Finalzustände: - Attribut von TErkennenderAutomat vom Typ Zahlenmenge
- erhält Startwert in der Methode Init von TTestAutomat
Übergangsfunktion: - Methode von TTestAutomat
- setzt je nach aktuellem Zustand und Eingabeparameter den aktuellen Zustand neu
Akzeptanzprüfung: - Methode von TErkennenderAutomat
- überprüft, ob der aktuelle Zustand in der Menge der Finalzustände enthalten ist
1.3 UML-Diagramm

1.4 Das fertige Programm ...
... befindet sich in der Datei 20040919_ErkennenderAutomat_Lucas.zip.
2. Beispiel
Automat, der in einem vorgegebenen Text die Silbe "man" erkennt
2.1 Aufteilung des Automaten in 3 Klassen
TManAnwendung: konkrete GUI
TErkennenderAutomat: allgemeiner erkennender Automat
TManAutomat: konkreter Automat als Unterklasse zu TErkennenderAutomat
2.2 Unterschiede zu Beispiel 1
- Eingabealphabet umfasst alle Zeichen und muss somit nicht als Attribut gesetzt werden
- Zustände sind nicht mehr vom Typ Zahl, sondern vom Typ TZustand, dessen mögliche Werte in der Typendeklaration festgelegt sind
- Zustandsmenge und Menge der Finalzustände sind vom Typ Menge von TZustand
- aus der Natur dieses Automaten folgt eine umfangreichere Übergangsfunktion in der Methode GibEin
2.3 UML-Diagramm

2.4 Das fertige Programm ...
... befindet sich in der Datei 20040920_ManAutomat_Lucas.zip.
Hier ein paar Anmerkungen zur Realisierung der Übergangsfunktion.
Der name 'GibEin' für die Übergangsfunktion ist dabei etwas verwirrend.
Es werden alle denkbaren Zustände mit Hilfeeiner CASE-Anweisung durchlaufen. Für jeden Zustand werden dann alle möglichen Eingaben ebenfalls mit einer CASE-Anweisung durchlaufen |
Programmcode:
procedure TManAutomat.GibEin (pEingabe: Char);
(* Die Bezeichnung 'GibEin
für die Übergangsfunktion ist unglücklich *)
begin
case AktuellerZustand of
z0: begin
case pEingabe of
'm': AktuellerZustand := zm;
end;
end;
zm: begin
case pEingabe of
'm': AktuellerZustand := zm;
'a': AktuellerZustand := zma;
else
AktuellerZustand := z0;
end;
end;
zma:begin
case pEingabe of
'm': AktuellerZustand := zm;
'n': AktuellerZustand := zman;
else
AktuellerZustand := z0;
end;
end;
end;// of case
end; // of proc
|
| Zur
nächsten Seite
|
| © 2004 LK 13 If und G. Kubitz | Hannah-Arendt-Gymnasium, Lengerich |