Programmiersprache Pascal

Klassifizierung von Datentypen

Ein Datentyp ist gekennzeichnet durch Anstelle von Datentyp wird mitunter auch der Begriff Wertart verwendet.

Ein Wert besteht aus einer endlichen Folge von Bits.
Der Datentyp bestimmt

Unterschieden werden kann zwischen
                      Datentypen
                           |
        +------------------+----------------+
        |                                   |
elementare Datentypen              abgeleitete Datentypen
                                            |
           +------------------+-------------+----+------------------+
           |                  |                  |                  |
     eingeschränkte      aggregierte         abstrakte           Zeiger-
       Datentypen        Datentypen          Datentypen        Datentypen
Elementare Datentypen

Typische elementare Datentypen (primitive types) sind Diese Datentypen sind in den meisten Programmiersprachen vordefiniert.

Oft existieren unterschiedliche Varianten dieser Datentypen:
gleiche oder ähnliche Interpretationsvorschrift, gleiche oder ähnliche Manipulationsmöglichkeiten, jedoch unterschiedlicher Wertebereich oder unterschiedlicher interner Aufbau.

Alle anderen Datentypen lassen sich aus den elementaren Datentypen ableiten (konstruieren).
Die Werte der elementaren Datentypen sind syntaktisch eindeutig voneinander zu unterscheiden.

Abgeleitete Datentypen

Mit Hilfe von Konstruktoren kann aus einem oder mehreren Basisdatentypen ein neuer Datentyp abgeleitet werden.
Als Basisdatentyp kommen elementare oder andere zuvor abgeleitete Datentypen in Frage.

Vordefinierte abgeleitete Datentypen

Die Sprachdefinition legt fest, wie diese Datentypen konstruiert werden. Ebenso legt sie die Manipulationsmöglichkeiten fest.
it ihnen kann wie mit elementaren Datentypen gearbeitet werden.
Vordefinierte abgeleitete Datentypen sind in verschiedenen Programmiersprach(version)en oft sehr unterschiedlich realisiert.

Beispiele sind

Diese Datentypen sind nicht in allen Spracen vordefiniert bzw. unterscheiden sich teilweise erheblich im internen Aufbau der Werte.
String kann mit Hilfe von Char und Complex mit Hilfe von Real abgeleitet werden.

Eingeschränkte Datentypen

Der Wertebereich eines vorhandenen Basisdatentyps wird eingeschränkt.
Dies kann in folgender Weise geschehen:

Als Basisdatentyp sind meist nur elementare Datentypen wie Integer und Char zugelassen.

Teilbereichstypen, Aufzählungstypen sowie die elemetaren Datentypen Integer, Char und Boolean bilden oft die Gruppe der ordinalen (diskreten) Datentypen:
Ihre Werte sind eineindeutig abbildbar auf Werte vom Typ Integer.

Aggregierte Datentypen (komplexe Datentypen, composite types)

Die Werte aggregierter Datentypen bestehen aus verschiedenen Komponenten. Die Komponenten können alle den gleichen Datentyp haben (z.B. Arrays), jede Komponente kann aber auch einen anderen Datentyp besitzen (z.B. Records).
Die Komponenten sind sichtbar, alle entsprechend des Datentyps zulässigen Operationen sind uneingeschränkt auf sie anwendbar.

Abstrakte Datentypen (abstract data types, ADT)

Wie bei aggregierten Datentypen bestehen die Werte meist aus verschiedenen Komponenten. Jede Komponente kann einen eigenen Datentyp besitzen.
Der Zugriff auf die Komponenten ist - bei konsequenter Realisierung - nur über Operationen (Methoden) möglich, die Bestandteil der Datentypdeklaration sind.

Zeiger-Datentypen (pointer types)

Die Werte von Zeiger-Datentypen sind Adressen (von Variablen, Unterprogrammen, usw.).
Zeiger-Datentypen werden durch Programmiersprachen unterschiedlich unterstützt:

Variablen eines Zeiger-Datentyps heißen Zeiger (pointer).


Zu unterscheiden ist, durch wen und in welcher Form abgeleitete Datentypen eingeführt werden:

             abgeleitete Datentypen
                        |
     +------------------+----------------+
     |                                   |
  vordefinierte            benutzerdefinierte 
   Datentypen                  Datentypen
                                   |
                          +--------+-------+
                          |                |
                       anonyme          benannte
                      Datentypen       Datentypen
Vordefinierte Datentypen (built-in types)

Die Ableitungsvorschrift ist Bestandteil der Sprachdefinition.
Der Umgang mit vordefinierte Datentypen unterscheidet sich syntaktisch meist nicht von dem Umgang mit elementaren Datentypen.

Vordefinierte Datentypen besitzen einen Namen. Dieser Name gilt entweder als reserviertes Wort oder als vordefiniertes Wort.
Beispiele: INTEGER, REAL, CHAR

Benutzerdefinierte Datentypen (user-defined types)

Die Ableitungsvorschrift ist Bestandteil des Programms, welches die Datentypen benutzt.
Der Datentyp wird vom Programmierer als Benutzer der Programmiersprache eingeführt.

Anonyme Datentypen (anonymous types)

Die Einführung anonymer Datentypen erfolgt im Zusammenhang mit der Deklaration von Variablen.
Ein anonymer Datentyp wird nicht separat deklariert, die Ableitungsvorschrift ist Bestandteil einer Variablendeklaration.
Wegen des fehlenden Namens ist eine Bezugnahme auf den Datentyp nicht möglich, d.h. anonyme Datentypen können nicht nachgenutzt werden.

Beispiel (Pascal):

  VAR x : ARRAY[1..100] OF INTEGER;
Benannte Datentypen (named types)

Die Ableitungsvorschrift wird innerhalb einer Typdeklaration separat notiert, der abgeleitete Datentyp erhält einen Namen.
Der Datentyp kann nachgenutzt werden.
Beispiel:

  TYPE feld = ARRAY[1..100] OF INTEGER;
Bemerkung:
Wenn von Sprachdefinition gesprochen wird, so ist zu unterscheiden

Durch Programmiersprachen können zur Verfügung gestellt werden:

Die Konstruktion von abgeleiteter Datentypen erfolgt unter Rückgriff auf elementare Datentypen bzw. auf bereits zuvor eingeführte abgeleitete Datentypen.

Abstrakte Datentypen sind im allgemeinen benutzerdefiniert. Häufig werden den Sprachsystemen vorgefertigte abstrakte Datentypen beigefügt, diese gehören jedoch nicht zur Sprache im engeren Sinne und sind austauschbar und damit als benutzerdefiniert einzustufen.

Abgeleitete Datentypen sind, wenn auch in unterschiedlichem Maße, in allen algorithmischen Programmiersprachen möglich. Dabei sind folgende Entwicklungsniveaus zu erkennen, die jeweils aufeinander aufbauen:

Standard Pascal unterstützt keine abstrakte Datentypen.
Turbo Pascal (ab Version 5.5) erlaubt die Arbeit mit Objekten.


Eine weitere Möglichkeit, Datentypen zu klassifizieren, besteht darin, die Struktur ihrer Werte zu untersuchen:

Für abgeleitete Datentypen ist eine weitere Unterscheidung möglich:

Typbindung

Werte werden in einem Programm in Variablen oder Konstanten gespeichert.
Wie erfolgt die Bindung einer Variablen an einen Datentyp ?

Für die Zuordnung des Datentyps durch den Sprachübersetzer gibt es verschiedene Möglichkeiten: Standard Pascal ist eine streng getypte Sprache: Alle Variablen sind statisch an einen Typ gebunden. Es besteht Deklarationspflicht.


Datentypen lassen sich durch folgende Attribute charakterisieren:



P. Böhme, 14.07.1996