Skip to main content
main-content

Inhaltsverzeichnis

Frontmatter

1. Einleitung

Zusammenfassung
Einen Rechner haben wir uns als ein universell einsetzbares Gerät vorzustellen, das durch ein in ihm gespeichertes Programm zu einer Maschine für einen bestimmten Zweck wird. Im Unterschied zu einer Waschmaschine, die ja auch über ein „Programm“ verfügt, das die unterschiedlichsten Funktionen veranlaßt, wie „Wasser einlassen“, „Vorwaschmittel einspülen“, „5 Minuten rotieren“, „Wasser abpumpen“, „Schleudergang einschalten“ etc., ist das Programm in einem Rechner nicht fest eingebaut, sondern dieser kann durch Einlesen und Abspeichern („Laden“) eines bestimmten Programms für die verschiedensten Zwecke „programmiert“ werden.
Hilmar Pudlatz

2. Grundbegriffe der Programmierung

Zusammenfassung
Wir wollen mit einem einfachen Beispiel beginnen, das sich bezüglich der eben postulierten Aufteilung des Programmiervorgangs recht elementar darstellt: In einem Programm soll die Summe der Zahlen 17 und 4 gebildet und ausgegeben werden. Die Problemanalyse und die Algorithmisierung sind hier trivial, so daß sofort die Realisierung in der Sprache Modula angegeben werden kann:
1
MODULE Summe;
 
2
FROM InOut IMPORT WriteInt, WriteLn;
 
3
VAR A, B, C: INTEGER;
 
4
BEGIN
 
5
A := 17;
 
6
B := 4;
 
7
C := A + B;
 
8
WriteInt(C, 4);
 
9
WriteLn
 
10
END Summe.
 
Hilmar Pudlatz

3. Elementare Programmstrukturen

Zusammenfassung
Die bisherigen Programmbeispiele hatten eines gemeinsam: Sie wurden — Anweisung für Anweisung — in der angegebenen Reihenfolge abgearbeitet. Eine Anweisung, die räumlich nach einer anderen stand, wurde auch zeitlich nach dieser ausgeführt. Diese Form der Programmstruktur nennen wir eine Sequenz. Als Vorstufe zur Programmierung ist der Struktogrammentwurf anzusehen (Nassi-Shneiderman-Diagramm), der die Sequenz als Folge einzelner Aktionen darstellt:
Hilmar Pudlatz

4. Einfache Datentypen

Zusammenfassung
Bisher ist nur von ganzzahligen Datentypen die Rede gewesen und zwar in den Erscheinungsformen INTEGER und CARDINAL. Es soll nun gezeigt werden, wie man Speicherplätze für Zahlen mit Nachkommastellen deklariert und wie man mit solchen Zahlen umgeht. Der Datentyp für solche Zahlen heißt in Modula REAL. Dieser Datentyp zählt mit den zuvor genannten zu den „einfachen“ d.h. nicht strukturierten Datentypen.
Hilmar Pudlatz

5. Strukturierte Datentypen I

Zusammenfassung
Die bisher behandelten Typen CARDINAL, INTEGER, REAL, BOOLEAN und CHAR gehören zu den „einfachen“ Datentypen, deren Aufzählung damit noch nicht erschöpft ist. Dennoch wollen wir uns bereits den „strukturierten“ Datentypen zuwenden, die für ernsthafte Programmieraufgaben unbedingt erforderlich sind. Als Hilfsmittel hierfür soll im folgenden die Typ-Deklaration besprochen werden, die neue Ausdrucksmöglichkeiten bezüglich der Definition abstrakter Datentypen bietet. Darüber hinaus werden mit den Unterbereichs- und Aufzählungstypen zwei weitere einfache Datentypen vorgestellt, die für die Konstruktion strukturierter ARRAY-Typen benötigt werden.
Hilmar Pudlatz

6. Prozeduren

Zusammenfassung
Bisher haben wir eine Reihe von in Modula verwendbaren Funktionen und Prozeduren kennengelernt. Erstere waren meist in der Sprache selbst enthalten (z.B. VAL, ORD), letztere mußten aus externen Moduln (wie InOut, Strings) importiert werden, z.B. Read, WriteCard, Assign, OpenInput. Im folgenden Abschnitt wollen wir selbst Prozeduren schreiben, zunächst die einfacheren ohne Parameter. Dies sei im ersten Programm dieses Kapitels mit der Vorstellung des Typs BITSET verbunden.
Hilmar Pudlatz

7. Funktionen

Zusammenfassung
Bevor wir uns der Programmierung von Funktionen zuwenden, die nichts anderes sind als spezielle Unterprogramme, wollen wir uns eine Übersicht darüber verschaffen, welche Funktionen in Modula bereits vorliegen, also in die Sprache „eingebaut“ sind. Einige dieser Funktionen sind bereits vorgestellt worden, z.B. die Typ-Transferfunktionen INTEGER und CARDINAL, die Funktionen TRUNC, FLOAT, ORD und VAL, von denen die letzten beiden eine Abbildung der Wertemenge eines abzählbaren Typs auf einen Abschnitt der CARDINAL-Zahlen vermitteln und umgekehrt, ferner als Spezialfall der Funktion VAL die Funktion CHR ( CHR (i) = VAL (CHAR, i) ).
Hilmar Pudlatz

8. Strukturierte Datentypen II

Zusammenfassung
Im ersten Kapitel über strukturierte Datentypen haben wir den Datentyp String kennengelernt und einige elementare Operationen mit Strings durchgeführt. In diesem Abschnitt nun sollen die bisher nur namentlich erwähnten Prozeduren aus dem Bibliotheksmodul Strings besprochen werden, mit deren Hilfe das Einfügen, Löschen und Kopieren von Strings bewerkstelligt wird.
Hilmar Pudlatz

9. Moduln

Zusammenfassung
Die Verwendung globaler Variablen in Unterprogrammen warf Probleme auf, die aus der mangelnden Überschaubarkeit resultierten und insbesondere beim Entwurf großer Programme zu häufigen Fehlersituationen führen konnten. Es ist dann nämlich möglich, daß die Deklaration einer Variablen im Unterprogramm vergessen und die Deklaration einer gleichlautenden Variablen im umgebenden Programmabschnitt übernommen wird: ein Versehen, das vom Compiler nicht bemerkt werden kann.
Hilmar Pudlatz

10. Dynamische Datenstrukturen

Zusammenfassung
Bisher waren unsere Datenstrukturen in dem Sinne statisch, daß ihre Speicherplätze entweder beim Programmstart angelegt wurden und bis zum Programmende existierten oder aber sich insofern unserem Einfluß entzogen, als sie (als lokale Variablen) beim Aufruf einer Prozedur angelegt und beim Verlassen der Prozedur zu existieren aufhörten.
Hilmar Pudlatz

11. Maschinennahe Programmierung

Zusammenfassung
Die Verwendung höherer Programmiersprachen — wie Modula — entbindet den Programmierer der Notwendigkeit, sich mit den Details der ihm zur Verfügung stehenden Hardware zu beschäftigen, weil die in der Programmiersprache bereitgestellten Methoden des Speicherzugriffs und der Benutzung der Ein-/Ausgabegeräte ihm den oft schwierigen Umgang mit den Details der Hardwareprogrammierung abnehmen. Die Verwendung von Sprachelementen ausschließlich der höheren, d.h. von der Hardware unabhängigen Programmkonstrukte ist ja schließlich die Voraussetzung für die Portierbarkeit von Programmen auf andere Rechnertypen! Warum soll man sich also — wie in der Überschrift angedeutet — mit maschinennahen und sogar maschinenabhängigen Details beschäftigen?
Hilmar Pudlatz

12. Bibliotheksmoduln

Zusammenfassung
Dieses Kapitel soll als Referenz für die Benutzung der von N. Wirth vorgeschlagenen Bibliotheksmoduln dienen. Sie sollten daher zum Umfang einer Implementierung von Modula auf einem beliebigen Rechner gehören. Dennoch kommen Abweichungen vor, über die von Fall zu Fall in den Handbüchern der Implementierer Auskunft eingeholt werden muß.
Hilmar Pudlatz

Backmatter

Weitere Informationen