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 Operationen: erzeugeKeller: -> Keller ( erzeugt einen leeren Keller) Damit eine Programmiersprache in der Lage ist, abstrakte Datentypen abzubilden, sollten nach [Appelrath und Ludewig 2000] vier Forderungen erfüllt 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. LiteraturAppelrath 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 |