Modul (Software)
Ein Modul (neutrum, das Modul[1]) ist eine abgeschlossene funktionale Einheit einer Software, bestehend aus einer Folge von Verarbeitungsschritten und Datenstrukturen. Inhalt eines Moduls ist häufig eine wiederkehrende Berechnung oder Bearbeitung von Daten, die mehrfach durchgeführt werden muss.
In diesem Sinn sind die Ausdrücke Modul und Unterprogramm gleichbedeutend. Ein Modul wird zum Beispiel als Funktion oder Prozedur aufgerufen, führt eine Reihe von Verarbeitungsschritten durch und liefert als Ergebnis Daten zurück an das aufrufende Programm. Ein Modul kann selbst weitere Module einbinden (und aufrufen) - so ist eine Hierarchie von Programmaufrufen möglich. Die in Modulen festgelegten Datenstrukturen und Methoden können gegebenenfalls vererbt und von anderen Modulen geerbt werden. Module sind daher ein wesentliches Element in der strukturierten und objektorientierten Programmierung und das charakteristische Wesensmerkmal für das Programmierparadigma der modularen Programmierung.
Nicht zu verwechseln ist ein Modul mit einer Komponente, die in der Funktionalität eine Hierarchieebene höher angesiedelt ist und hier funktionale Module zu Diensten zusammenfasst. Auch kennen manche Entwicklungsumgebungen oder Programmiersprachen (zum Beispiel VBA[2]) den Ausdruck „Modul“ nicht im Sinne von ‚aufrufbares Unterprogramm‘, sondern verstehen darunter ein Sammelobjekt, in dem mehrere und unterschiedliche Bestandteile der Software (wie Funktionen, Prozeduren, Datendeklarationen usw.) enthalten sein können.
Einsatz/Verwendung
Der Einsatz von Modulen entspricht dem Prinzip der Kapselung (encapsulation); denn:
- Die Schnittstelle eines Moduls definiert nur die Daten, die das Modul als Eingabe und Ergebnis der Verarbeitung braucht/liefert.
- Die Implementierung enthält den tatsächlichen Programmcode.
Die Verarbeitungsweise und die Daten innerhalb des Moduls bleiben außerhalb des Moduls verborgen (Prinzip des information hiding).
Große, komplexe Programme können durch den Einsatz von Modulen gegliedert und strukturiert werden. Dies kann in vielerlei Hinsicht von Nutzen sein (vergleiche auch Modularität):
- Die Programmlogik wird wiederverwendbar, ohne dass Code redundant erstellt und gepflegt werden muss. Codewiederholungen werden somit vermieden.
- Module können in vielen Programmiersprachen separat kompiliert und in Form von Programmbibliotheken bereitgestellt werden.
- Funktionalitäten können nach dem Baukastenprinzip eingebunden und für kommerzielle Anwendungen separat lizenziert werden.
- Mehrere Entwickler(gruppen) können unabhängig voneinander einzelne Module erstellen und testen.
Entwurf und Definition von Modulen und Schnittstellen ist Teil der Designphase in der Softwareentwicklung.
Zu unterscheiden sind Module von den Klassen der objektorientierten Softwareentwicklung:
- Von Klassen können Exemplare in Form von Objekten erzeugt (instanziiert) werden,
- Klassen können Eigenschaften an andere Klassen vererben,
- Polymorphismus erlaubt es Klassen, Eigenschaften zur Laufzeit zu verändern – Beziehungen zwischen Modulen sind statisch.
Das Modulkonzept wurde zuerst von David Parnas publiziert.
Zahlreiche Programmiersprachen unterstützen das Modulkonzept durch integrierte Sprachmittel, beispielsweise Ada, COBOL, D, F, Fortran, Haskell, Java, ML, Modula-2, Oberon, Component Pascal und PL/I. Daneben sind Skriptsprachen wie Perl, Python, PHP und Ruby zu nennen.