Fachkonzept - Modularisierung

Baukastenprinzip

Modularisierung ist ein Prinzip, nach dem viele Systeme entwickelt werden. Die Idee besteht darin, das Gesamtsystem nach dem Baukastenprinzip aus Einzelbausteinen (den sogenannten Modulen) zusammenzusetzen. Modularisierung erleichtert es, komplexe Systeme zu entwickeln.

Bausteine
Quelle: Wikimedia Commons

Modularisierung wird nicht nur im täglichen Leben, sondern auch in vielen Bereichen der Informatik intensiv benutzt, u.a. auch bei der Entwicklung von Programmen.

Funktionen können also als einfache Umsetzungen des Modularisierungsprinzips angesehen werden. Wenn man Funktionen als eigenständige Verarbeitungseinheiten konzipiert, dann lassen sie sich als Bausteine verwenden und und bei der Entwicklung von Programmen nach dem Baukastenprinzip einsetzen. Man muss bei der Verwendung als Baustein nur die Schnittstelle der Funktion genau kennen.

Schnittstelle einer Funktion

Die Schnittstelle einer Funktion legt sämtliche Informationen fest, die man wissen muss, um diese Verarbeitungseinheit benutzen zu können.

Man kann diese Informationen aus dem Quelltext der Funktion erschließen. Oft will man aber nicht alle Details des Quelltextes genau analysieren, um an die erforderlichen Informationen heranzukommen, sondern die Funktion direkt nutzen. Es reicht dann, Antworten auf die folgenden Fragen zu haben:

Antworten auf diese Fragen liefern die Signatur der Funktion und eine Verhaltensbeschreibung.

Signatur einer Funktion

Die Signatur einer Funktion legt den Namen der Funktion fest sowie die Anzahl, Reihenfolge und Typen ihrer Parameter. Bei Funktionen mit Rückgaben wird zusätzlich der Typ des Rückgabewerts festgelegt.

Als Beispiel betrachten wir die Funktion anzahlTageImMonat mit folgender Funktionsdefinition:

def anzahlTageImMonat(monat, jahr):
    if monat in [1, 3, 5, 7, 8, 10, 12]:
        anzahl = 31
    elif monat in [4, 6, 9, 11]:
        anzahl = 30
    elif schaltjahr(jahr):
        anzahl = 29
    else:
        anzahl = 28
    return anzahl

Die Signatur wird im Wesentlichen durch den Funktionskopf beschrieben. Zu einer vollständigen Signatur fehlen noch Angaben über die Datentypen, die bei der Aktualisierung der Parameter zu beachten sind und der Datentyp, der beim zurückgegebenen Funktionswert zu erwarten ist. Diese fehlenden Angaben lassen sich im Black-Box-Diagramm wie folgt beschreiben.

Black-Box zur Funktion

Verhalten einer Funktion

Neben diesen formalen Aspekten muss man natürlich auch wissen, was die Funktion leistet und wofür die Parameter stehen (s. o.).

Die Funktion anzahlTageImMonat(monat, jahr) bestimmt für die übergebenen Werte für monat und jahr die Anzahl der Tage in diesem Monat im betreffenden Jahr.

Oft ist es günstig, das Verhalten einer Funktion / Prozedur anhand eines oder mehrerer Beispiele zu verdeutlichen.

anzahlTageImMonat(2, 2012) -> 29

Diese Informationen, die man zur Verwendung einer Funktion letztlich benötigt, lassen sich gut als Kommentar in eine Funktionsdefinition integrieren.

def anzahlTageImMonat(monat, jahr):
    
    # monat: Monat, codiert durch eine natürliche Zahl aus dem Bereich 1..12
    # jahr: Jahr als natürliche Zahl 
    # return: Anzahl der Tage des Monats im betreffenden Jahr
    # Beispiel: anzahlTageImMonat(2, 2012) -> 29
    
    if monat in [1, 3, 5, 7, 8, 10, 12]:
        anzahl = 31
    elif monat in [4, 6, 9, 11]:
        anzahl = 30
    elif schaltjahr(jahr):
        anzahl = 29
    else:
        anzahl = 28
    return anzahl
X

Fehler melden

X

Suche