Viele Programmiersprachen bieten eine eigene Menge an vordefinierten Datentypen, bei denen das Prinzip des jeweiligen Wertebereichs, wie beispielsweise Ganze Zahlen, Fließkommazahlen oder Zeichenketten, gleich ist. Die tatsächlichen Namen dieser Datentypen und die genauen Definitionen der Wertebereiche und der dazugehörigen Operationen unterscheidet sich jedoch z.T. stark, da jene von der verwendeten Programmiersprache, der verwendeten Rechnerplattform und anderen compilerabhängigen Faktoren abhängen.
Unzulässige Operationen werden z.T. bereits beim Compilieren erkannt, so dass beispielsweise die Division einer Zeichenkette ‚HANS’ durch die Zahl ‚5’, was nicht sinnvoll und in üblichen Programmiersprachen undefiniert ist, verhindert wird.
Man unterscheidet elementare, zusammengesetzte und abstrakte Datentypen.
Elementare (einfache) Datentypen können nur ein Datum des entsprechenden Wertebereichs aufnehmen. Sie besitzen eine festgelegte Anzahl von Werten (Diskretheit) sowie eine fest definierte Ober- und Untergrenze (Endlichkeit). Es wird dabei zwischen ordinalen und nichtordinalen Datentypen unterschieden.
Ordinale Datentypen
Ordinale Datentypen sind dadurch gekennzeichet, dass ihrem Wert eine eineindeutige Ordnungsnummer zugeordnet ist, d.h. jeder außer dem ersten Wert besitzt genau einen direkten Vorgänger und jeder außer dem letzten Wert besitzt genau einen direkten Nachfolger (geordnete Menge). Ordinale Datentypen sind u.a.:
Wertebereich: Alle Elemente des Zeichensatzes (zum Beispiel Buchstaben)
Operationen: <, >, =, Konvertierung in INTEGER,.._.
Nichtordinale Datentypen
Nichtordinale Datentypen sind dadurch gekennzeichnet, dass ihre Werte keine eindeutigen Vorgänger bzw. Nachfolger besitzen. Nichtordinale Datentypen sind u.a.:
Eine Besonderheit sind Zeiger, dessen wirklicher Wertebereich in der Regel anonym bleibt, da es 'nur' eine Referenz auf einen anderen beliebigen Datentyp ist. Je nach referenziertem Typ werden Zeiger auf bestimmte Elemente gesondert benannt, wie beispielsweise Zeiger auf Dateien, Drucker oder Pipes.
Bezeichnung: ACCESS, POINTER oder auch nur kurz Stern '*'
Wertebereich: Adresse des Basistyps (Meist anonym)
Operationen: Referenz, Dereferenz, in einigen Sprachen: +, -, *, /
konstanter Nullzeiger
Bezeichnung: NULL, VOID oder NIL
Wertebereich: ohne
Operationen: = (Gleichheit)
Bedeutung: Dieser Zeiger repräsentiert die Undefiniertheit bzw. die Abwesenheit aller anderen Typen
Zusammengesetze Datentypen
Zusammengesetzte Datentypen sind ein Datenkonstrukt, welches aus einfacheren Datentypen besteht. Da sie theoretisch beliebig komplex werden können, werden sie auch häufig schon zu den Datenstrukturen gezählt. Den meisten Programmiersprachen gemeinsam sind:
Wertebereich: Abbildung einer endlichen Menge (Indexmenge) auf den Wertebereich eines Basistyps (Elementtyp). Die Indexmenge muss dabei ordinal sein. Durch Anwenden mehrerer Indizes entsteht eine mehrdimensionale Reihung.
Beispiel: type 3D-Vektor is ARRAY(1..3) of INTEGER;
Zeichenkette (Im Grunde sind Zeichenketten selbst nur eine Reihung des Typs Character (Zeichen). Da sie jedoch in vielen Programmiersprachen vordefiniert sind, werden sie hier gesondert aufgelistet.)
Operationen: Konkatenation, Trennung ab x.tem Zeichen, <, >, =
Verbund
Bezeichnung: RECORD oder STRUCT
Wertebereich: Ein Verbund enthält eine Folge verschiedener Komponenten, welche verschiedene Datentypen haben können. Als Komponententyp ist jeder Typ zulässig.
Beispiel: type Prüfung is RECORD (Fach: STRING, Schueler: STRING, Punkte: INTEGER, Lehrer: STRING, Termin: DATUM)
In vielen Programmiersprachen existieren Möglichkeiten, den Speicherbereich eines Verbunds mehrfach unterschiedlich zu interpretieren. Das wird Variantenrecord oder UNION genannt. Dabei ist jedoch meist keine Typsicherheit mehr gegeben.
Abstrakte Datentypen
Alle Datentypen, die über die zugehörigen Operationen eine Funktionalität bieten, die von dem verwendeten Wertebereich bzw. Objekt unabhängig ist, sind abstrakte Datentypen (ADT).
Auch bei den abstrakten Datentypen ist die Abgrenzung zu den Datenstrukturen schwierig, da die Datentypen je nachdem, ob der Schwerpunkt der Betrachtung auf den Daten oder auf den darauf definierten Operationen liegt, Datenstruktur oder Abstrakter Datentyp genannt werden.
Einige Programmiersprachen, wie Ada oder Modula-2 unterstützen gezielt die Erstellung von abstrakten Datentypen.
Eigenschaften abstrakter Datentypen
Anzustrebende Eigenschaften eines gut programmierten ADT sind:
Universalität (implementation independence): Der einmal entworfene und implementierte ADT kann in jedes beliebige Programm einbezogen und dort benutzt werden (z.B. in Form einer Unit).
Präzise Beschreibung (precise specification): Die Schnittstelle zwischen Interface und Implementation muss eindeutig und vollständig sein.
Einfachheit (simplicity): Der Anwender muss sich nicht um die innere Realisation des ADT kümmern, da der ADT seine Repräsentation und Verwaltung im Speicher selbst übernimmt.
Kapselung (information hiding): Das Interface soll als eine hermetische Grenze aufgefasst werden. Der Anwender soll sehr genau wissen, was ein ADT tut, aber keinesfalls, wie er es tut.
Geschütztheit (integrity): Der Anwender kann in die interne Struktur der Daten nicht eingreifen. Die Gefahr, Daten ungewollt zu löschen bzw. zu verändern sowie Programmierfehler zu begehen, ist dadurch deutlich herabgesetzt.
Modularität (modularity): Das modulare Prinzip erlaubt übersichtliches und damit sicheres Programmieren und leichten Austausch von Programmteilen. Bei der Fehlersuche können einzelne Module sehr isoliert betrachtet werden. Viele Verbesserungen können über ADTs nachträglich ohne die geringste Änderung in sämtlichen Umgebungs- bzw. Anwendungsprogrammen übernommen werden.
Wird objektorientiert programmiert, können diese Eigenschaften besonders leicht erfüllt werden, weil das objektorientierte Paradigma auf natürliche Weise die Erstellung von ADTs unterstützt. Eine weitere Möglichkeit zur Erstellung von ADTs (auch in Verbindung mit objektorientierter Programmierung) sind generische Typen.
Erläuterung am Beispiel: Der abstrakte Datentyp Warteschlange bietet die Funktionalität beliebige Objekt nach dem FIFO-Prinzip zu verarbeiten. Ob in die Warteschlange zum Beispiel Druckaufträge, Kopieraufträge, Tastatureingaben oder beliebige andere Objekte eingereiht und verarbeitet werden, ist für die Funktionalität irrelevant. Die Warteschlange abstrahiert demnach vom verarbeiteten Objekt.
Dieser Beitrag ist aus der XML-Version der deutschen WikiPedia® entwickelt worden und unterliegt inhaltlich den GNU FDL-Lizenzbestimmungen. Linkziele außerhalb der wikipedia-Inhalte unterliegen den Urheberrechten der jeweiligen Anbieter
( DirectDownloads ) Kalenderblätter druckfertig aufbereitet für Schmuckblätter zum Selbstdrucken im Word DOC6/RTF Format, je Euro 5 über Click&BuyJAN | FEB | MÄRZ APRIL | MAI | JUNI JULI | AUG | SEPT OKT | NOV | DEZ
Das Geschenk für jeden Anlass, nicht nur bei 'runden' Jubiläen Andere Einzeltage oder Zahlungsarten bitte HIER bestellen
Diese Web Site verdient ihr Geld durch Produktverkäufe (CD-ROM, downloads) und in erster Linie durch Anzeigen. Wenn Sie als Webmaster zuverlässige Partner suchen für Ihr eigenes Anzeigenschäft, dürfen Sie sich gerne auf unsere Empfehlungen stützen:
z.B.: GigaCash & ProfiWin