Version 3

Erzeugung der Ampeln

Wir betrachten weiterhin eine Straßenkreuzung mit vier Ampeln.

Ampelsystem

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.

Objektdiagramm

(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?

X

Fehler melden

X

Suche