Zum Inhalt springen

Datentyp

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 9. Juli 2004 um 03:07 Uhr durch Margo basilo (Diskussion | Beiträge) (tippo). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Ein Datentyp ist in der Informatik die Zusammenfassung eines Wertebereichs mit den darauf definierten Operationen.

In der Programmierung werden Datentypen verwendet, um Speicherbereichen eine konkrete Semantik zuzuweisen. Die Datentypen ermöglichen es dem Compiler, die Eingaben eines Programmierers zu überprüfen. Fehlerhafte Operationen werden bereits bei der Erstellung eines Programms erkannt, so dass der Compiler beispielsweise die Division einer Zeichenkette ‚HANS’ durch die Zahl ‚5’ verhindert.

Die Programmiersprachen bieten alle eine Grundmenge an Datentypen. Die Namen der Datentypen sind jedoch in den Programmiersprachen meist unterschiedlich. Das Prinzip des jeweiligen Wertebereichs ist identisch (zum Beispiel ganze Zahlen), der tatsächliche Wertebereich hängt aber von dem verwendeten Rechnertyp ab.

Man unterscheidet elementare, zusammengesetzte und abstrakte Datentypen.

Elementare 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 Wert außer dem Ersten besitzt genau einen direkten Vorgänger und jeder Wert außer dem Letzten besitzt genau einen direkten Nachfolger (geordnete Menge). Ordinale Datentypen sind u.a.:

  • Aufzählungstypen
    • Frei definierbare:
      • Bezeichnung: ENUM oder SET
      • Wertebereich: Frei wählbar beispielsweise (ROT, SCHWARZ, GELB)
      • Operationen: <, >, =
    • Vordefinierte:

Nichtordinale Datentypen

Nichtordinale Datentypen sind dadurch gekennzeichnet, dass ihre Werte keine eindeutigen Vorgänger bzw. Nachfolger besitzen. Nichtordinale Datentypen sind u.a.:

Zeigertypen

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.

  • Zeiger
    • 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:

  • Reihung, Feld, Tabelle
    • Bezeichnung: ARRAY of ...
    • 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.
    • Operationen: <, >, =, Zuweisung
    • 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.)
    • Bezeichnung: STRING oder ARRAY of CHAR
    • Wertebereich: Alle möglichen Zeichenketten
    • Operationen: Konkatenation, Trennung ab x.tem Zeichen, <, >, =
  • Verbund
    • Bezeichnung: RECORD oder STRUCT (UNION)
    • Wertebereich: Ein Verbund enthält verschiedene Komponenten, welche aus verschiedenen Datentypen bestehen können. Als Komponententyp ist jeder Typ zulässig.
    • Operationen: Zuweisung, Gleichheit
    • Beispiel: type Prüfung is RECORD (Fach: STRING, Note: INTEGER, Lehrer: STRING, Termin: DATUM)


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. Objektorientierte Programmiersprachen erweiterten diese Gedanken um die Eigenschaften der Polymorphie und der Vererbung und erschufen damit die so genannten Objekte.

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 specifications): 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 oder durch Systemabsturz zu verlieren 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.

Beispiele für abstrakte Datentypen


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.