Definition

Strukturierte Programmierung (modulare Programmierung)

Strukturierte Programmierung, manchmal auch als modulare Programmierung bezeichnet, ist ein Programmierparadigma, das die Erstellung von Programmen mit lesbarem Code und wiederverwendbaren Komponenten erleichtert. Alle modernen Programmiersprachen unterstützen strukturierte Programmierung, doch Umsetzung und Syntax 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 gemeinsamen Modulschnittstelle oder eine Spezifikation der Programmierschnittstelle (API) nutzen. Bei der Wiederverwendung von Modulen ist jedoch die Datensicherheit und -verwaltung eine größere Herausforderung. Daher ist es wichtig, Datensicherheitsrichtlinien zu definieren und durchzusetzen, die die Verwendung von Modulen kontrollieren und implizite Datenzugriffsrechte mit sich bringen.

Die strukturierte Programmierung fördert die Unterteilung eines Programms in eine Hierarchie von Modulen oder autonomen Elementen, die wiederum andere Elemente enthalten können. Innerhalb jedes Elements kann der Code durch zusammengehörige Logik weiter strukturiert werden, um die Lesbarkeit und Wartung zu verbessern. Dazu gehören zum Beispiel case, das eine Variable gegen eine Reihe von Werten testet; Repeat, while und for, die Schleifen konstruieren, die fortgesetzt werden, bis eine Bedingung erfüllt ist.

In allen strukturierten Programmiersprachen ist eine unbedingte Übergabe der Kontrolle, die sogenannte goto-Anweisung, veraltet und in vielen nicht mehr verfügbar.

Unterschied zwischen strukturierten und unstrukturierten Programmiersprachen

Eine strukturierte Programmiersprache erleichtert oder erzwingt strukturierte Programmierpraktiken. Diese können auch mit unstrukturierten Sprachen unterstützt werden, doch dies erfordert spezielle Schritte im Programmdesign und der Implementierung. Strukturierte Programmierpraktiken gehen daher auf strukturierte Programmiersprachen zurück.

Die theoretische Grundlage für strukturierte Programmierung entstand in den 1950er Jahre, mit dem Aufkommen der Sprachen ALGOL 58 und 60. Bis dahin wurde die Übersichtlichkeit des Codes durch die Notwendigkeit eingeschränkt, Bedingungs-/Aktionstests zu erstellen, indem die Programmierer verknüpfte Tests und Aktionen explizit schreiben mussten (unter Verwendung der goto-Anweisung oder deren Äquivalent), was zu Spaghetticode führte. ALGOL enthielt eine Blockstruktur, bei der ein Codeelement eine Bedingung und eine Aktion enthielt.

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

Moderne Programmiersprachen sind durchgängig in der Lage, strukturierten Code zu erzeugen. Genauso sind sie aber auch in der Lage, Code zu produzieren, der bei falscher Anwendung als unstrukturiert bezeichnet werden kann. Manche sagen, dass eine unstrukturierte Programmiersprache goto-Anweisungen enthält und daher keinen call (Aufruf) eines separaten Moduls erfordert, das dann nach Abschluss zurückkehrt. Doch diese Definition ist unnötig restriktiv. Die Mechanismen zur Erzwingung von Struktur variieren je nach Sprache, wobei einige Sprachen Struktur verlangen und andere weniger strukturierten Code akzeptieren.

Arten der strukturierten Programmierung

Die strukturierte Programmierung kann in drei Kategorien unterteilt werden:

Prozedurale Programmierung. Definiert Module als Prozeduren oder Funktionen, die mit einer Reihe von Parametern aufgerufen werden, um eine Aufgabe auszuführen. In einer prozeduralen Sprache wird ein Prozess gestartet, dem dann Daten übergeben werden. Sie ist auch die am weitesten verbreitete Kategorie und wird in folgende drei Bereiche unterteilt:

  • Die serviceorientierte Programmierung definiert wiederverwendbare Module einfach als Services mit ausgeschriebenen Schnittstellen.
  • Die Microservices-Programmierung konzentriert sich auf die Erstellung von Modulen, die intern keine Daten speichern und daher skalierbar und ausfallsicher im Cloud-Einsatz sind.
  • funktionale Programmierung bedeutet technisch gesehen, dass Module aus Funktionen geschrieben werden, und dass die Ausgaben dieser Funktionen nur aus ihren Eingaben abgeleitet werden. Entwickelt für Serverless Computing, ist die Definition der funktionalen Programmierung inzwischen weitgehend synonym mit Microservices.

Objektorientierte Programmierung (OOP). Definiert ein Programm als eine Menge von Objekten oder Ressourcen, an die Befehle gesendet werden. Eine objektorientierte Sprache definiert eine Datenressource und sendet sie, um Befehle zu verarbeiten. Der prozedurale Programmierer kann beispielsweise sagen Print(object), während der OOP-Programmierer sagen kann Tell Object to Print.

Modellbasierte Programmierung. Das häufigste Beispiel hierfür sind Datenbankabfragesprachen. Bei der Datenbankprogrammierung werden Codeeinheiten Schritten beim Datenbankzugriff zugeordnet und aktualisiert, wenn die Schritte ausgeführt werden. Die Struktur der Datenbank und des Datenbankzugriffs bestimmt die Struktur des Codes. Ein weiteres Beispiel für eine modellbasierte Struktur ist die Reverse Polish Notation (RPN), eine mathematische Problemstruktur, die sich zum effizienten Lösen von komplexen Ausdrücken eignet. Quantencomputer, die sich gerade erst entwickeln, sind ebenfalls ein Beispiel für modellbasierte strukturierte Programmierung; der Quantencomputer verlangt ein bestimmtes Modell, um Schritte zu organisieren, und die Sprache stellt es einfach bereit.

Komponenten der strukturierten Programmierung

Auf der obersten Ebene bestehen strukturierte Programme aus einer strukturellen Hierarchie, die mit dem Hauptprozess beginnt und sich je nach Logik in niedrigere Ebenen zerlegt. Diese unteren Strukturen sind die Module des Programms, und Module können sowohl Aufrufe zu anderen (untergeordneten) Modulen als auch Blöcke enthalten, die strukturierte Bedingungs-/Aktionskombinationen darstellen. All dies kann in einem einzigen Modul oder einer Codeeinheit kombiniert oder in mehrere Module aufgeteilt werden, die in Bibliotheken untergebracht sind.

Module können als Prozeduren oder Funktionen klassifiziert werden. Eine Prozedur ist eine Codeeinheit, die eine bestimmte Aufgabe ausführt und normalerweise auf eine gemeinsame Datenstruktur verweist, die dem gesamten Programm zur Verfügung steht. Viele der Daten, mit denen Prozeduren arbeiten, sind extern. Eine Funktion ist eine Codeeinheit, die auf bestimmte Eingaben reagiert und beim Aufruf ein Ergebnis zurückgibt.

Strukturierte Programme und Module haben typischerweise eine Header-Datei oder einen Abschnitt, der die referenzierten Module oder Bibliotheken sowie die Struktur der Parameter und der Modulschnittstelle beschreibt. In einigen Programmiersprachen wird die Schnittstellenbeschreibung in eine separate Datei abstrahiert, die dann von einer oder mehreren anderen Codeeinheiten implementiert wird.

Vorteile der strukturierten Programmierung

Die Vorteile der strukturierten Programmierung sind:

  • Sie fördert die Top-Down-Implementierung, was sowohl die Lesbarkeit als auch die Pflege des Codes verbessert.
  • Sie fördert die Wiederverwendung von Code, da selbst interne Module extrahiert und unabhängig gemacht werden können, die sich in Bibliotheken befinden, in Verzeichnissen beschrieben und von vielen anderen Anwendungen referenziert werden können.
  • Es ist allgemein anerkannt, dass Entwicklungszeit und Codequalität durch strukturierte Programmierung verbessert werden.

Diese Vorteile werden in der Regel als zwingend, ja sogar als entscheidend angesehen, und fast die gesamte moderne Softwareentwicklung setzt strukturierte Programmierung ein.

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 zum Aufrufer zurückkehrt, wenn er fertig ist.

Systemparameter und Systemressourcen werden auf einem Stack (einer Warteschlange, die nach dem LIFO-Prinzip - last-in-first-out - organisiert ist) gespeichert und bei Bedarf angezeigt. Je mehr Programmlogik zerlegt wird, das heißt je mehr Module beteiligt sind, desto größer ist der mit der Modulschnittstelle verbundene Overhead. Alle strukturierten Programmiersprachen sind dem Risiko einer Überstrukturierung und eines Effizienzverlusts ausgesetzt.

Strukturierte Programmierung kann auch falsch angewendet werden, wenn die gewählte Art der Struktur nicht zur Aufgabe passt. Das bekannteste Beispiel ist das Lösen von mathematischen Problemen. RPL ist eine effiziente Methode zum Festlegen und Lösen eines mathematischen Problems, da keine explizite Angabe der Ausführungsreihenfolge und keine Rekursion im Code erforderlich ist. Wenn dieses Problem jedoch in strukturierter Programmierprozedur oder Objektform auftreten, ist der resultierende Code viel weniger effizient als die RPL-Version.

Diese Definition wurde zuletzt im Februar 2021 aktualisiert

Erfahren Sie mehr über Business-Software