EinModul (neutrum, das Modul[1]) ist imSoftware Engineering ein Baustein eines Softwaresystems, der bei derModularisierung entsteht, eine funktional geschlossene Einheit darstellt und einen bestimmten Dienst bereitstellt.[2]
Module sind charakteristisch für die Programmierung nach demProgrammierparadigma dermodularen Programmierung. Sie bestehen häufig aus thematisch zusammengehörigen Konstrukten und können weitere Module bzw. auch anders benannte Konstrukte (wieFunktion,Prozedur,Klasse, Konstanten und ggf. weiterer Programmierobjekte) enthalten. So ist die Zerlegung der Programmfunktionalität in einer Hierarchie möglich. Module können die in ihnen festgelegten Datenstrukturen und Methoden gegebenenfallsvererben bzw. fremden Modulen den Zugriff erlauben oder verbieten.
In den verschiedenenProgrammiersprachen undEntwicklungsumgebungen und deren zeitlicher Entwicklung haben sich zahlreiche unterschiedliche Implementierungsformen von Modulen (mit zum Teil unterschiedlichen Bezeichnungen) entwickelt. Auch wird der Ausdruck Modul häufigsynonym zu Begriffen wie Unterroutine, Prozedur,Unterprogramm, Programmteil, Programm-Modul[3][4] verwendet.
Als Speicherobjekt fürProgrammcode ist „Modul“ eine typisierende Bezeichnung für die Inhalte/Elemente in einerProgrammbibliothek. Sie enthalten alternativ unterschiedliche Arten von Programmcode (wieQuelltext,Zwischencode,Maschinenprogramm). Module in diesem Sinn könnenHauptprogramme oderUnterprogramme repräsentieren.
Zu unterscheiden ist ein Modul von einerKomponente, die in der Funktionalität eine Hierarchieebene höher angesiedelt ist und die (Basis-)Funktionalitäten von Modulen zu (fachspezifischen) Diensten kombiniert. Jedoch werden derartige Komponenten im Sprachgebrauch (zum Beispiel beiSAP[5]) manchmal ebenfalls „Module“ genannt.
Der Einsatz von Modulen entspricht dem Prinzip derKapselung (encapsulation); denn:
Außerhalb des Moduls bleiben die Verarbeitungsweise und evtl. Modul-eigene Daten verborgen (Prinzip desinformation 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 auchModularität). Beispielsweise hat die Größe der Module einen Einfluss auf dieFehlerdichte – sie ist am geringsten bei einer Modulgröße von 200 bis 400Lines of Code.[6]Entwurf und Definition von Modulen und Schnittstellen ist Teil derDesignphase in der Softwareentwicklung.
Das Modulkonzept wurde zuerst vonDavid Parnas publiziert.
Zahlreiche Programmiersprachen unterstützen das Modulkonzept durch integrierte Sprachmittel, beispielsweiseAda,COBOL,D, F,Fortran,Haskell,Java,ML,Modula-2,Oberon,Component Pascal undPL/I. Daneben sind Skriptsprachen wiePerl,Python,PHP undRuby zu nennen.
Die nachfolgenden Beispiele zeigen, dass Module in unterschiedlichen technischen Ausprägungen auftreten können:
Module sind nach den Prinzipien der modularen Programmierung „logische Teilblöcke“, in die die Aufgabenstellung einesComputerprogramms zerlegt wird. Das Modul ist häufig nur als individueller Codeabschnitt imQuelltext definiert, beiOOP kann dieser eineKlasse sein. In diesem Codeabschnitt/Modul können weitere Module enthalten sein oder als eigenständiges, getrennt kompiliertesUnterprogramm aufgerufen werden.
Eine spezielle Form von Modul/Modularisierung sind dieKlassen derobjektorientierten Softwareentwicklung:
Aus einem Quelltext erzeugt einCompiler oder einAssembler ein sogenanntesObjektmodul, dessen Anweisungen in Form vonMaschinencode in einerProgrammbibliothek abgelegt werden. Um ein Programm ausführen zu können, wird sein Objektcode mit dem Objektcode aller aufgerufenen Unterprogramme mit einem sog.Linker 'zusammengebunden', wobei u. a. die Einsprungadressen der Unterprogramme eingesetzt werden. Ergebnis ist einLademodul.
Variante A: Hauptprogramme und ihnen (= statisch) hinzugebundene Unterprogramme werden zu einem gemeinsamenausführbaren Programm als gemeinsames ‚Lademodul <Hauptprogramm>‘ in einerProgrammbibliothek abgestellt. Von dort aus können sie zum Beispiel überJCL-Aufrufe (EXEC <Pgm>) aufgerufen werden.
Variante B: Sollen Unterprogramme erst beim Programmlauf (= dynamisch) geladen werden, so wird aus ihrem Objektcode ein einzelnes ‚Lademodul <UPRO>‘ erzeugt, das durch einen Ladebefehl im aufrufenden (Haupt-)Programm über das Betriebssystem geladen und danach – wie bei statisch gebundenen Modulen – zur Verarbeitung aufgerufen wird.
Zusammenwirken von aufrufendem und aufgerufenem Programm(teil) im Detail: SieheUnterprogramm.
DieEntwicklungsumgebungMS Access versteht unter ‚Modul‘ eine Zusammenfassung aller Prozeduren bzw. Funktionen, die für ein Objekt, zum Beispiel ein Formular oder einen Bericht inVBA angelegt wurden. In solchen Modulen können weitere, untergeordnete Teilfunktionen angelegt und ausgeführt werden, zum Beispiel „Ereignisprozeduren“,[7] mit denen beim Ändern eines bestimmten Datenfelds in einem Formular eine individuelle Prüfung erfolgen soll. Zusätzlich können zum Beispiel Module für global gültige Daten (z. B. ‚GLOBAL DATA‘) oder für global ansprechbare Funktionen (etwa ‚GLOBAL CODE‘) angelegt werden.
In der Software vonSAP werden einzelne Anwendungen „Modul“ genannt.[8] Dies entspricht jedoch dem softwaretechnischen Modulbegriff nur im weitesten Sinn und gilt als Zusammenfassung von Funktionalität auf einem betriebswirtschaftlichen Level, den ein Anwender optional erwerben und nutzen kann.