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 Themenübersicht | |
Zum Seitenanfang | |
Zur vorigen Seite | Zur nächsten Seite |
© 2004 LK 13 If und G. Kubitz | Hannah-Arendt-Gymnasium, Lengerich |