Modulare Programmierung und Design-Methodik: Vom Quellcode zum ausführbaren Programm

Eingeordnet in Informatik

Geschrieben am in Deutsch mit einer Größe von 5,19 KB

Design-Methodik: Grundlagen der Modularen Programmierung

Bei der Entwicklung eines kleinen Programms kann jede Methode wertvoll sein. Das Problem entsteht, wenn das Programm wächst. Die steigende Zahl der Anweisungen macht den Code schnell unlesbar, und eine logische Nachverfolgung der Implementierung wird unmöglich. Ein weiterer zu berücksichtigender Faktor ist, dass die Person, die den Code liest, nicht notwendigerweise dieselbe ist, die ihn geschrieben hat. Darüber hinaus können verschiedene Programmierer an der Entwicklung einer Anwendung beteiligt sein.

Es liegt auf der Hand, dass die Lösung für die Entwicklung komplexer Programme in der Zerlegung in kurze Sequenzen oder Module besteht, von denen jedes eine genau definierte Aufgabe ausführt. Dies ist die sogenannte Modulare Programmierung.

Der modulare Entwicklungsprozess

Modularität sollte nicht nur im Code, sondern im gesamten Entwicklungsprozess vorhanden sein. Dieser umfasst typischerweise die folgenden Aufgaben:

  • Genaue Spezifikation, was das Programm leisten soll.
  • Aufteilung des Gesamtproblems in einzelne Aufgaben (Module).
  • Genaue Definition der Funktion jeder Aufgabe und wie die Module miteinander kommunizieren.
  • Erstellung der Aufgaben und Verbindung der Assembler-Module zur Bildung des Gesamtprogramms.
  • Debugging und Testen des Programms.
  • Dokumentation des Programms.

Das Baumdiagramm als Hilfsmittel

Das wichtigste Hilfsmittel für die Aufteilung des Programms in Module ist das Baumdiagramm. Es handelt sich dabei um eine figurorientierte Darstellung von Blöcken, welche die Beziehungen zwischen Modulen (Aufgaben) und Submodulen (Teilaufgaben) zusammenfasst. Das Baumdiagramm zeigt die Kette der Unterordnung zwischen den Modulen und Teilbereichen. Dies ist sowohl für den Programmierer als auch für alle anderen Personen, die das Programm analysieren möchten, hilfreich, da es einen klaren Überblick über die funktionale Struktur bietet.

Vorteile der Modularen Programmierung

Die Gründe für die Aufteilung eines Programms in kleinere Teile sind vielfältig:

  • Die Module sind einfacher zu verstehen.
  • Verschiedene Module können unterschiedlichen Entwicklern zugewiesen werden.
  • Debugging und Tests können geordnet durchgeführt werden.
  • Die Dokumentation ist leichter verständlich.
  • Änderungen können gezielter vorgenommen werden.
  • Häufig verwendete Aufgaben können als Module programmiert und in Bibliotheken gespeichert werden, um sie in verschiedenen Programmen wiederzuverwenden.

Modul-Design und Kopplung

Bei der Konzeption der Module eines Programms sollte berücksichtigt werden, wie der Eintritt und Austritt erfolgt, die Steuerungsverknüpfung (Link Control) und wie Informationen zwischen ihnen übertragen werden (Datenverknüpfung). Generell sollten die Aufgaben der Module so ausgewählt und gestaltet werden, dass die Steuerungskopplung einfach ist und die Datenkopplung minimiert wird.

Die meisten Assembler sind darauf ausgelegt, den Prozess der Modularisierung in dreierlei Hinsicht zu unterstützen:

  • Strukturierung von Daten, sodass sie von mehreren Modulen gemeinsam genutzt werden können.
  • Bereitstellung von Mechanismen wie Prozeduren oder Subroutinen.
  • Ermöglichung des Einfügens von Code-Abschnitten, bekannt als Makros, mittels einfacher Anweisungen.

Der Assemblierungsprozess

Ein Assembler ist ein Programm, das einen Quellcode in Objektcode umwandelt. Objektcode ist Maschinensprache (die der Prozessor schließlich ausführt), in der lediglich die Verweise auf externe Routinen fehlen.

Der Quellcode ist eine Datei, die mit einem Texteditor erstellt wurde und die Abfolge von Assembler-Anweisungen sowie bestimmte Richtlinien oder Befehle für den eigentlichen Assemblierungsprozess enthält. Der Objektcode besteht aus Maschinensprache-Code und den notwendigen Informationen, um sich mit anderen Objektmodulen zu verknüpfen.

Linken und Relokation (Verknüpfung und Verschiebung)

Beim Aufbau eines Programms können einige Module im selben Quellmodul platziert und zusammen assembliert werden, während andere in verschiedenen Modulen liegen und einzeln assembliert werden. Wenn Module getrennt assembliert werden, muss das Hauptmodul, das die erste auszuführende Anweisung enthält, mit einer END-Anweisung enden, die den Eintrittspunkt des Programms angibt. Jedes der anderen Module muss mit einer END-Anweisung ohne Angabe eines Eintrittspunkts enden.

Die resultierenden Objektmodule – von denen einige in Bibliotheken zusammengefasst werden können – müssen vor der Programmausführung durch den Linker (oder Binder) zum Lastmodul verknüpft werden.

Zusätzlich zum erzeugten Lastmodul gibt der Linker eine Speicherkarte aus, die anzeigt, wo die Objektmodule im Speicher geladen werden. Nach der Erstellung wird das Lastmodul durch das Ladeprogramm (Loader) in den Arbeitsspeicher des Computers geladen, und die Ausführung beginnt.

Verwandte Einträge: