Home > Informatik > Stufe Q1 > ADTs

14.1 Datentypen und Datenstrukturen

Allgemeines - Abstrakte Datentypen - Stack - Queue - Dictionary - List - ADTs im Abitur - Axiome

1. Primitive Datentypen

Primitive Datentypen sind quasi die "Atome" der höheren Datentypen und Datenstrukturen. Daher werden die primitiven Datentypen in manchen Büchern auch als elementare Datentypen bezeichnet. In der aktuellen Fachliteratur werden für die Sprache Java (und verwandte Sprachen) folgende primitive Datentypen aufgelistet:

  • byte: Kleine ganze Zahl (1 Byte Wortbreite) zwischen -128 und +127
  • short: Kleine ganze Zahl (2 Byte) zwischen -32768 und +32767
  • int: Ganze Zahl mit einfacher Genauigkeit (4 Byte), z.B. 155
  • long: Ganze Zahl mit doppelter Genauigkeit (8 Byte), z. B. 1343234213645653423144
  • float: Reelle Zahl mit einfacher Genauigkeit (4 Byte), z. B. 2.71
  • double: Reelle Zahl mit doppelter Genauigkeit (8 Byte), z.B. 3.14159
  • char: Zeichen, Buchstabe, z.B. 'A' (1 Byte)
  • boolean: Wahrheitswert true oder false (1 Byte)
  • void: leerer Datentyp, wird für manipulierende Methoden benutzt, die keinen Wert zurückliefern.

Technisch gesehen beschreibt ein primitiver Datentyp wie beispielsweise int einen Bereich im Arbeitsspeicher des Rechners mit einer bestimmten Größe. In Java besteht eine Variable des Datentyps int beispielsweise aus einem vier Byte großen zusammenhängenden Speicherbereich. Ein Byte besteht bekanntlich aus 8 Bits, also besteht eine int-Zahl aus 32 Nullen und Einsen.

Neben diesem technisch-physikalischen Aspekt ist aber noch ein anderer Aspekt zu beachten: Auf die Variablen aller primitiven Datentypen können ganz bestimmte, teils spezifische Operationen ausgeführt werden.

Auf Variablen vom Typ int kann man beispielsweise Operationen wie + (Addition), - (Subtraktion), / (Division), * (Multiplikation) und % (Modulo, Rest der ganzzahligen Division) anwenden. Bei einer char-Variable sind diese Operationen nicht möglich.

Der folgende Kasten ist für die Experten unter Ihnen, die alles ganz genau wissen wollen. Abiturrelevant ist der Inhalt des Kastens aber nicht. Wenn Sie wollen, können Sie also gleich mit dem nächsten Abschnitt weitermachen.

Für Experten (nicht abiturrelevant!):

Beschreibung siehe folgenden Text

Ein kleiner Test

Der Versuch, zwei Variablen des Typs char zu addieren, scheitert natürlich, wie man hier sieht.

Beschreibung siehe folgenden Text

Ein weiterer Test

Man kann zwei char-Variablen tatsächlich addieren, denn computerintern werden char-Variablen wie ganze Zahlen behandelt. Das Ergebnis der Addition ist dann ein int-Wert. Diesen int-Wert kann man der char-Variablen c aber nicht direkt zuweisen, sondern hier ist ein Typecasting (Typenumwandlung) erforderlich.

Leider wird das Ergebnis von c nicht in der Konsole ausgegeben. Legt man aber ein Objekt der Klasse an und ruft dann den Objektinspektor auf, sieht man den Wert von c:

Beschreibung siehe folgenden Text

Der Objektinspektor zeigt den Wert von c

Bei einer solchen char-Addition werden die Unicode-Werte der beiden char-Variablen addiert. Dadurch entsteht ein neuer Unicode-Wert, der dann in der Variablen c gespeichert wird.

Datenstrukturen

Wenn Ihnen der Unterschied zwischen einem primitiven Datentypen und einer Datenstruktur schon vertraut ist, springen Sie einfach gleich weiter zum Thema "Abstrakte Datentypen".

Im "Duden Abitur Informatik" werden Datenstrukturen wie folgt definiert:

Der Begriff Datenstruktur beschreibt die Zusammenfassung gleicher oder unterschiedlicher Datentypen nach bestimmten Konstruktionsprinzipien.

A) primitive Datentypen, B) Datenstruktur Array, C) Datenstruktur Verbund, D) Datenstruktur Array aus Verbunden
Autor: Ulrich Helmich 07/2023, Lizenz: siehe Seitenende

Dieses Bild zeigt verschiedene Datentypen und -strukturen, wie sie in der Programmiersprache Java üblich sind.

Bei A) sehen wir vier primitive Datentypen, nämlich int, double, char und boolean.

Bei B) sehen wir zwei Arrays, die schon zu den Datenstrukturen gehören. Oben einen Array aus 12 int-Elementen, darunter einen Array aus acht char-Elementen.

Bei C) sehen wir eine Datenstruktur, die man als Verbund bezeichnet (in der Sprache Pascal sind das dann Records, in anderen Programmiersprachen Objekte, genauer gesagt, die "Datenteile" der Objekte, die Methoden fehlen hier). Ein Verbund besteht aus mehreren unterschiedlichen Komponenten. Dies können primitive Datentypen wie int sein, aber auch Datenstrukturen wie Arrays und Verbunde.

Bei D) sehen wir einen Array, der aus drei Verbunden besteht, wobei jeder Verbund wiederum drei Arrays enthält.

B), C) und D), so unterschiedlich sie aufgebaut sind, werden zusammenfassend als Datenstrukturen bezeichnet.

Abstrakte Datentypen

Damit wären wir beim Haupt-Thema dieser Folge 14.

Abstrakte Datentypen (ADTs) sind ein Konzept der Informatik, das lediglich die Operationen beschreibt, die auf diese Datentypen ausgeführt werden können. Implementationshinweise werden dagegen nicht gegeben.

Das klassische Beispiel für einen abstrakten Datentyp ist der Stack, der durch folgende Operationen definiert wird:

ADT Stack
  1. init() erzeugt einen neuen leeren Stack
  2. push(x) fügt das Element x in den Stack ein
  3. top() liefert den Wert des zuletzt eingefügten Elementes zurück
  4. pop() löscht das zuletzt eingefügte Element
  5. empty() liefert true, falls der Stack kein Element enthält.

Wie Sie einen solchen Stack implementieren, ist Ihnen überlassen. Die Definition des ADT Stack schreibt lediglich die fünf Operationen vor, die Sie dann natürlich irgendwie in Ihrer Programmiersprache implementieren müssen.

Auf den folgenden Seiten werden wir uns jetzt näher mit den gängigen abstrakten Datentypen befassen und diese natürlich auch in Java implementieren. Wir fangen dabei mit dem bekanntesten und eben schon erwähnten ADT Stack an.

Seitenanfang -
Weiter mit Abstrakten Datentypen...