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

Version 1

Ein Ampelmanager zur Steuerung der Ampeln

Der Verkehr in einer Straßenkreuzung soll mit vier Ampeln gereget werden.

Ampelsystem

Bei der Realisierung des Ampelsystems muss verhindert werden, dass alle Ampeln auf "grün" stehen.

Ein zusätzliches Objekt ampelmanager einer neuen Klasse Ampelmanager soll diese Aufgabe übernehmen. Damit das Objekt ampelmanager die Ampel-Objekte gezielt aktivieren kann, wird das Objekt ampelmanager mit Zeigern auf die Ampel-Objekte versehen.

Objektdiagramm

Die folgende Deklaration zeigt, wie man eine solche Objektkonstallation implementiert.

#------------------------------------------------------------------------------
# Ampel
#------------------------------------------------------------------------------

class Ampel(object):

    # ... wie bisher

#------------------------------------------------------------------------------
# Ampelmanager
#------------------------------------------------------------------------------

class AmpelManager(object):
    def __init__(self):
        self.ampel1 = None
        self.ampel2 = None
        self.ampel3 = None
        self.ampel4 = None

    def schalteAmpeln(self):
        self.ampel1.schalten()
        self.ampel2.schalten()
        self.ampel3.schalten()
        self.ampel4.schalten()

#------------------------------------------------------------------------------
# Test
#------------------------------------------------------------------------------

ampelNS = Ampel('rot')          #  1
ampelOW = Ampel('gruen')        #  2
ampelSN = Ampel('rot')          #  3
ampelWO = Ampel('gruen')        #  4
ampelmanager = AmpelManager()   #  5
ampelmanager.ampel1 = ampelNS   #  6
ampelmanager.ampel2 = ampelOW   #  7
ampelmanager.ampel3 = ampelSN   #  8
ampelmanager.ampel4 = ampelWO   #  9
print(ampelNS.getLampen())
print(ampelOW.getLampen())
print(ampelSN.getLampen())
print(ampelWO.getLampen())
print()
for i in range(8):
    ampelmanager.schalteAmpeln()
    print(ampelNS.getLampen())
    print(ampelOW.getLampen())
    print(ampelSN.getLampen())
    print(ampelWO.getLampen())
    print()

Aufgabe 1

(a) Die Anweisungen im Testprogramm sind durchnummeriert. Welche dieser Anweisungen werden benutzt, um die Objekte zu erzeugen und zu verbinden? Gib hierzu genau an, wie die oben gezeigte Objektkonstellation hier Schritt für Schritt erzeugt wird.

(b) Die Anweisungen # 1, ..., # 9 (ab Zeile 30) berücksichtigen nicht das Prinzip der Datenkapselung. Wie könnte man dies beheben?

Verknüpfung der Objekte

Hier eine weitere Implementierung der Klasse Ampelmanager:

#------------------------------------------------------------------------------
# Ampel
#------------------------------------------------------------------------------

class Ampel(object):

    # ... wie bisher

#------------------------------------------------------------------------------
# Ampelmanager
#------------------------------------------------------------------------------

class AmpelManager(object):
    def __init__(self, a1, a2, a3, a4):
        self.ampel1 = a1
        self.ampel2 = a2
        self.ampel3 = a3
        self.ampel4 = a4

    def schalteAmpeln(self):
        self.ampel1.schalten()
        self.ampel2.schalten()
        self.ampel3.schalten()
        self.ampel4.schalten()

Aufgabe 2

(a) Schaue dir den Konstruktor der Klasse Ampelmanager genau an. Wozu dienen die Parameter a1, ..., a4?

(b) Entwickle ein Testprogramm zur veränderten Implementierung.

X

Fehler melden

X

Suche