Verwendung einer Klasse
Ampel-Klasse als Baustein
Wir werden uns hier mit folgender Frage beschäftigen: Welche Information benötigt man über eine Klasse, um sie als Baustein zur Erzeugung und Aktivierung von Software-Objekten benutzen zu können?
Wir betrachten hierzu wiederum die Simulation realer Ampeln.
Gegeben ist eine Datei ampel.py, in der sich eine Implementierung
einer Klasse Ampel
befindet.
Aufgabe 1
(a) Ein Nutzer der Klasse Ampel
hat das folgende Simulationsprogramm geschrieben:
from ampel import Ampel
a1 = Ampel('rot')
a2 = Ampel('gruen')
print('Ampel 1:', a1.getLampen())
print('Ampel 2:', a2.getLampen())
print()
while a1.getZustand() != 'gelb':
a1.schalten()
a2.schalten()
print('Ampel 1:', a1.getLampen())
print('Ampel 2:', a2.getLampen())
print()
Was muss der Nutzer alles über die Klasse Ampel
wissen,
um ein solches Testprogramm schreiben zu können?
(b) Der Entwickler der Klasse Ampel
veröffentlicht das folgende Klassendiagramm:
Welche Informationen über die Klasse Ampel
findet man hier?
Welche zur Nutzung der Klasse benötigten Informationen sind hier nicht dokumentiert.
(c) Der Entwickler der Klasse Ampel
legt eine Schnittstellenbeschreibung
zur Klasse vor.
Welche Informationen kann ein Nutzer hieraus entnehmen? Muss ein Nutzer auch die Details der Implementierung kennen, um die Klasse nutzen zu können?
#-----------------------------------------------------------
# Ampel
#-----------------------------------------------------------
class Ampel(object):
def __init__(self, anfangszustand):
"""nachher:
Ein Objekt der Klasse Ampel ist erzeugt.
Der Wert des Attributs zustand wird auf den übergebenen
Parameter gesetzt.
"""
def setZustand(self,z):
"""vorher:
Der Wert des Attributs zustand beschreibt eine Ampelphase.
nachher:
Dem Attribut zustand ist der Wert des übergebenen Parameters
z zugewiesen.
"""
def getZustand(self):
"""Die Funktion ändert den Objektzustand nicht.
Die Funktion liefert als Ergebnis den Wert von zustand zurück.
"""
def schalten(self):
"""vorher:
Der Wert des Attributs zustand beschreibt eine Ampelphase.
nachher:
Der Wert des Attributs zustand beschreibt die nächste Phase gemäß
des üblichen Ampelzyklus "rot -> rotgelb > gruen -> gelb -> rot".
"""
def getLampen(self):
"""Die Funktion ändert den Objektzustand nicht.
Die Funktion liefert als Ergebnis ein Tripel aus Wahrheitswerten,
die den zur Phase passenden Lampenzustand in der Reihenfolge
(Lampe-rot, Lampe-gelb, Lampe-grün) beschreibt.
"""