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.
"""
Schnittstellen
In einem komplexen System ist eine Schnittstelle die Verbindungsstelle zwischen zwei (oder mehr) Bestandteilen des Systems. Beispielsweise stellen die Sinnesorgane und Hände des Menschen eine Schnittstelle zwischen dem Gehirn und der Außenwelt dar; über die Schnittstelle erhält das Gehirn Informationen der Außenwelt, mit den Händen beeinflusst der Mensch die Außenwelt.
Ähnlich bezeichnet man Buchse-Stecker-Paare (z.B. ein USB-Kabel und der zugehörige USB-Anschluss) als Schnittstelle – hier werden zwei technische Systeme verbunden.
Aufgabe 2
(a) Erkläre, dass die in Aufgabe 1 genannte Schnittstellenbeschreibung der Klasse Ampel
eine ähnliche Funktion erfüllt wie die soeben genannten Schnittstellen.
(b) Welche Bestandteile einer Klasse sind für eine Schnittstellenbeschreibung der Klasse nötig?
(c) Fülle die unterste Box des Wissensspeichers aus.