Programmiersprache Pascal
Datenaustausch mit Unterprogrammen
Für den Datenaustausch mit Unterprogrammen gibt es folgende prinzipielle
Möglichkeiten:
- Parameterliste
- gemeinschaftliche Daten
- globale Daten
- Dateien
Der Datenaustausch über Dateien bietet die größte
Flexibilität, ist jedoch mit gegebenfalls erheblich höherer
Laufzeit und dem Problem verbunden, daß sich gegebenenfalls 'Dritte'
relativ einfach Zugang zu den Daten verschaffen können.
Die Arbeit mit globalen und gemeinschaftlichen Daten ist für den
Programmierer die - scheinbar - unaufwendigste Form für den Datenaustausch
innerhalb eines Programms:
-
Sie verringert den (Erst-)Codieraufwand für den Programmierer.
-
Sie verringert die Kontrollmöglichkeiten gegenüber fehlerhaften
bzw. illegalen Zugriffen und erschwert den Überblick über den
wirklich ablaufenden Datenaustausch.
Programmeinheiten, die diese Formen des Datenaustausches nutzen, sind nicht
bzw. nur eingeschränkt nachnutzbar.
Gemeinschaftliche Daten sind in speziellen Bereichen (COMMON-Blöcken)
angeordnet, auf die jede Programmeinheit bei Bedarf Bezug nehmen kann.
Im Gegensatz zu Dateien werden diese Daten permanent im Hauptspeicher
gehalten.
COMMON-Blöcke sind in Pascal nicht üblich.
Globale Daten werden automatisch an alle Unterprogramme weitergegeben,
die der Deklaration dieser Daten folgen und die im gleichen Programmblock
angesiedelt sind.
Die Arbeit mit globalen Daten wird durch Pascal unterstützt.
Parameter werden an ein Unterprogramm über eine definierte Schnittstelle
- die Parameterliste - übergeben.
Diese Schnittstelle legt fest, welche Daten (Anzahl, Datentyp) in welcher
Richtung (lesen oder schreiben) ausgetauscht werden.
Die Organisation der Datenübergabe und Art und Umfang der dabei wirksamen
Kontrolle sind in den einzelnen Programmiersprach(version)en
unterschiedlich ausgebaut.
Pascal stellt eine gute Kontrolle bereit.
Der Datenaustausch mit Parametern ist aufwendiger zu programmieren, bietet
aber folgende Vorteile:
-
Es existiert eine eindeutig lokalisierte Schnittstelle, welche die
Möglichkeiten zum Datenaustausch beschreibt. Dies reduziert die
Fehlerquellen bei der Entwicklung und vor allem bei der Wartung von
Programmen.
-
Die Programmeinheiten werden nachnutzbar.
Die Arbeit mit Parameterlisten ist die sicherste Form des Datenaustausches.
Sie kann entweder ausschließlich oder in Kombination mit anderen
Techniken genutzt werden.
Die an das Unterprogramm bei einem Aufruf zu übergebenden Daten
werden als aktuelle Parameter bezeichnet.
Als aktuelle Parameter können
- Konstanten (Literale oder symbolische Konstanten),
- Variablen und
- Ausdrücke
angegeben werden.
Bei bestimmten Techniken der Parameterübergabe sind Variablen
vorgeschrieben.
Ausdrücke werden vor der Übergabe ausgewertet.
Die in der Deklaration eines Unterprogramms notierten Parameter werden
in Unterscheidung von den aktuellen Parametern auch als formale Parameter
bezeichnet.
Es gibt verschiedene Techniken der Parameterübergabe an ein Unterprogramm.
Dabei werden vor allem zwei Techniken eingesetzt:
- Referenzparameter (call by reference):
-
Das Unterprogramm erhält die Adresse des aktuellen Parameters.
Entweder darf es in dem Speicherbereich, den der aktuelle Parameter
belegt
- nur lesen oder
- lesen und schreiben, d.h. seinen Inhalt verändern.
Bei der zweiten Variante muß der aktuelle Parameter stets eine
Variable sein.
Das Unterprogramm arbeitet im Speicherbereich der aufrufenden
Programmeinheit.
- Wertparameter (call by copy):
-
Das Unterprogramm arbeitet mit einer Kopie, es arbeitet nicht im
Speicherbereich der aufrufenden Programmeinheit.
Es gibt folgende Varianten:
-
call by value
Wertparameter als Eingangsgröße
Das Unterprogramm erhält einen Wert, den es als Kopie in
einem eigenen Speicherbereich verwaltet. Dieser Speicherbereich
darf - eventuell - modifiziert werden. Bei Verlassen des
Unterprogramms wird der aktuelle Inhalt dieses Speicherbereiches
nicht an die aufrufende Programmeinheit zurückvermittelt.
-
call by value-result
Wertparameter als Ein- und Ausgangsgröße
Das Unterprogramm erhält einen Wert, den es als Kopie in
einem eigenen Speicherbereich verwaltet. Dieser Speicherbereich
darf modifiziert werden. Bei Verlassen des Unterprogramms wird der
aktuelle Inhalt dieses Speicherbereiches an die aufrufende
Programmeinheit zurückvermittelt.
-
call by result
Wertparameter als Ausgangsgröße
Das Unterprogramm erhält keinen Wert. Es legt für den
Parameter einen eigenen Speicherbereich an, der bei Aufruf des
Unterprogramms keinen (definierten) Wert erhält. Bei
Verlassen des Unterprogramms wird der aktuelle Inhalt dieses
Speicherbereiches an die aufrufende Programmeinheit übergeben.
Pascal sieht folgende Formen der Parameterübergabe vor:
-
variable parameter
Der Parameter kann als Ein- und Ausgangsgröße verwendet
werden.
Deklaration:
VAR parameter : typ
-
value parameter
Der Parameter kann nur als Eingangsgröße verwendet werden.
Deklaration:
parameter : typ
Delphi und XL Pascal (VM-Modus) gestatten eine dritte Form der
Parameterübergabe:
-
constant parameter
Der Parameter kann nur als Eingangsgröße verwendet werden.
Für das Unterprogramm gilt der Parameter als Konstante, der aktuelle
Parameter muß jedoch keine Konstante sein.
Deklaration:
CONST parameter : typ
Mit welchen der oben beschriebenen Techniken der Parameterübergabe
diese Formen realisiert werden, kann von Pascal-System zu Pascal-System
variieren.
Es sollte in der Regel so programmiert werden, daß keine
Abhängigkeiten von der verwendeten Technik entstehen.
Beispiel:
Als Eingangsgrößen deklarierte Parameter sollten im
Unterprogramm nie einen neuen Wert erhalten.
Die Technik der Parameterübergabe kann jedoch Einfluß auf
das Laufzeitverhalten und den Speicherbedarf des Programms haben. Ferner
besteht ein gewisser Einfluß auf die mögliche Höhe von
Schäden durch fehlerhaften Programmcode.
Folgende Faktoren spielen dabei unter anderem eine Rolle:
-
Wertparameter arbeiten mit Kopien, d.h. es wird zusätzlicher
Speicherbedarf entstehen. Je nach Datentyp der Parameter kann dieser
Bedarf marginal oder signifikant sein.
Bei modernen Programmiersystemen wird der benötigte Speicherplatz
so schnell wie möglich wieder freigegeben.
-
Referenzparameter sprechen den Orginal-Speicherbereich an. Dies kann
die Breite des Adressraumes beeinflussen, der zur Bearbeitung einer
Aufgabe gleichzeitig angesprochen wird. Bei Betriebssystemen mit virtueller
Speicherverwaltung kann dies Einfluß auf die Häufigkeit
des Ein- und Auslagerns von Speichersegmenten haben und damit die
Laufzeit erhöhen.
-
Referenzparameter sprechen den Orginal-Speicherbereich an. Fehler im
Programmcode können so größere Auswirkungen haben.
Solche möglichen Auswirkungen lassen sich durch zusätzliche
Maßnahmen reduzieren, die jedoch die Laufzeit verlängern.
Gestaltungsregeln
Für den Aufbau von Unterprogrammen gibt es einige Gestaltungsregeln:
-
Ein Unterprogramm sollte (genau) eine inhaltlich abgeschlossene Aufgabe
lösen.
-
Ein Unterprogramm sollte überschaubar, d.h. die zu lösende Aufgabe nicht zu komplex sein.
Andererseits sollte die Anzahl der verwendeten Unterprogramme nicht
unnötig groß sein, da dann inhaltliche Zusammenhänge
schwerer erkennbar werden und der Verwaltungsaufwand steigt.
-
Ein Unterprogramm sollte genau einen Eintrittspunkt und genau einen
Austrittspunkt besitzen.
Im Zusammenhang mit Programmausnahmen ist die Forderung hinsichtlich
des Austrittspunktes so zu sehen, daß die Behandlung der
Programmausnahmen konzentriert wird.
-
Die zwischen Eintritts- und Austrittspunkt liegenden Ablaufstrukturen
sollten linear durchlaufen werden, ohne das explizite
Rücksprünge erfolgen.
-
Der Datenaustausch der Einheit mit seiner Umgebung sollte über (genau)
eine eindeutig beschriebene Schnittstelle laufen.
-
Der Umfang der auszutauschenden Daten ist so gering wie möglich zu
halten.
P. Böhme, 24.08.1995