www.wikidata.de-de.nina.az
Der Titel dieses Artikels ist mehrdeutig Zum internen Aufbau von Dateien siehe Dateiformat zu den Regeln zur programmtechnischen Interpretation von Daten siehe Datenformat Formal bezeichnet ein Datentyp vom englischen data type oder eine Datenart in der Informatik die Zusammenfassung von Objektmengen mit den darauf definierten Operationen Dabei werden durch den Datentyp des Datensatzes unter Verwendung einer sogenannten Signatur ausschliesslich die Namen dieser Objekt und Operationsmengen spezifiziert Ein so spezifizierter Datentyp besitzt noch keine Semantik Die weitaus haufiger verwendete aber speziellere Bedeutung des Begriffs Datentyp stammt aus dem Umfeld der Programmiersprachen und bezeichnet die Zusammenfassung konkreter Wertebereiche und darauf definierter Operationen zu einer Einheit Beispiele konnen Ganz oder Kommazahlen Zeichenketten oder auch komplexere Typen wie Datum Zeit oder Objekte sein Zur Unterscheidung wird fur diese Datentypen in der Literatur auch der Begriff Konkreter Datentyp verwendet Fur eine Diskussion wie Programmiersprachen mit Datentypen umgehen siehe Typisierung Der gedankliche Ubergang von der formalen Definition zu der im Umfeld von Programmiersprachen verwendeten Definition konkreter Datentypen geschieht dabei uber die sukzessive Einfuhrung einer Semantik zu den formal spezifizierten Namen der Objekt und Operationsmengen Die Konkretisierung der Operationsmenge fuhrt zu Abstrakten Datentypen beziehungsweise Algebraischen Strukturen Mit der weiteren Konkretisierung der Objektmenge ergibt sich der Konkrete Datentyp Inhaltsverzeichnis 1 Formale Definition eines Datentyps durch eine Signatur 2 Datentypen in Programmiersprachen 2 1 Ordinale Datentypen 2 2 Elementare Datentypen 2 2 1 Ganze Zahlen 2 2 2 Naturliche Zahlen 2 2 3 Festkommazahlen Dezimalzahlen 2 2 4 Aufzahlungstypen 2 2 5 Boolean logische Werte 2 2 6 Zeichen einzelnes Zeichen 2 2 7 Gleitkommazahlen 2 2 8 Bitmengen 2 3 Zeigertypen Dynamische Datentypen 2 3 1 Zeiger 2 3 2 Konstanter Nullzeiger 2 3 3 Prozedurtypen 2 4 Zusammengesetzte Datentypen 2 5 Zusatzliche individuelle Formatangaben 3 Funktionen als Werte erster Ordnung 4 Universeller Datentyp 5 Abstrakte Datentypen 6 Anonyme Datentypen 7 Polymorphie von Datentypen 8 Generische Programmierung 9 Weblinks 10 EinzelnachweiseFormale Definition eines Datentyps durch eine Signatur BearbeitenEine Signatur ist ein Paar Sorten Operationen wobei Sorten Namen fur Objektmengen und Operationen Namen fur Operationen auf diesen Mengen reprasentieren Ein Beispiel soll dies fur eine vereinfachte Version des bekannten und weiter unten genauer beschriebenen konkreten Datentyp Integer zeigen der hier Simple Integer heisse Simple IntegerSorten intOperationen zero gt int int x int gt int int x int gt intEnd Simple IntegerDies ist eine Signatur fur 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 musste noch eine Zuordnung des Sortennamens zu einer Menge erfolgen Eine sinnvolle Zuordnung ware in diesem Fall etwa die Menge der naturlichen Zahlen Auch uber 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 ware auch vollig unmoglich da nicht einmal bekannt ist ob die Operation auf den naturlichen Zahlen arbeitet Derartige Zuordnungen fallen in den Bereich der Semantik Eine um die Semantik erweiterte Spezifikation konnte daher folgendermassen aussehen Simple Integer reine Syntax Sorten int Operationen zero gt int int x int gt int int x int gt int Zuordnung einer Semantik Mengen int INFunktionen zero 0 int x int entspreche der Summe zweier Zahlen aus IN int x int entspreche der arithmetischen Differenz zweier Zahlen aus INEnd Simple IntegerDamit wird allerdings der Bereich einer Signatur bereits uberschritten Diese Spezifikation wurde man vielmehr als Algebra bezeichnen Die Spezifikation kommt auf diese Weise jedoch dem programmiersprachlichen Verstandnis des Begriffes Datentyp naher dem sich ein Grossteil des restlichen Artikels widmet Datentypen in Programmiersprachen Bearbeiten nbsp 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 tatsachlichen Namen dieser Datentypen und die genauen Definitionen der Wertebereiche und der dazugehorigen Operationen unterscheiden sich jedoch zum Teil stark da jene von der verwendeten Programmiersprache der verwendeten Plattform und anderen compilerabhangigen Faktoren abhangen Datentypen werden in der Programmierung verwendet um Speicherbereichen eine konkrete Semantik zuzuweisen Diese Speicherbereiche werden Variablen oder Konstanten genannt Die Datentypen ermoglichen es einem Compiler oder Laufzeitumgebung die Typvertraglichkeit der vom Programmierer angegebenen Operationen zu uberprufen Unzulassige Operationen werden zum Teil bereits beim Kompilieren erkannt so dass beispielsweise die Division einer Zeichenkette HANS durch die Zahl 5 was nicht sinnvoll und in ublichen Programmiersprachen undefiniert ist verhindert wird Man unterscheidet elementare und zusammengesetzte Datentypen Ein weiterer Ordnungsbegriff ist Ordinaler Datentyp Ordinale Datentypen Bearbeiten 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 ausser dem ersten genau einen direkten Vorganger und jeder Wert ausser dem letzten genau einen direkten Nachfolger Ob ein elementarer Datentyp auch ein ordinaler Datentyp ist hangt von der Festlegung in der konkreten Programmiersprache ab Beispiele Der Aufzahlungstyp ist in PASCAL ein ordinaler Datentyp da die Werte von links nach rechts geordnet sind Nachfolger Vorganger sind uber Standardfunktionen bestimmbar In C ist das nicht der Fall Boolean ist ein spezieller Aufzahlungstyp mit den beiden Werten falsch Ordnungswert 0 und wahr Ordnungswert 1 meist englisch false und true genannt Ganze Zahlen und Naturliche Zahlen sind von Natur aus ordinale Datentypen Elementare Datentypen Bearbeiten Elementare Datentypen auch einfache Datentypen oder primitive Datentypen genannt konnen nur einen Wert des entsprechenden Wertebereichs aufnehmen Sie besitzen eine festgelegte endliche Anzahl von Werten Diskretheit Daher konnen reelle Zahlen als Gleitkommazahlen nur mit einer bestimmten Genauigkeit abgebildet werden Fur 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 gross oder klein geschrieben hier zur Ubersicht alle gross Ganze Zahlen Bearbeiten Bezeichnung BIGINT BIN BIN FIXED BINARY BYTE COMP INT INTEGER LONG LONG INT LONGINT MEDIUMINT SHORT SHORTINT SMALLINT Wertebereich Meist 32 Bit 231 231 1 8 Bit 16 Bit 64 Bit Operationen lt gt Ganzzahldivision Modulo bitweise Operatoren Inkrement und DekrementNaturliche Zahlen Bearbeiten Bezeichnung BYTE CARDINAL DWORD NATURAL UINT UNSIGNED UNSIGNED CHAR UNSIGNED INT UNSIGNED LONG UNSIGNED SHORT WORD Wertebereich Meist 32 Bit 0 232 1 8 Bit 16 Bit 64 Bit Operationen lt gt Ganzzahldivision Modulo bitweise OperatorenFestkommazahlen Dezimalzahlen Bearbeiten Bezeichnung COMP 3 CURRENCY PACKED DECIMAL DEC DECIMAL MONEY NUMERIC Wertebereich Wertebereich direkt abhangig von der maximalen Stellenanzahl die meist vorzugeben ist CURRENCY 64 Bit 922337203685477 5808 922337203685477 5807 Operationen lt gt Ganzzahldivision ModuloAufzahlungstypen Bearbeiten Bezeichnung ENUM SET oder implizit Wertebereich Frei wahlbar beispielsweise SCHWARZ ROT BLAU GELB Operationen lt gt Boolean logische Werte Bearbeiten 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 Bearbeiten Bezeichnung CHAR CHARACTER Wertebereich Alle Elemente des Zeichensatzes zum Beispiel Buchstaben Operationen lt gt Konvertierung in INTEGER Durch die weite Verbreitung von MBCS entspricht CHAR meist nicht mehr einem Element eines Zeichensatzes und somit einem Zeichen sondern einer Code Einheit einer Zeichenkodierung In den verbreiteten MBCS UTF 8 und UTF 16 ist zwar jeweils eine Minderheit der damit insgesamt kodierbaren Zeichen mit einem einzelnen CHAR kodierbar die Mehrheit benotigt jedoch eine Folge mehrerer CHARs In UTF 8 bilden dann zwei bis vier 8 Bit Einheiten eine Sequenz in UTF 16 zwei 16 Bit Einheiten ein Surrogate Parchen Erst wenn man diese Einheiten hintereinander in eine Zeichenkette schreibt ist das Zeichen kodiert CHAR ist somit allgemein eher als ein 8 ANSICHAR BYTECHAR oder 16 Bit Wert WIDECHAR NATIONAL CHAR zu verstehen der bei Zeichenkettenoperationen nicht als Zahl sondern als eine Zeichenkette der Lange 1 interpretiert wird Gleitkommazahlen Bearbeiten Bezeichnung DOUBLE DOUBLE PRECISION EXTENDED FLOAT HALF LONGREAL REAL SINGLE SHORTREAL Wertebereich Verschiedene Definitionen siehe unten Operationen lt gt Genauigkeit von Gleitkommazahl Typen Bitanzahln Wertebereichvon bis signifikanteStellenHALF 16 3 1 10 5 6 6 104 4SINGLE REAL 32 1 5 10 45 3 4 1038 7 8REAL 48 2 9 10 39 1 7 1038 11 12DOUBLE REAL 64 5 0 10 324 1 7 10308 15 16REAL 64 1 1 10 306 1 8 10308 15 16EXTENDED 80 1 9 10 4951 1 1 104932 19 20Bitmengen Bearbeiten Bitmengen stellen eine Menge von mehreren Bits dar In einigen Programmiersprachen gibt es zur Wahrung der Typsicherheit einen eigenen Datentyp und eigene Operatoren zum Beispiel fur die Vereinigungsmenge oder die Schnittmenge fur Bitmengen Bitmengen sind nicht mit Aufzahlungstypen oder Datenfeldern zu verwechseln da mehrere Elemente des Datentyps respektive der Menge gleichzeitig angesprochen werden konnen In vielen Programmiersprachen werden ganzzahlige Datentypen fur die Reprasentation von Bitmengen benutzt so dass Zahlen und Bitmengen zuweisungskompatibel sind obwohl arithmetische Operatoren bei Bitmengen und Mengenoperatoren im Zusammenhang mit ganzen Zahlen keinen Sinn ergeben Bezeichnung SET BITSET Wertebereich fur leere Menge i fur Menge mit dem Element i i j fur Menge mit den Elementen i und j Operationen Vergleichsoperator Typumwandlung in ganze Zahl oder Element eines Zeichensatzes MengenoperatorenZeigertypen Dynamische Datentypen Bearbeiten Eine Besonderheit sind Zeiger deren wirklicher Wertebereich in vielen Programmiersprachen anonym bleibt da sie nur Referenzen auf beliebige andere Datentypen sind Je nach referenziertem Typ werden Zeiger auf bestimmte Elemente gesondert benannt wie beispielsweise Zeiger auf Dateien Drucker oder Pipes Objektorientierte Programmiersprachen speichern den vom Zeiger referenzierten Datentyp zum Beispiel bei Instanzvariablen zusammen mit der Adresse auf die der Zeiger verweist damit die Zuweisungskompatibilitat nicht nur fur den Datentyp der Adressierung sondern auch fur den referenzierten Inhalt gepruft werden kann Dies ist dann sogar zur Laufzeit moglich und fur einige Anwendungen beispielsweise bei Polymorphie auch notwendig Zeiger Bearbeiten Bezeichnung ACCESS POINTER IntPtr oder auch nur kurz Stern Wertebereich Adresse des Basistyps oft anonym Operationen Referenz Dereferenz in einigen Sprachen Konstanter Nullzeiger Bearbeiten Bezeichnung NULL VOID None NIL Nothing Wertebereich keiner Operationen Bedeutung Dieser Zeiger ist verschieden von allen Zeigern auf Objekte Prozedurtypen Bearbeiten Einige Programmiersprachen wie zum Beispiel Oberon verwenden Prozedurtypen die fur Zeigervariablen verwendet werden die auf verschiedene Prozeduren mit identischen formalen Parameterlisten zeigen konnen Zusammengesetzte Datentypen Bearbeiten Zusammengesetzte Datentypen sind ein Datenkonstrukt welches aus einfacheren Datentypen besteht Da sie theoretisch beliebig komplex werden konnen werden sie auch haufig schon zu den Datenstrukturen gezahlt 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 lt gt Zuweisung mit Zuweisungskompatibilitat Beispiel type 3D Vektor is ARRAY 1 3 of INTEGER Zeichenkette fester Lange 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 moglichen Zeichenketten Operationen Stringfunktionen Teilstring Konkatenation Zusammensetzung lt gt Zeichenkette variabler Lange Die Lange ist feststellbar implizit durch ein Metazeichen als String Endezeichen ASCII 0 explizit durch eine Variable oder uber eine Standardfunktion Haufig als Abstrakter Datentyp in einer Standardbibliothek Bezeichnung String Array of CHAR VARCHAR CLOB Text Wertebereich Zeichenketten variabler Lange Operationen Stringfunktionen Teilstring Lange Konkatenation Zusammensetzung lt gt binare Zeichenkette variabler Lange Die Lange kann durch eine Variable oder uber eine Standardfunktion ermittelt werden 1 2 Bezeichnung BLOB Wertebereich binare Zeichenketten variabler Lange Operationen Lange Konkatenation Zusammensetzung Verbund Satz Struktur Bereich Bezeichnung RECORD STRUCT CLASS erweiterte Bedeutung implizite Definition uber Stufennummern Wertebereich Ein Verbund enthalt eine Folge verschiedener Komponenten welche verschiedene Datentypen haben konnen Als Komponententyp ist jeder Typ zulassig In einigen objektorientierten Programmiersprachen zum Beispiel Oberon konnen Verbunde zur Beschreibung des Verhaltens der Komponenten des Verbunds mittels Methoden auch typengebundene Prozeduren haben Operationen Vergleich nur Gleichheit oder Verschiedenheit Zuweisung mit oder ohne Zuweisungskompatibilitat stark programmiersprachenabhangig Beispiel type Prufung is RECORD Fach STRING Schueler STRING Punkte INTEGER Lehrer STRING Termin DATUM In vielen Programmiersprachen existieren Moglichkeiten den Speicherbereich eines Verbunds mehrfach unterschiedlich zu interpretieren Das wird Variantenrecord oder UNION genannt Dabei ist jedoch meist keine Typsicherheit mehr gegeben Zusatzliche individuelle Formatangaben Bearbeiten Bei der Verwendung von Datentypen im Quelltext eines Programms werden oft zu einem gewahlten Datentyp individuelle und zusatzliche Formatangaben implementiert Zum Beispiel kann ein Datum oder allgemein eine Zeitangabe als ganzzahliger elementarer Datentyp angelegt werden zu dem Angaben zur Form der Verarbeitung Darstellung erganzt werden Das Datum ist dann z B in Millisekunden seit dem 1 Januar 1970 0 00 Uhr gespeichert und kann davon ausgehend in bestimmte andere Formen wie TT MM JJJJ oder MM TT hh ss uberfuhrt werden siehe 3 Verbreitet ist auch eine je nach Kontext unterschiedlich definierte Variante des julianischen Datums also eine Gleitkommazahl deren Ganzzahlanteil die Anzahl der Tage ab einem bestimmten Zeitpunkt angibt und der Nachkommateil den vergangenen Teil des kodierten Tages also die Uhrzeit Alternativ konnte ein Datum naturlich auch als Verbund z B aus drei Zahlen fur Tag Monat und Jahr dargestellt werden Funktionen als Werte erster Ordnung BearbeitenIn vielen zeitgenossischen Programmiersprachen sind neben Funktionszeigern auch regulare Funktionswerte Funktionsliterale bzw anonyme Funktionen verfugbar Diese wurden in Anlehnung an den Lambda Kalkul entwickelt und bereits 1958 wenn auch mit fehlerhafter dynamischer Bindung in LISP implementiert Eine korrekte d h statische Bindung wurde z B fur Algol 68 spezifiziert Dass Funktionen bis heute z T nicht als Werte begriffen werden liegt an der erst jetzt uberhaupt einsetzenden Verbreitung dieser Konzeption ausserhalb der Informatik Universeller Datentyp BearbeitenUnter einem universellen Datentyp wird der Typ der Werte in einer Programmiersprache mit Unterstutzung fur typenlose Variablen verstanden Hierbei handelt es sich meist um die diskriminierte Vereinigung der Typen der auftretenden Werte elementare zusammengesetzte Funktionen etc Der universelle Datentyp tritt charakteristischerweise in universellen Skriptsprachen auf Als Beispiele fur die Verwendung von universellen Datentypen in Sprachen anderer Gattung sei der Lambda Kalkul in dem Funktionen die einzigen Werte sind und Prolog hervorgehoben in der die Daten durch die Herbrand Struktur gegeben sind Abstrakte Datentypen Bearbeiten Hauptartikel Abstrakter Datentyp 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 uber die festgelegten Operationen erfolgt sind die Daten nach aussen gekapselt Jeder ADT enthalt einen Datentyp bzw eine Datenstruktur Objektorientierte Programmiersprachen unterstutzen durch ihr Klassenkonzept die Erstellung von ADTs da hier Daten und Operationen gebunden werden und die Daten geschutzt werden konnen Einige modulare Programmiersprachen wie Ada oder Modula 2 unterstutzen ebenfalls gezielt die Erstellung von abstrakten Datentypen Aus fachlicher Sicht definiert ein Abstrakter Datentyp einen definierten Wertebereich mit fachlicher Bedeutung und seinen spezifischen Auspragungen So ist der Datentyp Kundennummer moglicherweise vom Elementartyp Ganze Zahlen unterscheidet sich jedoch durch eine definierte Lange und z B einer Prufziffer in der letzten Stelle Es bildet dadurch eine Untermenge alle ganzen Zahlen in der definierten Lange Es konnen hier auch komplexe Daten mit einer Abhangigkeit zueinander als ADT vereint werden Dies ist am Beispiel einer Darstellung von Zeitraumen gebrauchlich Es werden ein Beginndatum und ein Endedatum beide haben den Datentyp Date uber eine Integritatsbedingung verknupft Dadurch wird letztlich der zulassige Wertebereich des Endedatums an weitere Bedingungen geknupft Letztendlich ist ein ADT ein beliebig komplexer Wertebereich der an statische und oder dynamische Werte und zugeordnete Regeln zur Wertbestimmung gebunden ist Anonyme Datentypen BearbeitenEinige Programmiersprachen und die XML Strukturdefinitionssprache XML Schema unterstutzen das Konzept des anonymen Datentyps Dabei handelt es sich um einen Datentyp fur den kein Name definiert wird Polymorphie von Datentypen BearbeitenSiehe auch Polymorphie Programmierung Die parametrische Polymorphie ermoglicht es einen Datentyp oder eine Funktion generisch zu schreiben so dass er Werte einheitlich behandeln kann ohne von seinem konkreten statischen Datentyp abhangig zu sein Die parametrische Polymorphie ist eine Moglichkeit eine Programmiersprache ausdrucksstarker zu machen und gleichzeitig die vollstandige statische Typsicherheit zu gewahrleisten Ein Datentyp der den Anschein erwecken kann von einem verallgemeinerten Datentyp zu sein z B eine Liste mit Elementen beliebigen Typs wird als polymorpher Datentyp bezeichnet Generische Programmierung BearbeitenSiehe auch Generische Programmierung Die Implementierung erfolgt bei einigen Programmiersprachen durch das Konzept generischer Typen bzw Templates so gestalten sich dynamische Programmiersprachen bei denen sich der Typ einer Variable zur Laufzeit andern darf durch ihre verallgemeinerte Polymorphie generisch Von Sprachen die solche Mechanismen bieten sagt man auch dass sie generische Programmierung erlauben Wesentlich bei der generischen Programmierung ist dass die Algorithmen nicht fur einen bestimmten Datentyp geschrieben werden sondern nur bestimmte Anforderungen an die Typen stellen Das Prinzip wird auch parametrische Polymorphie genannt Paradebeispiel ist die C Standardbibliothek der Programmiersprache C bei der die Algorithmen so weit wie moglich von den Datenstrukturen mit denen sie arbeiten getrennt werden Weblinks Bearbeiten nbsp Commons Data types Sammlung von Bildern Videos und Audiodateien nbsp Wiktionary Datentyp Bedeutungserklarungen Wortherkunft Synonyme Ubersetzungen Java Java Tutorial Primitive Data TypesSQL Beschreibung der Datentypen in PostgreSQL mit Hinweisen auf Standardkonformitat nach ANSI ISO englisch Kapitel 11 Datentypen im Referenzhandbuch von MySQL 5 1Ada oopweb comEinzelnachweise Bearbeiten David Axmark Michael Monty Widenius u a Die Spaltentypen BLOB und TEXT Nicht mehr online verfugbar In MySQL 5 1 Referenzhandbuch MySQL AB 11 August 2008 archiviert vom Original am 18 Juli 2008 abgerufen am 28 August 2008 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 C Standard ISO IEC 9899 TC3 Committee Draft open std org PDF 3 6 MB S 338Normdaten Sachbegriff GND 4011149 0 lobid OGND AKS Abgerufen von https de wikipedia org w index php title Datentyp amp oldid 236626572