Zu Modulen und Komponenten in anderem Zusammenhang siehe: Modul, Komponente.
Ein Modul oder eine Komponente ist ein abgeschlossener Teil eines Softwareprogramms 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.
Module bieten eine Kapselung (information hiding) durch die Trennung von Schnittstelle (Interface) und Implementierung:
- Das Interface eines Moduls definiert die Datenelemente, die als Input und Ergebnis der Verarbeitung durch das Modul benötigt werden.
- Die Implementierung enthält den tatsächlichen Programmcode.
Module sind typisch für die sogenannte prozedurale Programmierung: Ein Modul wird typischerweise als Funktion oder Unterprogramm 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 aufrufen - so ist eine Hierarchie von Programmaufrufen möglich.
Module sind aus mehreren Gründen von Bedeutung:
- Programmlogik wird wiederverwendbar, ohne daß Code redundant erstellt und gepflegt werden muss.
- Module können in vielen Programmiersprachen separat compiliert und in Form von Programmbibliotheken bereitgestellt werden.
- Grosse, komplexe Software-Programme können durch den Einsatz von Modulen gegliedert und strukturiert werden. Funktionalitäten können nach dem Baukastenprinzip eingebunden und für kommerzielle Anwendungen separat lizenziert werden.
- Mehrere Entwicklergruppen können unabhängig voneinander einzelne Module bearbeiten und testen
Entwurf und Definition von Modulen und Interfaces ist Teil der Design-Phase in der Software-Entwicklung.
Zu unterscheiden sind Module von den Klassen der objektorientierten Softwareentwicklung:
- Klassen können in Form von Objekten instantiiert 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 explizit das Modulkonzept, beispielsweise Ada, Cobol, D, F, Fortran, Haskell, ML und Modula-2. Daneben sind Skriptsprachen wie Perl, Python oder PHP zu nennen.
Ein Spezialfall von Modulen sind Plugins, die als Erweiterung einer bestehenden Softwarelösung eingeklinkt werden können. Sie implementieren bekannte Erweiterungsschnittstellen eines Programms und stellen dadurch Zusatzfunktionalitäten zur Verfügung.
Beispiel
Das Programm "The Gimp" hat ein modulares Konzept für die Bearbeitung von Grafiken.
Will man nun einen Effekt wie z.B. Weichzeichnen (blur) verwenden, so übergibt Gimp die Grafik an ein Unterprogramm, also das Modul bzw. Plugin. Dort wird das Bild entsprechend bearbeitet und nach Abschluss wieder an das Hauptprogramm zurückgegeben.
Die gesamte Verarbeitungslogik des Weichzeichnens ist im Unterprogramm gekapselt. Das Interface enthält als Daten die zu bearbeitende Grafik sowie die Stärke des Weichzeichnungseffekts.