Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Softwareobjekte zur Simulation von Ampeln

Rollenspiel zur Simulation eines Ampelsystems

Wir betrachten hier eine Straßenkreuzung mit 4 Ampeln.

Kreuzung mit 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.

Rollenspiel

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.

Ampel

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.

X

Fehler melden

X

Suche