s n h m r u
i

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
#------------------------------------------------------------------------------
<p>class Ampel(object):</p>
<pre><code># ... 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
#------------------------------------------------------------------------------
<p>class Ampel(object):</p>
<pre><code># ... 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?

Suche

v
7.2.1.3.4.4 Version 3
Kopieren durch Anklicken

Rückmeldung geben