Programmiersprache Pascal
Attribute von Datenelementen
In imperativen Programmiersprachen wie PASCAL, C, FORTRAN, usw. lassen
sich Datenelemente durch ein Tupel charakterisieren:
(L, N, V, T)
Dabei bedeuten
- L - Aufbewahrungsort (Speicher, location)
- N - Name (name)
- V - Wert (value)
- T - Datentyp (type)
Typ-Raum
T +---------------------------+
| Werte Operatoren |
| +---------------------+ |
| | V | | |
| +---------------------+ |
| : |
+--------:------------------+
: :
Wert-Bindung : : Typ-Bindung
L : : N
+-----------+ +============+ +-----------+
| | | Daten- | | |
| Speicher- |............| element |............| Namens- |
| | Speicher- +============+ Namens- | |
| raum | Bindung Bindung | raum |
| | | |
+-----------+ +-----------+
Der Aufbewahrungsort (Speicherbereich) ist gekennzeichnet durch
-
seine Länge (length)
Anzahl an Bytes, die zur Speicherung des Wertes zur Verfügung
gestellt werden müssen
-
seine Adresse (address)
die Adresse verweist auf das erste Byte, das zur Abspeicherung des
Wertes zur Verfügung steht
Zu unterscheiden ist, auf welche Weise die Bindung eines Datenelements
an einen Speicherbereich erfolgt (der Speicherbereich erhält eine
absolute Adresse):
-
absolute Bindung
Der Programmierer ordnet dem Speicherbereich eine absolute Adresse
zu.
Beispiele dafür sind Zugriffe in reservierte Bereiche des
Betriebssystems, z.B. in den Eingabepuffer oder den Bildspeicher unter
DOS.
Bei modernen Betriebssystemen verbietet sich für Anwendungsprogramme
die Arbeit mit absoluten Adressen.
Programme, die mit absoluter Bindung arbeiten, sind nicht portabel.
Nicht alle Programmiersprach(version)en unterstützen absolute
Adressierung.
-
statische Bindung
Der Compiler ordnet dem Speicherbereich eine feste relative Adresse
zu.
Beim Laden des Programms wird die relative Adresse durch eine absolute
Adresse ersetzt.
Der Speicherbereich - und der in ihm liegende Wert - stehen während
der gesamten Laufzeit des Programms zur Verfügung.
Die Lage des Speicherbereiches kann bei Bedarf vom Betriebssystem
automatisch verändert werden, ohne daß sich dies auf das
Programm auswirkt (abgesehen von der Laufzeit).
Ältere Sprachsysteme (z.B. Fortran) verwenden standardmäßig
diese Technik.
-
automatische Bindung
Beim Aktivieren der Programmeinheit, in dem das Datenelement deklariert
wurde, wird automatisch der erforderliche Speicherbereich zugeordnet.
Der Speicherbereich steht nur solange zur Verfügung, wie die
Programmeinheit aktiv ist.
Der im Speicherbereich liegende Wert geht bei Deaktivierung der
Programmeinheit im allgemeinen verloren.
Der Speicherbereich liegt in der Regel im Programm-Stack.
Neuere Sprachsysteme verwenden vorzugsweise diese Technik.
-
dynamische Bindung
Die Zuordnung eines Speicherbereiches erfolgt zur Laufzeit des
Programms, und zwar nur dann, wenn es dazu eine explizite Anforderung
auslöst.
Der Speicherbereich bleibt zugeordnet, bis er entweder durch das
Programm explizit freigegeben wird oder bis das Programm endet.
Manche Sprachsysteme verfügen über eine automatische
Freigabe des Speicherbereichs nicht mehr verwendeter Speicherbereiche
(garbage collection). Dies ist für Pascal-Systeme nicht
üblich.
Der Speicherbereich liegt in der Regel im Programm-Heap.
Einige Beispiele
Bei einigen Systemen können Überlagerungsstrukturen (overlays)
aufgebaut werden, d.h. bestimmte Programmsegmente befinden sich alternativ
im Speicher (z.B. bei knappen Speicherressourcen unter DOS). Die
Speicherbereiche der in solchen Programmsegmenten enthaltenen Datenelemente
werden auf einem externen Medium gesichert. Es ist gewährleistet,
daß der Inhalt von Speicherbereichen, die "legal" mit Werten belegt
wurden, nicht verloren geht. Keine Sicherheit besteht im allgemeinen bei
Speicherbereichen, die "unbelegt" sind.
Beim Namen (Bezeichner, identifier) ist zu beachten
-
der Gültigkeitsbereich (scope)
der Name ist nur in bestimmten Teilen des Programms bekannt
in verschiedenen Teilen des Programms kann ein Bezeichner auf
unterschiedliche Datenelemente weisen
innerhalb eines Gültigkeitsbereiches weist ein Bezeichner immer
eindeutig auf ein bestimmtes Datenelement
Der Wert wird durch den Inhalt des Speicherbereiches gebildet.
In diesem Zusammenhang sind von Bedeutung
-
Zugriffsrechte
Der Speicherbereich darf entweder gelesen oder beschrieben werden,
d.h. der Wert ist im ersten Fall abfragbar und im zweiten Fall
modifizierbar.
Datenelemente, deren Wert modifizierbar ist, heißen Variablen.
Datenelemente mit unveränderlichem Wert heißen Konstanten.
-
die Interpretation
Der Inhalt des Speicherbereiches wird im Normalfall entsprechend
des Datentyps interpretiert.
Unter bestimmten Umständen kann die Interpretation des Inhalts des
Speicherbereiches als Wert eines anderen Datentyps möglich sein
(casting).
Zu beachten ist, ob und wie der Speicherbereich initialisiert wird,
d.h. wie der Inhalt des Speicherbereichs unmittelbar nach seiner
Bereitstellung für das Programm aussieht (Erstwert).
Es gibt dabei folgende Möglichkeiten
-
der Speicherbereich wird nicht initialisiert
der Erstwert ist damit zufällig
(er ist abhängig von den Prozessen, welche zuvor diesen
Speicherbereich genutzt haben)
-
der Speicherbereich wird automatisch vom System mit bestimmten Inhalten
beschrieben
Bei einer Reihe von Systemen ist die Vorbelegung des gesamten
Speicherbereiches mit binären Nullen üblich.
Ein solches Verhalten sollte niemals vorausgesetzt werden !
-
der Speicherbereich wird durch das Programm initialisiert, d.h.
als Erstwert wird ein explizit vorgegebener Anfangswert (initial value)
angenommen
Datenelemente enthalten bei imperativen Programmiersprachen immer einen
Wert !
Konstanten sind immer mit "ihrem" Wert initialisiert.
Variablen enthalten im allgemeinen einen zufälligen Erstwert, wenn nicht
durch den Programmierer explizit ein Anfangswert vorgegeben wird.
Bemerkung:
Die Anfangswertzuweisung erfolgt durch eine spezielle syntaktische
Konstruktion !
Eine Ergibtanweisung bewirkt immer eine Wertveränderung
und keine Anfangswertzuweisung !
Ein Datenelement ist in der Regel immer an einen Datentyp gebunden.
Typenlose Datenelemente, deren Inhalt je nach Bedarf interpretiert wird,
sind in vielen Sprachen nicht zulässig.
Der Umgang mit typenlosen Datenelementen birgt wegen fehlender
Kontrollmöglichkeiten ein erhöhtes Fehlerrisiko in sich.
Eine Variable bezeichnet einen bestimmten Speicherbereich, dessen Inhalt
(der Wert der Variablen) veränderlich ist.
Eine Konstante besitzt ähnliche Eigenschaften wie eine Variable,
nur ist ihr Wert nicht veränderbar.
Eine Variable/Konstante besitzt folgende Attribute:
- Name
- Zugriffsrecht
- Typ
- Wert
- Gültigkeitsbereich (Sichtbarkeitsbereich, scope)
- Lebensdauer
- Adresse
Der wichtigste Unterschied zwischen Variablen und Konstanten liegt in dem
Zugriffsrecht:
Der Wert einer Variablen ist veränderbar, der Wert einer Konstanten
kann nicht verändert werden.
Bei Konstanten sind zu unterscheiden:
-
Literale
z.B. 3.141, 0, 'Pascal'
-
symbolische Konstanten
z.B. pi, null, sprache
P. Böhme, 09.09.1996