# ADT verständnis Problem



## Unikate (8. Jul 2010)

Hallo zusammen,

ich habe ein Problem Abstrakte Datentypen zu verstehen.
Also es gibt die einfachen DT (boolean, byte, int etc. ), dann gibt es die komplexen Datentypen (Referenzdatentypen z.B. String) und dann gibt es die ADT's.

Und die ADT's sind genau was?Die Definitionen im Internet helfen irgendwie nicht.
Sind das nur Interfaces? Also Schnittstellen, die vorgeben welche Methoden man nutzen muss?
Oder sind das einfach nur meine Objektreferenzen?wenn ich z.B. eine Klasse Auto erstelle und ein Objekt
Auto auto1?hmm



Ich denke ein konkretes Beispiel wäre hilfreich!
Danke fürs Helfen.


----------



## Der Müde Joe (8. Jul 2010)

Es gibt *primitive* Datentypen, nämlich:
byte, short, int, char, boolean, long, float, double.
und es gibt nicht primitive (der Rest):
Diese werden unterteilt in:
Klassen (class)
Interface (interface)
Enumerationen (enum)

Eine abstrakte Klasse ist so was zwischen Interface und Klasse:
Abstract Methods and Classes (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance)


----------



## Gast2 (8. Jul 2010)

Im Java Umfeld würd ich es als Interface bezeichnen - siehe auch Abstrakter Datentyp ? Wikipedia


----------



## Kekzii (8. Jul 2010)

hallo,

von Abstrakten Klassen kannst du keine Instanzen bilden.

z.B.

Du hast eine Klasse Säugetier, von dieser solllen Klassen wie Affe und Mensch erben.

Da es kein Tier gibt das Säugetier heisst aber der Mensch und der Affe viele Gemeinsamkeiten haben, kann man diese Klasse abstrakt machen.

So enthält die ABSTRAKTE Klasse _Säugetier _ sowas wie Herz, Lunge etc. und z.B. setters und getters. So sind diese Methoden bereits für alle Unterklassen verfügbar. Abstrakte Methoden müssen keinen Rumpf enthalten, können es aber 

hoffe das war deine Frage und es hilft dir weiter


----------



## fastjack (8. Jul 2010)

Abstrakte Datentypen sind Datenstrukturen, die keine Vorschriften darüber machen, aus welchen Datenstrukturen oder Typen sie zusammengesetzt sind, oder wie sie intern organisiert sind. Sie bieten Operationen an, die mit abstrakten Parametern und Rückgabewerten arbeiten. Also normalerweise Schnittstellen mit generischen Parametern, die z.B. Stacks, Listen usw beschreiben.

Typische Aufgabe: Gegeben sei der abstrakte Datentyp Stack, der wie folgt in Haskell spezifiziert werden kann:

push :: Stack a -> a -> Stack a
pop :: Stack a -> (a, Stack a)

Entwerfen Sie eine Schnittstelle und eine Implementation in Java. Viel Spaß


----------



## Kekzii (8. Jul 2010)

jetzt nochma auf deutsch?


----------



## fastjack (8. Jul 2010)

> Also normalerweise Schnittstellen mit generischen Parametern



noch mehr deutsch?


----------



## Unikate (8. Jul 2010)

also abstrakte Klassen habe ich nun verstanden, aber abstrakter Datentyp noch nicht wirklich O_O
habt ihr mal ein codebeispiel?


----------



## Kekzii (8. Jul 2010)

okay  *Eintrag lösch, in ecke stell und schäm*


----------



## fastjack (8. Jul 2010)

Es ist völlig egal in welcher Sprache er beschrieben wird:


```
push :: Stack a -> a -> Stack a
pop :: Stack a -> (a, Stack a)
```


----------



## fastjack (8. Jul 2010)

```
interface Stack<T> {
        T pop();
        push(T t);
    }
```


----------



## Kekzii (8. Jul 2010)

Kekzii hat gesagt.:


> hallo,
> 
> von Abstrakten Klassen kannst du keine Instanzen bilden.
> 
> ...




Ist das falsch? 
wenn ja dann erzählt mein Lehrer ziemlichen Quark


----------



## faetzminator (8. Jul 2010)

Kekzii hat gesagt.:


> Abstrakte Methoden müssen keinen Rumpf enthalten, können es aber



Nicht ganz korrekt...
Eine abstrakte Methode darf *keinen* Rumpf enthalten. Allerdings kann ich in einer abstrakten Klasse abstrakte und nicht-abstrakte Methoden definieren.


----------



## Kekzii (8. Jul 2010)

okay danke  aber ist es nicht ein Interface wenn es ausschliesslich aus abstrakten Klassen besteht?


----------



## faetzminator (8. Jul 2010)

Du meinst nur abstrakte Methoden beinhaltet?
Nein, es ist dann eine abstrakte Klasse mit abstrakten Methoden  [c]abstract class[/c] vs. [c]interface[/c].


----------



## Kekzii (8. Jul 2010)

ja ich meinte methoden ^^ 

und was sind dann interfaces? Mein lehrer hat gesagt der einzige unterschied ist das Interfaces Komplett aus abstracten methoden bestehen und durch implements eingebunden werden 

Habe interfaces und abstrakte Klassen nie wirklich verstanden nicht mal durch erklärungen aus dem Internet


----------



## Der Müde Joe (8. Jul 2010)

Einfach gesagt:
Ne Schnittstelle (interface) ist eine Vorgabe, wie etwas auszusehen hat.

zb Das Interface Collection schreibt die Methode size() vor. Alle Collection (List,Set,Queue...) müssen diese Methode besitzten.
Das ermöglicht "gegen das Interface zu implementieren".

```
Collection<String> collection = new ArrayList<String>();
// was auch immer für eine collection das ist: size() ist immer da;
int size = collection.size();
collection = new HashSet<String>();
//jetzt ist es ein hasset
size = collection.size();
//die collection hat immer noch eine size
```
Man kann die implementierung auswechseln, das interface schreibt nur vor, was da sein muss.


----------



## Kekzii (8. Jul 2010)

achso okay danke


----------



## faetzminator (8. Jul 2010)

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6.13 Schnittstellen bzw. Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6.13 Schnittstellen


----------

