Softwareobjekte zur Simulation von Ampeln
Rollenspiel zur Simulation eines Ampelsystems
Wir betrachten hier eine Straßenkreuzung mit 4 Ampeln.
Ziel ist es hier, dieses recht einfache Ampelsystem mit Hilfe von Softwarebausteinen zu simulieren. Bevor der Computer die Simulation übernehmen soll, spielen wir erst einmal die anstehende Datenverwaltung und Datenverarbeitung mit Personen durch.
Die Datenverwaltung und Datenverarbeitung wird für jede der 4 Ampeln von einer Person übernommen. Diese Person erhält hierzu einen Zettel, auf dem sie sich bestimmte Daten notieren kann.
Zusätzlich gibt es eine Person, die die Arbeit der Ampeln jeweils aktiviert.
Diese Person kann den Ampel-Personen
spezielle, vorab festgelegte Anweisungen erteilen.
Aufgabe 1
Damit das Rollenspiel funktioniert, müssen zuerst Vereinbarungen getroffen werden. Überlegt euch vorab,
was die Ampel-Personen
auf dem Zettel notieren sollen und welche Anweisungen die Ampel-Personen
ausführen können soll. Beachtet, dass die Ampeln zu Beginn in einen Ausgangszustand gebracht werden müssen.
Ein Bauplan für Ampel-Objekte
Welche Daten muss ein Software-Objekt zur Simulation einer Ampel verwalten?
Ein solches Software-Objekt Ampel muss sich in irgendeiner Form merken
,
in welcher Phase sich die simulierte Ampel aktuell befindet. Hierzu kann dieses Software-Objekt
z.B. die Zustände der drei Lampen registrieren.
Welche Operationen muss ein Software-Objekt zur Simulation einer Ampel ausführen können? Zum einen muss es eine Operation geben, mit der man ein Software-Objekt in einen Ampel-Anfangszustand versetzen kann. Zum anderen muss es eine Operation geben, mit der man das Weiterschalten der Ampel bewirken kann.
Das folgende Diagramm verdeutlicht, wie die Simulation einer Ampel mit einem Software-Objekt ablaufen könnte.
Wie in der realen Welt müssen Software-Objekte zur Simulation von Ampeln erst einmal erzeugt (gebaut) werden, bevor sie in Aktion treten können. Hierzu benötigt man eine Klassendeklaration - das ist ein Bauplan für Ampel-Objekte:
class Ampel(object):
def __init__(self):
self.lampeRot = False
self.lampeGelb = False
self.lampeGruen = False
def setLampen(self, startwertLampeRot, startwertLampeGelb, startwertLampeGruen):
self.lampeRot = startwertLampeRot
self.lampeGelb = startwertLampeGelb
self.lampeGruen = startwertLampeGruen
def schalten(self):
if (self.lampeRot, self.lampeGelb, self.lampeGruen) == (True, False, False):
self.lampeGelb = True
# elif ...
Beachte, dass die Klassendeklaration noch nicht ganz fertig erstellt ist.
Aufgabe 2
Ergänze zunächst die Klassendeklaration und speichere sie in einer Datei mit geeignetem Namen
(z. B. ampel.py
) ab.
Erzeugung, Aktivierung und Inspektion von Ampel-Objekten
Führe mit [Run][Run Module] die Deklaration der Klasse Ampel
einmal aus.
Beachte, dass beim Ausführen nur die Klassendeklaration übernommen wird.
Der folgende Python-Dialog zeigt, wie man mit Hilfe der neuen Klasse Ampel
ein Objekt ampel1
erzeugt und wie man dieses Objekt dann inspiziert und aktiviert.
>>>
>>> ampel1 = Ampel()
>>> ampel1.lampeRot
False
>>> ampel1.lampeGelb
False
>>> ampel1.lampeGruen
False
>>> ampel1.setLampen(True, False, False)
>>> ampel1.lampeRot
True
>>> ampel1.lampeGelb
False
>>> ampel1.lampeGruen
False
>>> ampel1.schalten()
>>> ampel1.lampeRot
True
>>> ampel1.lampeGelb
True
>>> ampel1.lampeGruen
False
Aufgabe 3
(a) Welche Anweisung erzeugt hier wohl das Objekt ampel1
? Wie inspiziert man
den Zustand der verwalteten Lampen? Wie aktiviert man das Objekt, so dass es eine der
in der Klasse festgelegten Operationen ausführt?
(b) Führe den gezeigten Python-Dialog aus und setze ihn so fort, dass ein gesamter Ampelzyklus durchlaufen wird. Kontrolliere so, ob deine vervollständigte Klassendeklaration eine Ampel korrekt beschreibt.
Aufgabe 4
Das Verhalten von Objekten kann man auch mit einem Programm testen.
class Ampel(object):
def __init__(self):
...
def setLampen(self, startwertLampeRot, startwertLampeGelb, startwertLampeGruen):
...
def schalten(self):
...
# Test
ampel1 = Ampel()
ampel1.setLampen(True, False, False)
print(ampel1.lampeRot, ampel1.lampeGelb, ampel1.lampeGruen)
(a) Führe das gezeigte Testprogramm aus und erkläre sein Verhalten.
(b) Das zu simulierende Ampelsystem (siehe oben) besteht aus 4 Ampeln. Ändere das Testprogramm so ab, dass ein kompletter Ampelzyklus des Ampelsystems simuliert wird.