Version 3
Erzeugung der Ampeln
Wir betrachten weiterhin eine Straßenkreuzung mit vier Ampeln.
Die Ampel
-Objekte wurden bisher unabhängig vom Ampelmanager
-Objekt
erzeugt. In der folgenden Implementierung wird das jetzt anders gemacht.
#------------------------------------------------------------------------------
# Ampel
#------------------------------------------------------------------------------
class Ampel(object):
# ... wie bisher
#------------------------------------------------------------------------------
# Ampelmanager
#------------------------------------------------------------------------------
class AmpelManager(object):
def __init__(self):
self.listeAmpeln = []
def erzeugeAmpeln(self):
ampelNS = Ampel('rot')
ampelOW = Ampel('gruen')
ampelSN = Ampel('rot')
ampelWO = Ampel('gruen')
self.listeAmpeln = [ampelNS, ampelOW, ampelSN, ampelWO]
def getListeAmpeln(self):
return self.listeAmpeln
def schalteAmpeln(self):
for ampel in self.listeAmpeln:
ampel.schalten()
#------------------------------------------------------------------------------
# Test
#------------------------------------------------------------------------------
ampelmanager = AmpelManager()
ampelmanager.erzeugeAmpeln()
for ampel in ampelmanager.getListeAmpeln():
print(ampel.getLampen())
print()
for i in range(8):
ampelmanager.schalteAmpeln()
for ampel in ampelmanager.getListeAmpeln():
print(ampel.getLampen())
print()
Aufgabe 1
(a) Erkläre anhand des folgenden Objektdiagramms, wie die Objektkonstellation in der oben gezeigten Implementierung erzeugt wird.
(b) Warum führt der folgende Aufruf zu einer Fehlermeldung?
>>> ampelmanager.ampelNS
Traceback (most recent call last):
File ...
ampelmanager.ampelNS
AttributeError: 'AmpelManager' object has no attribute 'ampelNS'
(c) Hier eine weitere Implementierung zum Ampelsystem:
#------------------------------------------------------------------------------
# Ampel
#------------------------------------------------------------------------------
class Ampel(object):
# ... wie bisher
#------------------------------------------------------------------------------
# Ampelmanager
#------------------------------------------------------------------------------
class AmpelManager(object):
def __init__(self):
self.listeAmpeln = []
def erzeugeAmpel(self, anfangszustand):
ampel = Ampel(anfangszustand)
self.listeAmpeln = self.listeAmpeln + [ampel]
def getListeAmpeln(self):
return self.listeAmpeln
def schalteAmpeln(self):
for ampel in self.listeAmpeln:
ampel.schalten()
#------------------------------------------------------------------------------
# Test
#------------------------------------------------------------------------------
ampelmanager = AmpelManager()
ampelmanager.erzeugeAmpel('rot')
ampelmanager.erzeugeAmpel('gruen')
ampelmanager.erzeugeAmpel('rot')
ampelmanager.erzeugeAmpel('gruen')
for ampel in ampelmanager.getListeAmpeln():
print(ampel.getLampen())
print()
for i in range(8):
ampelmanager.schalteAmpeln()
for ampel in ampelmanager.getListeAmpeln():
print(ampel.getLampen())
print()
Worin unterscheidet sich diese Implementierung von der oben gezeigten?