Benutzerspezifische Werkzeuge

Datentyp

Leena Suhl (unter Mitarbeit von Christian Wolf)

Ein Datentyp beschreibt eine Wertemenge mit darauf definierten Operationen. Man unterscheidet hierbei zwischen elementare Datentypen, zu welchen auch Zeigertypen zählen, und abstrakte Datentypen.

Ein Datentyp beschreibt eine Wertemenge mit darauf definierten Operationen. Ein Beispiel ist der elementare Datentyp „int“, dessen Wertebereich abhängig von der Rechnerarchitektur und Programmiersprache eine Untermenge der ganzen Zahlen ist. Zulässige Operationen sind die arithmetischen Operationen wie z.B. Addition, Subtraktion und Multiplikation.

Als elementare Datentypen gelten die natürlichen Zahlen, die ganzen Zahlen, Fließkommazahlen, logische Werte, Aufzählungstypen, Zeigertypen sowie einzelne Zeichen. Je nach Programmiersprache und Rechnerarchitektur sind die Wertebereiche für die einzelnen Datentypen unterschiedlich. Die definierten Operationen sind für Zahlentypen die arithmetischen Operationen +,-,*, Division mit Rest und Modulo sowie die Vergleichsoperationen  <,> und =. Für logische Werte gibt es die logischen Operationen AND,OR,NOT (und daraus abgeleitete Operationen) sowie die Vergleichsoperationen = und !=. Für Zeichentypen gelten die Vergleichsoperationen <,> und =. Aufzählungstypen besitzen ebenfalls die Vergleichsoperationen <,> und =. Der Wertebereich wird bei der Deklaration des Typs festgelegt, in C++ z.B. so: enum Gemuese { Paprika, Knoblauch, Zwiebel }. (Die hier verwendete beispielhafte Symbolik ist an die in C++ verwendete Symbolik angelehnt)

Zeigertypen sind ein besonderer elementarer Datentyp. Sie verweisen auf Speicherstellen, an denen Objekte anderer Datentypen gespeichert sind. Der gültige Wertebereich eines Zeigertyps umfasst deshalb alle Speicherstellen auf die das Programm zugreifen darf. Zusammengesetzte oder auch komplexe Datentypen bestehen aus anderen elementaren und/oder zusammengesetzten Datentypen. Reihungen (Arrays) bestehen aus einer festgelegten Anzahl an Elementen eines Datentyps. Zeichenketten (Strings) sind prinzipiell nur Reihungen aus Zeichentypen. Da Zeichenverarbeitung aber eine häufig durchgeführte Aufgabe ist, gibt es dafür in vielen Programmiersprachen diesen Datentyp mit erweiterten Operationen wie z.B. Konvertierung von Klein- in Großbuchstaben. Verbundtypen bestehen aus verschiedenen anderen Datentypen. Grundlegende Operationen für Verbundtypen sind die Zuweisung sowie der Gleichheitsoperator, deren Bedeutung aber programmiersprachenabhängig ist.

Ein abstrakter Datentyp (ADT) beschreibt einen Datentyp mit Wertebereich und Operationen, ohne jedoch Implementierungsdetails zu verraten. Die Operationen werden auch als Interface des ADTs bezeichnet, welches dazu dient, dass der ADT nur über die dort definierten Operationen verwendet werden kann [Mitchell 2002]. Häufig verwendete abstrakte Datentypen sind der Keller, die Schlange, verschiedene Arten von Listen, der Haufen sowie verschiedene Arten von Bäumen. Der Keller wird im Folgenden beispielhaft vorgestellt anhand der verwendeten Datentypen und der anwendbaren Operationen. Diese sind als Signatur angegeben. Die Semantik der Operationen wird dahinter erläutert. Aus der Signatur alleine lässt sich keine Semantik ablesen, nur zusammen lässt sich ein ADT sinnvoll einsetzen.

Verwendete Datentypen:

 Keller, int, bool

(int und bool sind elementare Datentypen, die bereits vorhanden sein müssen)

Operationen:

erzeugeKeller: -> Keller ( erzeugt einen leeren Keller)

istKellerLeer: Keller -> bool ( gibt zurück ob der Keller leer ist)

push: int x Keller -> Keller ( die Zahl wird oben auf den Keller gestapelt)

pop: Keller -> Keller ( die oberste Zahl wird vom Keller entfernt)

top: Keller -> int ( gibt die oberste Zahl vom Keller aus)

Damit eine Programmiersprache in der Lage ist, abstrakte Datentypen abzubilden, sollten nach [Appelrath und Ludewig 2000] vier Forderungen erfüllt sein:

  1. Der Compiler muss in der Lage sein, Speicherplatz für die Variablen eines ADTs zu belegen.
  2. Die innere Struktur des Typs darf nicht eingeschränkt werden.
  3. Die innere Struktur des Typs darf nicht für andere Typen sichtbar werden. Das bedeutet auch, dass Änderungen an der inneren Struktur eines Typs keine Auswirkungen nach außen haben dürfen.
  4. Die Zugriffe auf Variablen eines ADTs sollten nicht wesentlich anders und etwa gleich effizient wie die auf Variablen anderer Typen sein.

Datentypen können entweder in einer Programmiersprache vordefiniert sein, wie die elementaren Typen, Zeigertypen oder zusammengesetzten Typen, oder sie können in eigenen Programmen oder in Bibliotheken definiert sein wie zusammengesetzte Datentypen oder konkrete Ausprägungen von ADTs.

Literatur

Appelrath und Ludewig 2000: Hans-Jürgen Appelrath, Jochen Ludewig, Skriptum Informatik – eine konventionelle Einführung,  2000, B. G. Teubner Stuttgart, Leipzig

Mitchell 2002: John C. Mitchell, Concepts in Programming Languages, 2002, Cambridge University Press, Cambridge

Autor


 

Prof. Dr. Leena Suhl, Universität Paderborn, DS&OR Lab, Warburger Str. 100, 33098 Paderborn

Autoreninfo


Zuletzt bearbeitet: 26.09.2014 08:49
Letzter Abruf: 17.12.2017 12:43
Artikelaktionen