# Datentyp vs. Datenstruktur - Unterschiede



## knowledge (13. Mrz 2009)

Ich hab den Unterschied so verstanden:

Ein Datentyp definiert einen Wertebereich und die damit verbundenen möglichen Operationen, z.B. Zahlen (Wertebereich), Addition, Subtraktion (Operationen).

Eine Datenstruktur fasst Datentypen zusammen und bietet ebenfalls Operationen an z.B. Stack (Push, Pop). Basiert bzw. benötigt also Datentypen.

Wenn ich in Java also z.B. eine Klasse Person habe und diese hat jetzt einfach nur ein Alter (int Datentyp)  und einen Namen (String) und davon ein Objekt erzeuge:

Person p = new Person(18, "Hanswurst");

p ist ja ein Referenzdatentyp. Ein Referenzdatentyp beinhaltet "Adressen" (Wertebereich), Operationen (Vergleich mit ==). Person selbst, was jetzt referenziert wird ist dann aber eine Datenstruktur, richtig? Da ja Datentypen von dieser gekapselt werden. 

Hab ich das so richtig verstanden? Bei meinen Recherchen habe ich auch oft gefunden, dass die beiden Wörter oft Synonym benutzt werden, aber das ist ja wohl sicher nicht Sinn der Sache


----------



## Saxony (13. Mrz 2009)

knowledge hat gesagt.:


> Hab ich das so richtig verstanden?



Grob vereinfacht -> Ja



knowledge hat gesagt.:


> Bei meinen Recherchen habe ich auch oft gefunden, dass die beiden Wörter oft Synonym benutzt werden, aber das ist ja wohl sicher nicht Sinn der Sache



Ka wo du so suchst, aber bei meinen "Recherchen" ist mir das noch nie aufgefallen, da immer sauber getrennt wurde.

bye Saxony

Hmm da fällt mir grad noch was ein: Datenstrukturen und Algorithmen ausm Teubner Verlag - weils grad auf meinem Schreibtisch liegt.


----------



## SlaterB (13. Mrz 2009)

> Ka wo du so suchst, aber bei meinen "Recherchen" ist mir das noch nie aufgefallen, da immer sauber getrennt wurde.

z.B. bei der aller aller ersten Quelle, die man sich dazu denken kann, falls man sich nicht nur auf Java bezieht
Datentyp - Google-Suche
erster Link
Datentyp ? Wikipedia


> [..]
> Zusammengesetzte Datentypen
> [..]
> Verbund, Satz, Struktur, Bereich
> ...


+


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


in
Datenstruktur ? Wikipedia
sind dagegen nur bestimmte Container-Klassen wie Listen, Maps, Baum usw. genannt

----

also ich meine, das ganze wird vielleicht nicht von einer Quelle synonym eingesetzt,
aber es ist mal so und mal so definiert, ob nun Person ein (Abstrakter) Datentyp oder eine Datenstruktur ist

wenn man dann Texte liest, die nichts direkt selber definieren, dann wird man zwangsläufig auf beide Begriffe in zufälliger Wahl treffen, es entsteht der Eindruck der Synonymität

-----

edit:


> Der Übergang von der Datenstruktur zu einem Abstrakten Datentyp ist dabei nicht klar definiert, sondern hängt einzig von der Betrachtungsweise ab.


Datenstruktur - Lexikon


----------



## Saxony (13. Mrz 2009)

SlaterB hat gesagt.:


> z.B. bei der aller aller ersten Quelle, die man sich dazu denken kann, falls man sich nicht nur auf Java bezieht
> Datentyp - Google-Suche



LoL @ Google: Wer setzt denn noch auf dieses tote Pferd!? Ich warte auf die Wolfram Suchmaschine. 

bye Saxony


----------



## SlaterB (13. Mrz 2009)

ich finde eigentlich bis auf kleinere API-Beschreibungen gar keinen Link, der eine Klasse Person als 'Datenstruktur' bezeichnen würde,
ist deine erste Antwort

> Grob vereinfacht -> Ja

vielleicht doch nicht zutreffend? 

-----

interessant und vermischt wird es erst, wenn man eine Datenstruktur wie eine Liste um zusätzliche individuelle Felder erweitert,

'Klasse Person habe und diese hat jetzt einfach nur ein Alter (int Datentyp) und einen Namen (String) '
+ Liste aller Nachbarn/ Bekannten,

ist es dann immer noch ein abstrakter Datentyp oder schon etwas mehr eine Datenstruktur?


----------



## Saxony (13. Mrz 2009)

Hiho,

für mich ist alles was einen primitiven Datentyp kapselt eine (Daten)struktur z.B. auch schon eine Klasse Punkt mit int x,y. Somit sind dann alle einzeln auftretende primitiven Datentypen ein Datentyp - so wie es der Name schon sagt. 

In meiner unendlichen Großzügigkeit rechne ich String auch noch mit zu den Datentypen. 
Alle anderen Wrapper sind für mich wieder Datenstrukturen.

So habe ich das schon vor 15 Jahren bei Turbo Pascal gelernt und gelebt und werde es auch so mit ins Grab nehmen.

bye Saxony


----------



## Noctarius (13. Mrz 2009)

Also sind für dich Integer, Double, Long, ... schon Datenstrukturen? Oo

Ich würde sagen zu einer Struktur benötigt man doch mal wenigstens 2 unterschiedliche Daten.


----------



## Saxony (13. Mrz 2009)

Noctarius hat gesagt.:


> Also sind für dich Integer, Double, Long, ... schon Datenstrukturen? Oo



Ja, da diese Wrapper ja bereits einen Datentyp kapseln.


----------



## Gelöschtes Mitglied 5909 (13. Mrz 2009)

> Operationen (Vergleich mit ==)



Jein. In Java kann man operatoren (+, -, +, +=, -=,==,...) nicht überladen. Stattdessen muss man Methoden schreiben. Der Vergleich von Objekten mit == bezieht sich auf die Referenz, nicht auf den Inhalt 
-> Objekte "immer" mit equals vergleichen und equals überschreiben


----------



## 0x7F800000 (13. Mrz 2009)

Saxony hat gesagt.:


> Ja, da diese Wrapper ja bereits einen Datentyp kapseln.


Dann gibt es also nur noch "primitive Datentypen"= int, double, boolean und "Datenstrukturen"=alles was von objekt erbt?
Und weil in Scala, Ruby & C# alles Objekt ist, gibt es dort nur noch "Datenstrukturen". Daher würde ich mal vorschlagen, dass man dieses unnötig lange Wort einfach nur noch durch "Daten und so" ersetzt. Dann gibt es keine Lästige Differenzierung mehr, und es heißt nur noch "In C# gibt's Daten und so" 

So wie ich das Wort kenne, sind Datenstrukturen ziemlich genau die dinger, die in der Collection-API implementiert sind: Sets, Listen, Maps usw.


----------



## Saxony (14. Mrz 2009)

Andrey hat gesagt.:


> Dann gibt es also nur noch "primitive Datentypen"= int, double, boolean und "Datenstrukturen"=alles was von objekt erbt?



Mit dem Zusatz, dass diese Klasse noch Datentypen kapseln muss. Eine Util Klasse mit nur statischen Methoden beispielsweise ist keine Datenstruktur.



Andrey hat gesagt.:


> So wie ich das Wort kenne, sind Datenstrukturen ziemlich genau die dinger, die in der Collection-API implementiert sind: Sets, Listen, Maps usw.



Es nur auf die Collection API zu beziehen ist viel zu eng gesehen. Was ist mit eigenen Implementierungen von Stacks und Listen oder auch AVL Bäume, welche nicht Bestandteil der Collections API sind? Das sind ebenfalls Datenstrukturen ausserhalb der Collectionss API.

bye Saxony


----------



## Noctarius (14. Mrz 2009)

Ich denke aus Java kann man den Begriff Datenstruktur fast streichen, weil für mich an eine Datenstruktur eine feste schematische Reihenfolge gebunden wäre, wie z.B. unter C mit einem struct.

Dabei sind eben nicht nur die Datentypen innerhalb des struct wichtig, sondern auch deren feste Reihenfolge und ich kann eine Struktur anhand dessen direkt schreiben und lesen.

Ohne wrapper-Methoden wie read/save ist sowas in Java nicht möglich und dann wäre ich Andreys Meinung, dass Collenctions / Maps / Listen / usw am ehesten einer Struktur entsprechen.

Es gibt in Java eben Datentypen (alle primitiven und die Wrapperklassen, für welche die Operatoren überladen sind) und Klassen und Dao-Klassen/-Objekte (was Ihr in Datenstrukturen versucht zu schieben ^^)


----------



## SlaterB (14. Mrz 2009)

'ihr' ist bisher nur Saxony, aber mir sind auch beide bzw. wechselnde Sichtweisen bekannt,

traue keinem Fachwort über den Weg, dessen Definition im genauen Wortlaut du schon wieder vergessen hast


----------



## Marco13 (14. Mrz 2009)

Ich habe nicht alles gelesen, weil es tendenziell auf Wortklauberei rausläuft, und ... wie es mein InfI-Dozent mal gesagt hat: ~"Namen sind Schall und Rauch - das Ziel ist die Fähigkeit, sich im abstrakten Gerüst der Definitionen sicher zu bewegen". Wikipedia definiert die Begriffe so-und-so, irgendein Uni-Skript anders, und im Netz finden sich noch ein paar tausend andere Definitionen. Man verwendet die, die man im jeweiligen Kontext verwenden soll. (<-Punkt)

Ganz subjektiv: Eine Datenstruktur ist ein Baum (und umgekehrt). Ein Datentyp ist ein Knoten (und umgekehrt). Ein einzelner Knoten ist auch ein Baum (und umge... nein, diesmal nicht...  )


----------

