i

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.

Ampelzustände

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:

Klassendiagramm Ampel

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.

Suche

v
7.2.1.2.5
www.inf-schule.de/oop/python/ampel/modularisierung/erkundung_verwendung
www.inf-schule.de/7.2.1.2.5
www.inf-schule.de/@/page/5VGl2zfvZO1mD6O0

Rückmeldung geben