Version 1
Ein Ampelmanager zur Steuerung der Ampeln
Der Verkehr in einer Straßenkreuzung soll mit vier Ampeln gereget werden.
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.
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.