Ordinaler Datentyp

Ordinaler Datentyp

Formal bezeichnet ein Datentyp in der Informatik die Zusammenfassung von Objektmengen mit den darauf definierten Operationen. Dabei werden durch den Datentyp des Datensatzes unter Verwendung einer so genannten Signatur ausschließlich die Namen dieser Objekt- und Operationsmengen spezifiziert. Ein so spezifierter Datentyp besitzt noch keine Semantik.

Die weitaus häufiger verwendete, aber speziellere Bedeutung des Begriffs Datentyp stammt aus dem Umfeld der Programmiersprachen und bezeichnet die Zusammenfassung konkreter Wertebereiche und darauf definierten Operationen zu einer Einheit. Zur Unterscheidung wird für diese Datentypen in der Literatur auch der Begriff Konkreter Datentyp verwendet. Für eine Diskussion, wie Programmiersprachen mit Datentypen umgehen, siehe Typisierung.

Der gedankliche Übergang von der formalen Definition zu der im Umfeld von Programmiersprachen verwendeten Definition konkreter Datentypen, geschieht dabei über die sukzessive Einführung einer Semantik zu den formal spezifizierten Namen der Objekt- und Operationsmengen. Die Konkretisierung der Operationsmenge führt zu Abstrakten Datentypen beziehungsweise Algebren. Mit der weiteren Konkretisierung der Objektmenge ergibt sich der Konkrete Datentyp.

Inhaltsverzeichnis

Formale Definition eines Datentyps durch eine Signatur

Eine Signatur ist ein Paar (Sorten, Operationen), wobei Sorten Namen für Objektmengen und Operationen Namen für Operationen auf diesen Mengen repräsentieren. Ein Beispiel soll dies für eine vereinfachte Version des bekannten und weiter unten genauer beschriebenen (konkreten) Datentyp Integer zeigen, der hier Simple Integer heiße:

Simple Integer
 Sorten        int
 Operationen   zero:                 -> int
               +    : int x int      -> int
               -    : int x int      -> int
End Simple Integer

Dies ist eine Signatur für einen angenommenen Datentyp Simple Integer, auf dem nur zwei Operationen + und - (neben der "Erzeuger-Operation") erlaubt sind. Die einzige Sorte nennen wir int. Die Operation zero dient zur Erzeugung eines int-Elementes. Die Operationen + und - sind jeweils zweistellig und liefern jeweils wiederum ein Element der Sorte int. Wichtig ist, dass es sich hier um eine rein syntaktische Spezifikation handelt. Was ein int ist, wird nirgendwo definiert. Hierzu müsste noch eine Zuordnung des Sortennamens zu einer Menge erfolgen. Eine sinnvolle Zuordnung wäre in diesem Fall etwa die Menge der natürlichen Zahlen. Auch über die Arbeitsweise der Operationen ist nichts weiter ausgesagt als ihre Stelligkeit und ihr Ergebnis. Ob das +-Symbol der Arbeitsweise der Summenoperation entspricht, wird hier nicht festgelegt - dies wäre auch völlig unmöglich, da nicht einmal bekannt ist, ob die Operation auf den natürlichen Zahlen arbeitet. Derartige Zuordnungen fallen in den Bereich der Semantik. Eine um die Semantik erweiterte Spezifikation könnte daher folgendermaßen aussehen:

Simple Integer
 /* reine Syntax */
 Sorten        int
 Operationen   zero:                 -> int
               +    : int x int      -> int
               -    : int x int      -> int
 /* Zuordnung einer Semantik */
 Mengen        int = IN
 Funktionen    zero = 0
               +    : int x int entspreche der Summe zweier Zahlen aus IN
               -    : int x int entspreche der arithmetischen Differenz zweier Zahlen aus IN
End Simple Integer

Damit wird allerdings der Bereich einer Signatur bereits überschritten. Diese Spezifikation würde man vielmehr als Algebra bezeichnen. Die Spezifikation kommt auf diese Weise jedoch dem programmiersprachlichen Verständnis des Begriffes Datentyp näher, dem sich ein Großteil des restlichen Artikels widmet.

Datentypen in Programmiersprachen

Viele Programmiersprachen bieten eine eigene Menge an vordefinierten Datentypen, bei denen das Prinzip des jeweiligen Wertebereichs, wie beispielsweise Ganze Zahlen, Gleitkommazahlen oder Zeichenketten, gleich ist. Die tatsächlichen Namen dieser Datentypen und die genauen Definitionen der Wertebereiche und der dazugehörigen Operationen unterscheiden sich jedoch zum Teil stark, da jene von der verwendeten Programmiersprache, der verwendeten Rechnerplattform und anderen compilerabhängigen Faktoren abhängen.

Datentypen werden in der Programmierung verwendet, um Speicherbereichen eine konkrete Semantik zuzuweisen. Diese Speicherbereiche werden Variablen oder Konstanten genannt. Die Datentypen ermöglichen es einem Compiler oder Laufzeitumgebung, die Typverträglichkeit der vom Programmierer angegebenen Operationen zu überprüfen. Unzulässige Operationen werden zum Teil 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 und zusammengesetzte Datentypen. Ein weitere Ordnungsbegriff ist Ordinaler Datentyp.

Ordinale Datentypen

Ordinale Datentypen sind dadurch gekennzeichnet, dass auf ihnen eine feste Ordnungsrelation definiert ist, die ihren Werten eine eindeutige Ordnungsnummer zuordnet. Dadurch ist die Reihenfolge der Werte festgelegt. Als Folge hat

  • jeder Wert außer dem ersten genau einen direkten Vorgänger und
  • jeder Wert außer dem letzten genau einen direkten Nachfolger;

Ob ein elementarer Datentyp auch ein ordinaler Datentyp ist, hängt von der Festlegung in der konkreten Programmiersprache ab. Beispiele:

  • Der Aufzählungstyp ist in PASCAL ein ordinaler Datentyp, da die Werte von links nach rechts geordnet sind; Nachfolger, Vorgänger sind über Standardfunktionen bestimmbar. In C ist das nicht der Fall.
  • Boolean ist ein spezieller Aufzählungstyp, siehe dort.
  • Ganze Zahlen und Natürliche Zahlen sind von Natur aus ordinale Datentypen.

Elementare Datentypen

Elementare Datentypen, auch einfache Datentypen oder primitive Datentypen genannt, können nur einen Wert des entsprechenden Wertebereichs aufnehmen. Sie besitzen eine festgelegte Anzahl von Werten (Diskretheit) sowie eine fest definierte Ober- und Untergrenze (Endlichkeit). Daher können reelle Zahlen als Gleitkommazahlen nur mit einer bestimmten Genauigkeit abgebildet werden. Für elementare Datentypen sind in einer Programmiersprache Grundoperationen definiert, bei den Zahlen sind das die Grundrechenarten. Datentypen haben je nach Programmiersprache und Wertebereich unterschiedliche Bezeichnungen, und werden groß oder klein geschrieben (hier zur Übersicht alle groß).

Ganze Zahlen

  • Bezeichnung: BIGINT, BIN, BIN FIXED, BINARY, COMP, INT, INTEGER, LONG, LONG INT, LONGINT, MEDIUMINT, SHORT, SHORTINT, SMALLINT
  • Wertebereich: Meist 32 Bit ( -2^{31} \cdots 2^{31} -1 ), 16 Bit, 64 Bit
  • Operationen: +, -, *, <, >, =, Division mit Rest und Modulo

Natürliche Zahlen

  • Bezeichnung: BYTE, CARDINAL, NATURAL, UNSIGNED, UNSIGNED CHAR, UNSIGNED INT, UNSIGNED LONG, UNSIGNED SHORT, WORD
  • Wertebereich: Meist 32 Bit, ( 0 \cdots 2^{32}-1 ), 8 Bit, 16 Bit, 64 Bit
  • Operationen: +, -, *, <, >, =, Division mit Rest und Modulo

Festkommazahlen (Dezimalzahlen)

  • Bezeichnung: COMP-3, CURRENCY, PACKED DECIMAL, DEC, DECIMAL, NUMERIC
  • Wertebereich: Wertebereich direkt abhängig von der maximalen Stellenanzahl, die meist vorzugeben ist
  • Operationen: +, -, *, <, >, =, Division mit Rest und Modulo

Aufzählungstypen

  • Bezeichnung: ENUM, SET oder implizit
  • Wertebereich: Frei wählbar, beispielsweise (SCHWARZ, ROT, BLAU, GELB)
  • Operationen: <, >, =

Boolean (logische Werte)

  • Bezeichnung: BOOL, BOOLEAN, LOGICAL, oder (implizit ohne Bezeichner)
  • Wertebereich: (TRUE, FALSE) oder (= 0, ≠ 0) oder (= -1, = 0)
  • Operationen: NOT, AND, XOR, NOR, NAND, OR, =, ≠

Zeichen (einzelnes Zeichen)

  • Bezeichnung: CHAR, CHARACTER
  • Wertebereich: Alle Elemente des Zeichensatzes (zum Beispiel Buchstaben)
  • Operationen: <, >, =, Konvertierung in INTEGER, ...

Gleitkommazahlen

  • Bezeichnung: COMP-1, COMP-2, DOUBLE, DOUBLE PRECISION, EXTENDED, FLOAT, LONG DOUBLE, LONG_FLOAT, LONGREAL, REAL, SINGLE, SHORTREAL, DECIMAL
  • Wertebereich: Verschiedene Definitionen (siehe unten)
  • Operationen: +, -, *, /, <, >, =
Genauigkeit am Beispiel PASCAL (in verschiedenen Dialekten):
          Bitanzahl n   Wertebereich                Genauigkeit
 REAL         48        2.9E-39   .. 1.7E38         11-12 Stellen
 SINGLE       32        1.5E-45   .. 3.4E38          7- 8 Stellen
 DOUBLE       64        5.0E-324  .. 1.7E308        15-16 Stellen
 EXTENDED     80        1.9E-4951 .. 1.1E4932       19-20 Stellen
 CURRENCY     64          -922337203685477.5808..
                           922337203685477.5807     19-20 Stellen
 SHORTREAL    32        1.5E-45   .. 3.4E38          7- 8 Stellen
 REAL         64        5.0E-324  .. 1.7E308        15-16 Stellen
 REAL         64        1.1E-306  .. 1.8E308        15-16 Stellen

Zeigertypen / Dynamische Datentypen

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, IntPtr oder auch nur kurz Stern (*)
  • Wertebereich: Adresse des Basistyps (Meist anonym)
  • Operationen: Referenz, Dereferenz, in einigen Sprachen: +, -, *, /

konstanter Nullzeiger

  • Bezeichnung: NULL, VOID, None, NIL, Nothing oder in einigen Sprachen auch semantisch äquivalent mit 0
  • Wertebereich: ohne
  • Operationen: = (Gleichheit)
  • Bedeutung: Dieser Zeiger repräsentiert die Undefiniertheit bzw. die Abwesenheit aller anderen Typen

Zusammengesetzte 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 (Tupel), Tabelle; Feld (mehrdeutig!)
    • Bezeichnung: ARRAY, (implizite Definition mit [n] oder (n) ohne Bezeichner)
    • 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 fester Länge (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: Array of CHAR, CHAR(n), CHAR[n]
    • Wertebereich: Alle möglichen Zeichenketten
    • Operationen: Stringfunktionen (Teilstring, Konkatenation [Zusammensetzung]), <, >, =
  • Zeichenkette variabler Länge. Die Länge ist feststellbar, implizit durch ein Metazeichen als String-Endezeichen (ASCII \0), explizit durch eine Variable, oder über eine Standardfunktion. Häufig als Abstrakter Datentyp in einer Standardbibliothek.
    • Bezeichnung: String, Array of CHAR, VARCHAR, CLOB, Text
    • Wertebereich: Zeichenketten variabler Länge
    • Operationen: Stringfunktionen (Teilstring, Länge, Konkatenation [Zusammensetzung]), <, >, =
  • binäre Zeichenkette variabler Länge. Die Länge kann durch eine Variable oder über eine Standardfunktion ermittelt werden. [1][2]
    • Bezeichnung: BLOB
    • Wertebereich: binäre Zeichenketten variabler Länge
    • Operationen: Länge, Konkatenation [Zusammensetzung], =
  • Verbund, Satz, Struktur, Bereich
    • Bezeichnung: RECORD, STRUCT, CLASS (erweiterte Bedeutung), (implizite Definition über Stufennummern)
    • Wertebereich: Ein Verbund enthält eine Folge verschiedener Komponenten, welche verschiedene Datentypen haben können. Als Komponententyp ist jeder Typ zulässig.
    • Operationen: Zuweisung, Gleichheit (stark programmiersprachenabhängig!)
    • 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

Definition
Ein Abstrakter Datentyp (ADT) ist eine Sammlung von Daten in Variablen – verbunden mit der Definition aller Operationen, die auf sie zugreifen.

Da der Zugriff (lesend oder schreibend) nur über die festgelegten Operationen erfolgt, sind die Daten nach außen gekapselt. Jeder ADT enthält einen Datentyp bzw. eine Datenstruktur.

Objektorientierte Programmiersprachen unterstützen durch ihr Klassenkonzept die Erstellung von ADTs, da hier Daten und Operationen gebunden werden, und die Daten geschützt werden können. Einige modulare Programmiersprachen wie Ada oder Modula-2 unterstützen ebenfalls gezielt die Erstellung von abstrakten Datentypen.

Siehe auch

Weblinks

Java

SQL

ADA

Einzelnachweise

  1. David Axmark, Michael „Monty“ Widenius u. a.: Die Spaltentypen BLOB und TEXT. In: MySQL 5.1 Referenzhandbuch. MySQL AB, 11. August 2008. Abgerufen am 28. August 2008.
  2. Jack Melnick u. a.: LOB and BFILE Operations. In: Oracle® Call Interface Programmer's Guide, 11g Release 1 (11.1). Oracle, Mai 2008. Abgerufen am 28. August 2008. (englisch)

Wikimedia Foundation.

Игры ⚽ Нужно решить контрольную?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Datentyp — Formal bezeichnet ein Datentyp in der Informatik die Zusammenfassung von Objektmengen mit den darauf definierten Operationen. Dabei werden durch den Datentyp des Datensatzes unter Verwendung einer so genannten Signatur ausschließlich die Namen… …   Deutsch Wikipedia

  • Primitiver Datentyp — Formal bezeichnet ein Datentyp in der Informatik die Zusammenfassung von Objektmengen mit den darauf definierten Operationen. Dabei werden durch den Datentyp des Datensatzes unter Verwendung einer so genannten Signatur ausschließlich die Namen… …   Deutsch Wikipedia

  • Datentypen — Formal bezeichnet ein Datentyp in der Informatik die Zusammenfassung von Objektmengen mit den darauf definierten Operationen. Dabei werden durch den Datentyp des Datensatzes unter Verwendung einer so genannten Signatur ausschließlich die Namen… …   Deutsch Wikipedia

  • Ordinale Datentypen — Formal bezeichnet ein Datentyp in der Informatik die Zusammenfassung von Objektmengen mit den darauf definierten Operationen. Dabei werden durch den Datentyp des Datensatzes unter Verwendung einer so genannten Signatur ausschließlich die Namen… …   Deutsch Wikipedia

  • Borland Delphi — Delphi ist zum einen der Name einer vom Unternehmen Borland entwickelten objektorientierten Programmiersprache, die ursprünglich aus der von Niklaus Wirth erstellten Programmiersprache Pascal hervorgegangen ist, und zum anderen die Bezeichnung… …   Deutsch Wikipedia

  • Borland Developer Studio — Delphi ist zum einen der Name einer vom Unternehmen Borland entwickelten objektorientierten Programmiersprache, die ursprünglich aus der von Niklaus Wirth erstellten Programmiersprache Pascal hervorgegangen ist, und zum anderen die Bezeichnung… …   Deutsch Wikipedia

  • Delphi-Language — Delphi ist zum einen der Name einer vom Unternehmen Borland entwickelten objektorientierten Programmiersprache, die ursprünglich aus der von Niklaus Wirth erstellten Programmiersprache Pascal hervorgegangen ist, und zum anderen die Bezeichnung… …   Deutsch Wikipedia

  • Delphi Programmiersprache — Delphi ist zum einen der Name einer vom Unternehmen Borland entwickelten objektorientierten Programmiersprache, die ursprünglich aus der von Niklaus Wirth erstellten Programmiersprache Pascal hervorgegangen ist, und zum anderen die Bezeichnung… …   Deutsch Wikipedia

  • ObjectPascal — Delphi ist zum einen der Name einer vom Unternehmen Borland entwickelten objektorientierten Programmiersprache, die ursprünglich aus der von Niklaus Wirth erstellten Programmiersprache Pascal hervorgegangen ist, und zum anderen die Bezeichnung… …   Deutsch Wikipedia

  • Object Pascal — Delphi ist zum einen der Name einer vom Unternehmen Borland entwickelten objektorientierten Programmiersprache, die ursprünglich aus der von Niklaus Wirth erstellten Programmiersprache Pascal hervorgegangen ist, und zum anderen die Bezeichnung… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”