Definition

Strukturierte Programmierung (modulare Programmierung)

Was ist strukturierte Programmierung (modulare Programmierung)?

Strukturierte Programmierung oder modulare Programmierung ist ein Programmierparadigma, das die Erstellung von Programmen mit lesbarem Code und wiederverwendbaren Komponenten erleichtert. Alle modernen Programmiersprachen unterstützen strukturierte Programmierung, aber die Mechanismen der Unterstützung – wie die Syntax der Programmiersprachen – variieren.

Wenn Module oder Codeelemente aus einer Bibliothek wiederverwendet werden können, ist es auch möglich, strukturierten Code mit Modulen zu erstellen, die in verschiedenen Sprachen geschrieben wurden, solange sie eine gemeinsame Modulschnittstelle oder eine Programmierschnittstellenspezifikation einhalten können. Wenn Module jedoch wiederverwendet werden, kann dies die Datensicherheit und -verwaltung beeinträchtigen. Daher ist es wichtig, eine Datenschutzrichtlinie zu definieren und durchzusetzen, die die Verwendung von Modulen regelt, die implizite Datenzugriffsrechte mit sich bringen.

Strukturierte Programmierung fördert die Aufteilung eines Anwendungsprogramms in eine Hierarchie von Modulen oder autonomen Elementen, die wiederum andere solche Elemente enthalten können. Innerhalb jedes Elements kann der Code mithilfe von Blöcken verwandter Logik weiter strukturiert werden, um die Lesbarkeit und Wartbarkeit zu verbessern. Dazu gehören case, das eine Variable mit einer Reihe von Werten vergleicht, und repeat, while und for, die Schleifen bilden, die so lange fortgesetzt werden, bis eine Bedingung erfüllt ist. In allen strukturierten Programmiersprachen ist eine bedingungslose Kontrollübergabe oder goto-Anweisung veraltet und manchmal nicht einmal verfügbar.

Unterschied zwischen strukturierten und unstrukturierten Programmiersprachen

Eine strukturierte Programmiersprache erleichtert oder erzwingt strukturierte Programmierpraktiken. Unstrukturierte Sprachen können diese Praktiken ebenfalls unterstützen, aber das erfordert spezifische Schritte bei der Programmgestaltung und -implementierung. Strukturierte Programmierpraktiken gehen somit auf das Aufkommen strukturierter Programmiersprachen zurück.

Die theoretische Grundlage für strukturierte Programmierung geht auf die 1950er Jahre zurück, als die algorithmische Sprache (Algorithmic Language, ALGOL) 58 und 60 aufkam. Bis dahin wurde die Klarheit des Codes durch die Notwendigkeit beeinträchtigt, Bedingungs-/Aktions-Tests zu erstellen, indem Programmierer verknüpfte Tests und Aktionen explizit schreiben mussten – unter Verwendung der goto-Anweisung oder einer entsprechenden Anweisung –, was zu dem führte, was oft als Spaghetticode bezeichnet wird. ALGOL beinhaltete eine Blockstruktur, bei der ein Codeelement eine Bedingung und eine Aktion umfasste.

Die modulare Programmierung, die heute als Synonym für strukturierte Programmierung gilt, entstand ein Jahrzehnt später, als klar wurde, dass die Wiederverwendung von gemeinsamem Code die Produktivität der Entwickler verbessern kann. Bei der modularen Programmierung wird ein Programm in halbunabhängige Module unterteilt, die jeweils bei Bedarf aufgerufen werden. Puristen argumentieren, dass die modulare Programmierung eine tatsächliche Unabhängigkeit der Module erfordert, aber die meisten Entwicklungsteams betrachten jedes Programm, das die Logik in separate Elemente unterteilt, selbst wenn diese Elemente innerhalb desselben Programms existieren, als modular.

Moderne Programmiersprachen sind grundsätzlich in der Lage, strukturierten Code zu erzeugen. Ebenso sind sie in der Lage, Code zu erzeugen, der bei falscher Verwendung als unstrukturiert bezeichnet werden kann. Manche würden sagen, dass eine unstrukturierte Programmiersprache goto-Anweisungen enthält und daher keinen Aufruf eines separaten Moduls erfordert, das dann nach Abschluss zurückkehrt. Diese Definition ist jedoch unnötig restriktiv. Besser ist es zu sagen, dass die Mechanismen zur Durchsetzung von Strukturen je nach Sprache variieren, wobei einige Sprachen eine Struktur erfordern und andere weniger strukturierten Code akzeptieren.

Arten der strukturierten Programmierung

Es gibt drei Kategorien strukturierter Programmierung:

  1. Prozedurale Programmierung. Definiert Module als Prozeduren oder Funktionen, die mit einer Reihe von Parametern aufgerufen werden, um eine Aufgabe auszuführen. Eine prozedurale Sprache startet einen Prozess, der dann mit Daten versorgt wird. Dies ist auch die häufigste Kategorie und wird in die folgenden unterteilt:
    1. Serviceorientierte Programmierung definiert wiederverwendbare Module einfach als Services mit beworbenen Schnittstellen.
    2. Microservice-Programmierung konzentriert sich auf die Erstellung von Modulen, die keine Daten intern speichern und daher bei der Cloud-Bereitstellung skalierbar und belastbar sind.
    3. Funktionale Programmierung bedeutet technisch gesehen, dass Module aus Funktionen geschrieben werden und dass die Ausgaben dieser Funktionen nur aus ihren Eingaben abgeleitet werden. Die Definition der funktionalen Programmierung, die für Serverless Computing entwickelt wurde, ist inzwischen weitgehend gleichbedeutend mit Microservices.
  2. Objektorientierte Programmierung (OOP). Definiert ein Programm als eine Reihe von Objekten oder Ressourcen, an die Befehle gesendet werden. Eine objektorientierte Sprache definiert eine Datenressource und sendet sie an Prozessbefehle. Beispielsweise kann der prozedurale Programmierer sagen: Print(object), während der OOP-Programmierer sagen könnte: Tell Object to Print.
  3. Modellbasierte Programmierung. Das häufigste Beispiel hierfür sind Datenbankabfragesprachen. Bei der Datenbankprogrammierung werden Code-Einheiten mit Schritten im Datenbankzugriff und -Update verknüpft oder ausgeführt, wenn diese Schritte auftreten. Die Datenbank und die Datenbankzugriffsstruktur bestimmen die Struktur des Codes. Ein weiteres Beispiel für eine modellbasierte Struktur ist die Reverse Polish Notation, eine mathematische Problemstruktur, die sich für die effiziente Lösung komplexer Ausdrücke eignet. Quantencomputer sind ein weiteres Beispiel für modellbasierte strukturierte Programmierung; der Quantencomputer benötigt ein bestimmtes Modell, um Schritte zu organisieren, und die Sprache stellt es einfach zur Verfügung.

Komponenten der strukturierten Programmierung

Strukturierte Programme bestehen aus einer strukturellen Hierarchie, die mit dem Hauptprozess beginnt und sich nach unten auf niedrigere Ebenen aufteilt, wie es die Logik vorgibt. Diese niedrigeren Strukturen sind die Module des Programms, und Module können sowohl Aufrufe an andere Module auf niedrigerer Ebene als auch Blöcke enthalten, die strukturierte Bedingungs-/Aktionskombinationen darstellen. All dies kann zu einem einzigen Modul oder einer einzigen Code-Einheit zusammengefasst oder in mehrere Module aufgeteilt werden, die sich in Bibliotheken befinden.

Module können als Prozeduren oder Funktionen klassifiziert werden. Eine Prozedur ist eine Code-Einheit, die eine bestimmte Aufgabe ausführt und in der Regel auf eine gemeinsame Datenstruktur verweist, die dem gesamten Programm zur Verfügung steht. Ein Großteil der Daten, mit denen Prozeduren arbeiten, ist extern. Eine Funktion ist eine Code-Einheit, die mit bestimmten Eingaben arbeitet und bei Aufruf ein Ergebnis zurückgibt.

Strukturierte Programme und Module verfügen in der Regel über eine Header-Datei oder einen Abschnitt, in dem die referenzierten Module oder Bibliotheken sowie die Struktur der Parameter und der Modulschnittstelle beschrieben werden. In einigen Programmiersprachen wird die Schnittstellenbeschreibung in eine separate Datei abstrahiert, die dann von einer oder mehreren anderen Code-Einheiten implementiert wird.

Vorteile der strukturierten Programmierung

Strukturierte Programmierung bietet zahlreiche Vorteile. Zum einen fördert sie die Top-Down-Implementierung, wodurch sowohl die Lesbarkeit als auch die Wartbarkeit des Codes verbessert werden. Strukturierte Programmierung fördert auch die Wiederverwendung von Code, da selbst interne Module extrahiert und unabhängig gemacht werden können, in Bibliotheken gespeichert, in Verzeichnissen beschrieben und von vielen anderen Anwendungen referenziert werden können. Schließlich ist man sich weitgehend einig, dass strukturierte Programmierung die Entwicklungszeit und die Codequalität verbessert.

Diese Vorteile werden normalerweise als überzeugend – sogar als entscheidend – angesehen, und bei fast allen modernen Softwareentwicklungen wird strukturierte Programmierung eingesetzt.

Nachteile der strukturierten Programmierung

Der größte Nachteil der strukturierten Programmierung ist eine Verringerung der Ausführungseffizienz, gefolgt von einem höheren Speicherverbrauch. Diese beiden Probleme entstehen durch die Einführung von Aufrufen an ein Modul oder einen Prozess, der dann nach Abschluss zum Aufrufer zurückkehrt. Systemparameter und Systemressourcen werden auf einem Stack gespeichert – einer Warteschlange, die nach dem LIFO-Prinzip (Last In, First Out) organisiert ist – und bei Bedarf abgerufen. Je mehr Programmlogik zerlegt wird, das heißt je mehr Module beteiligt sind, desto größer ist der mit der Modulschnittstelle verbundene Overhead. Bei allen strukturierten Programmiersprachen besteht die Gefahr einer Überstrukturierung und eines Effizienzverlusts.

Strukturierte Programmierung kann auch falsch angewendet werden, wenn der gewählte Strukturtyp nicht für die jeweilige Aufgabe geeignet ist. Das bekannteste Beispiel ist das Lösen von mathematischen Problemen. RPL ist eine effiziente Methode, um ein mathematisches Problem zu formulieren und zu lösen, da die explizite Angabe der Ausführungsreihenfolge und die Rekursion im Code entfallen. Wenn dieses Problem jedoch in strukturierter Programmierung in prozeduraler oder objektorientierter Form gestellt würde, wäre der resultierende Code viel weniger effizient als die RPL-Version.

Diese Definition wurde zuletzt im Dezember 2024 aktualisiert

Erfahren Sie mehr über Business-Software