Implementierung
Vom Klassendiagramm zur Implementierung
Wir gehen hier von der folgenden Modellierung der Klasse Automat
aus.
Aufgabe 1: Eine Implementierung selbst entwickeln
Entwickle eine Implementierung zur Klasse Automat
. Kontrolliere die
Implementierung mit einem Testdialog wie diem folgenden:
>>> a = Automat() >>> a.setZustaende(['ausgeschaltet','eingeschaltet']) >>> a.setEingaben(['ausschalten', 'einschalten']) >>> a.setAusgaben(['aus', 'an']) >>> a.setAutomatentafel([[('aus', 'ausgeschaltet'), ('an', 'eingeschaltet')], [('aus', 'ausgeschaltet'), ('an', 'eingeschaltet')]]) >>> a.setAnfangszustand('ausgeschaltet') >>> a.initialisieren() >>> a.getZustand() 'ausgeschaltet' >>> a.verarbeiten('einschalten') 'an' >>> a.getZustand() 'eingeschaltet' >>> a.verarbeiten('einschalten') 'an' >>> a.getZustand() 'eingeschaltet'
Aufgabe 2: Eine Implementierung testen
Gegeben ist die Implementierung in der Datei automat.py.
(a) Analysiere die Implementierung und erläutere die Bestandteile.
(b) Entwickle ein Testprogramm zum Getränkeautomaten (siehe ...).
from automat import Automat a = Automat() a.setZustaende(['z0','z1','z2','z3']) ... a.initialisieren() ...
Mit dem Testprogramm soll die folgende Testreihe erzeugt werden.
Zustand: z0 Eingabe: e1 Ausgabe: aNichts Zustand: z1 Eingabe: e1 Ausgabe: aNichts Zustand: z2 Eingabe: e2 Ausgabe: a2 Zustand: z2 ...
Bemerkung
Die Implementierungen benutzen ein einheitliches Schema, mit dem jeder endliche Automat simuliert
werden kann. Das Schema greift dabei die Präzisierung des Fachkonzepts endlicher Automat
zurück.
Präzisierung erweist sich hier also als Schlüssel, um eine ganze Problemklasse (Simulation
zustandsbasierter Systeme) einheitlich bearbeiten zu können.