Fachkonzept - Schnittstelle

Was ist eine Schnittstelle?

Wenn man es wörtlich nimmt, ist eine Schnittstelle eine Stelle, an der ein System, das in Teile zerschnitten ist, zusammengesetzt werden kann.

Schnittstelle
Quelle: Wikimedia Commons

Technische Systeme benutzen häufig Schnittstellen. Jedes Buchse-Stecker-Paar verwendet eine Schnittstelle, an der die beiden Teilsysteme kontrolliert zusammengesetzt werden.

Schnittstelle
Quelle: Wikimedia Commons

Schnittstelle einer Klasse

Schnittstellen treten auch bei der Entwicklung von Software-Einheiten auf. Wenn eine Software-Einheit als Modul (Baustein) zur Verfügung gestellt wird, dann muss sehr genau beschrieben werden, welche Daten von diesem Modul verarbeitet werden können, welche Auswirkungen die Verarbeitung der Daten hat und welche Daten vom Modul wieder abgerufen werden können.

Die Schnittstelle einer Klasse liefert alle Informationen, die man benötigt, um die Klasse benutzen zu können. Hierzu gehört eine genaue Beschreibung aller (zugänglichen) Attribute und Methoden der Klasse. Für jedes Attribut benötigt man den erwarteten Datentyp, für jede Methode die Signatur (d. h. die genaue Festlegung der Parametertypen und bei Funktionen des Rückgabetyps) sowie eine Verhaltensbeschreibung.

Als Beispiel soll hier die Schnittstelle der Klasse Kartenstapel betrachtet werden.

Die Beschreibung der Attribute und die Signaturen der Methoden können dem folgenden Klassendiagramm entnommen werden.

Klassendiagramm

Durch die Wahl der Methodenbezeichner ist das Verhalten der Methoden bereits informell beschrieben. Oft reicht eine solche Beschreibung nicht aus. Dann muss das Verhalten des Konstruktors und der Methoden genauer beschrieben werden, z.B. so:

#-----------------------------------------------------------
# Kartenstapel
#-----------------------------------------------------------

from random import randint

class Kartenstapel(object):

    __slots__ = ('kartenListe')
    
    def __init__(self):

        """
        Die Methode __init__ erzeugt ein Kartenstapel-Objekt.
        Die 32 Karten werden hier in einer festen Reihenfolge
        in kodierter Form vorgegeben:
        'X-A' (Kreuz Ass), ..., 'K-7' (Karo 7)
        """

        self.kartenListe = [
            'X-A', 'X-K', 'X-D', 'X-B', 'X-10', 'X-9', 'X-8', 'X-7',
            'P-A', 'P-K', 'P-D', 'P-B', 'P-10', 'P-9', 'P-8', 'P-7',
            'H-A', 'H-K', 'H-D', 'H-B', 'H-10', 'H-9', 'H-8', 'H-7',
            'K-A', 'K-K', 'K-D', 'K-B', 'K-10', 'K-9', 'K-8', 'K-7'
            ]

    def mischen(self):

        """
        Die aktuell im Kartenstapel vorliegenden Karten werden neu angeordnet.
        Hierzu wird eine zufällig gewählte neue Reihenfolge bestimmt.
        """

        neueListe = []
        aktuelleAnzahl = len(self.kartenListe)
        while aktuelleAnzahl > 0:
            i = randint(0, aktuelleAnzahl-1)
            neueListe = neueListe + [self.kartenListe[i]]
            del self.kartenListe[i]
            aktuelleAnzahl = len(self.kartenListe)
        self.kartenListe = neueListe

    def istLeer(self):

        """
        Die Methode liefert als Ergebnis True / False,
        falls der Kartenstapel leer / nicht leer ist.
        """

        if len(self.kartenListe) > 0:
            ergebnis = False
        else:
            ergebnis = True
        return ergebnis

    def karteZiehen(self):

        """
        Die oberste (erste) Karte des Kartenstapel wird aus
        dem Kartenstapel entfernt und als Ergebnis zurückgegeben
        Ist der Kartenstapel leer, wird keine Karte gezogen
        und der Wert None zurückgegeben.
        """

        if len(self.kartenListe) > 0:
            gezogeneKarte = self.kartenListe[0]
            self.kartenListe = self.kartenListe[1:]
        else:
            gezogeneKarte = None
        return gezogeneKarte

    def getKartenListe(self):

        """
        Die noch auf den Kartenstapel befindlichen Karten werden
        als Liste von Karten zurückgegeben.
        """

        return self.kartenListe

    def setKartenListe(self, vorgegebeneKarten):

        """
        Die übergebene Kartenliste wird übernommen und bildet
        den neuen Vorrat an Karten im Kartenstapel.
        """

        self.kartenListe = vorgegebeneKarten

Quellen

X

Fehler melden

X

Suche