Unverständliche HA 10

andre_w
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 125
Registriert: 14. Okt 2007 14:59
Wohnort: Kriftel
Kontaktdaten:

Re: Unverständliche HA 10

Beitrag von andre_w » 26. Jan 2008 17:51

Stumpf.Alex hat geschrieben:Naja, die Idee ist ja nicht schlecht. Aber du muss daran denken, dass super nur die untere Schranke festlegst und nach oben offen bist, also auch theoretisch Object akzeptieren würdest. Probiers mal mit extends um die Vererbungshierarchie von oben aus aufzubröseln.
Super ist eigtl. die richtige Richtung, mit extends wäre ja ebenso ein Subtyp von Type1 o. Type2 möglich. Wenn man einfach nur sagt, wir wollen einen Subtyp von StockItem, kommt es zu Problemen, wenn man versucht, Type1 oder Type2 in ein Objekt z.B. vom Typ Vector<Type3> zu stecken (Compiler-Fehler). Oder sollen wir uns dann eines Casts bedienen?
let's be friends on twitter studivz facebook - my blog

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

Re: Unverständliche HA 10

Beitrag von s!mon » 26. Jan 2008 18:10

Es ist schon richtig, dass du einen Supertyp Type1 von Type2 und Type3 zurückgibst. Dir scheint nur nicht die richtige Syntax klar zu sein. Man kan zB sowas sagen: <Type1, Type2 extends Type1, Type3 extends Type1>

Type1 würdest du hier zurückgeben. Jetzt musst du dir quasi nur noch überlegen was Type1 genau für ein Typ ist.

Wambolo
Computerversteher
Computerversteher
Beiträge: 381
Registriert: 18. Okt 2007 11:36

Re: Unverständliche HA 10

Beitrag von Wambolo » 26. Jan 2008 18:22

Gebt ihr eigentlich bei mergeInventory und filter jeweils ganz allgemein eine Collection zurück oder eine konkrete Ausprägung einer Collection.

also damit meine ich sowas

Collection<Typ> x = new Vector<Typ>;
return x;

oder so,

Vector<Typ> x = new Vector<Typ>;
return x;
Interpreter/Parser reported on Nov 12, 2008 8:30:04 PM:
Number too big (102 > 42).

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: Unverständliche HA 10

Beitrag von Krümelmonster » 26. Jan 2008 18:33

Code: Alles auswählen

Collection<Typ> x = new Vector<Typ>;
return x;
Link

So ist die Bedinung erfüllt, dass eine Collection zurückgegeben wird.
Da Collection aber nicht instanzierbar ist, muss man sich für einen konkreten
Subtyp entscheiden.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Benutzeravatar
Jo(h)nny
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 197
Registriert: 19. Dez 2007 23:39

Re: Unverständliche HA 10

Beitrag von Jo(h)nny » 26. Jan 2008 19:00

Im Vordergrund stand "implementiert einen Comparator", nicht "implementiert ihn so, dass...
heisst das, wir müssen auch ein comparator implementieren und an die Tutoren abschicken??? ich dachte, dass man nen comparator nur für tests implementieren sollte.....
Atomenergie ist wie Sex - im Prinzip genial, wenn man nur wüsste wohin mit den Endprodukten.

andre_w
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 125
Registriert: 14. Okt 2007 14:59
Wohnort: Kriftel
Kontaktdaten:

Re: Unverständliche HA 10

Beitrag von andre_w » 26. Jan 2008 19:02

s!mon hat geschrieben:Es ist schon richtig, dass du einen Supertyp Type1 von Type2 und Type3 zurückgibst...
Dank dir, bin eben beim Sport auch schon drauf gekommen :)
Man muss manchmal eben "out of the box" denken :lol:

Ich persönlich finde Generics in Java nicht gerade schön gelöst, die können bei weitem nicht zB. mit denen in C++ mithalten meiner Meinung nach (allein schon wegen Type Erasure..)
let's be friends on twitter studivz facebook - my blog

andre_w
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 125
Registriert: 14. Okt 2007 14:59
Wohnort: Kriftel
Kontaktdaten:

Re: Unverständliche HA 10

Beitrag von andre_w » 26. Jan 2008 19:04

Jo(h)nny hat geschrieben:heisst das, wir müssen auch ein comparator implementieren und an die Tutoren abschicken??? ich dachte, dass man nen comparator nur für tests implementieren sollte.....
ob der gefordert ist, geht aus der Aufgabenstellung leider nicht ganz hervor. Ich werde ihn einfach mal mitschicken.
let's be friends on twitter studivz facebook - my blog

Benutzeravatar
Maeher
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 282
Registriert: 14. Okt 2007 23:02
Kontaktdaten:

Re: Unverständliche HA 10

Beitrag von Maeher » 26. Jan 2008 19:33

guido hat geschrieben:Im Vordergrund stand "implementiert einen Comparator", nicht "implementiert ihn so, dass...". Auch hier wäre mehr Vorgabe zwar auch mehr Gängelung, aber dafür wohl auch weniger Suchaufwand zur Folge gehabt.

Moment mal, wo steht wir sollen einen Comperator implementieren? Davon steht nichts in der Aufgabe. Da steht nur, dass wir eine Methode schreiben sollen, die einen Comparator übergeben bekommt. Wo der hergezaubert wird kann mir da erstmal vollkommen schnuppe sein. oO

Wambolo
Computerversteher
Computerversteher
Beiträge: 381
Registriert: 18. Okt 2007 11:36

Re: Unverständliche HA 10

Beitrag von Wambolo » 26. Jan 2008 19:36

Krümelmonster hat geschrieben:

Code: Alles auswählen

Collection<Typ> x = new Vector<Typ>;
return x;
Link

So ist die Bedinung erfüllt, dass eine Collection zurückgegeben wird.
Da Collection aber nicht instanzierbar ist, muss man sich für einen konkreten
Subtyp entscheiden.
Also das heißt, ich gebe einen Vector aus und keinen als Collection "getarnten" Vector. Beides funktioniert, aber ersteres ist sauberer, aber waurum?
Interpreter/Parser reported on Nov 12, 2008 8:30:04 PM:
Number too big (102 > 42).

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Re: Unverständliche HA 10

Beitrag von Stumpf.Alex » 26. Jan 2008 19:41

andre_w hat geschrieben:
Stumpf.Alex hat geschrieben:Naja, die Idee ist ja nicht schlecht. Aber du muss daran denken, dass super nur die untere Schranke festlegst und nach oben offen bist, also auch theoretisch Object akzeptieren würdest. Probiers mal mit extends um die Vererbungshierarchie von oben aus aufzubröseln.
Super ist eigtl. die richtige Richtung, mit extends wäre ja ebenso ein Subtyp von Type1 o. Type2 möglich. Wenn man einfach nur sagt, wir wollen einen Subtyp von StockItem, kommt es zu Problemen, wenn man versucht, Type1 oder Type2 in ein Objekt z.B. vom Typ Vector<Type3> zu stecken (Compiler-Fehler). Oder sollen wir uns dann eines Casts bedienen?
Nein, man braucht keine casts und es geht fehlerlos wenn man Type1 und Type2 in Abhängigkeit von Type3 definiert. Wir haben da was den Begriff "super" betrifft einfach aneindander vorbei geredet. Natürlich ist der Rückgabetyp von beiden Eingabetypen der gemeinsame Supertyp. Aber für generics impliziert das nicht die notwendige Verwendung des Begriffs "super". Den benutzt man, soweit ich feststellen konnte, eigentlich nur wenn man direkt in eine Eingabeliste etwas hinzufügen will.
s!mon hat geschrieben:Es ist schon richtig, dass du einen Supertyp Type1 von Type2 und Type3 zurückgibst. Dir scheint nur nicht die richtige Syntax klar zu sein. Man kan zB sowas sagen: <Type1, Type2 extends Type1, Type3 extends Type1>

Type1 würdest du hier zurückgeben. Jetzt musst du dir quasi nur noch überlegen was Type1 genau für ein Typ ist.
So ähnlich meinte ich das ursprünglich, wollte aber nicht zu konkret werden.

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: Unverständliche HA 10

Beitrag von Krümelmonster » 26. Jan 2008 19:51

Wambolo hat geschrieben:Also das heißt, ich gebe einen Vector aus und keinen als Collection "getarnten" Vector. Beides funktioniert, aber ersteres ist sauberer, aber waurum?
Es ist nicht sauberer im Sinne von "so würde ich es ohne das Template auch machen", sondern
es muss so gemacht werden, da es dem Template entspricht.

Ich würde selbst tatsächlich Vector<T> als Rückgabewert setzen, da man bei Collection<T>
doch nicht weiß, was man bekommt.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Re: Unverständliche HA 10

Beitrag von Stumpf.Alex » 26. Jan 2008 20:06

Innerhalb der Methode ist das ja egal. Durch das Template ist ja der Obertyp Collection festgelegt. Ob man dann mit Vector oder Collection als statischen Typ arbeitet ist ja egal, weil wir nichts anderes als addAll brauchen, dass ja schon bei Collection vorhanden ist.

S. Oelmann
Mausschubser
Mausschubser
Beiträge: 57
Registriert: 7. Okt 2007 14:25
Wohnort: Dieburg
Kontaktdaten:

Re: Unverständliche HA 10

Beitrag von S. Oelmann » 26. Jan 2008 20:21

Wo liegt denn überhaupt genau der Unterschied zwischen zwei Objekten, die mit "Collection x = new Vector()" und mit "Vector y = new Vector()" erzeugt wurden. Wenn ich das richtig sehe, wäre beim Objekt x der statische Typ Collection und der dynamische Typ Vector, während beim Objekt y sowohl der statische als auch der dynamische Typ Vector wären. Ich sehe eigentlich nur einen Nachteil darin, dass x nur auf diejenigen Methoden und Variablen zugreifen kann, die von der Klasse Collection zur Verfügung gestellt werden.

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Re: Unverständliche HA 10

Beitrag von Stumpf.Alex » 26. Jan 2008 20:28

Ganz einfach:
mit Typ x kannst du nur Operationen/Methoden ausführen die in der Klasse/Interface Collection definiert wurden, auch wenn die Klasse des dynmaischen Types mehr funktionialität (Zusatzmethoden) bieten würde. Diese hast du dafür dann nämlich für das Objekt y. In der Vorlesung wurde das mit dem "Bullaugenprinzip" und Schablonen erklärt. Also schränkt der statische Typ die Zugriffsmöglichkeiten eines Objektes ein.

S. Oelmann
Mausschubser
Mausschubser
Beiträge: 57
Registriert: 7. Okt 2007 14:25
Wohnort: Dieburg
Kontaktdaten:

Re: Unverständliche HA 10

Beitrag von S. Oelmann » 26. Jan 2008 20:51

Das ist es was ich schrieb. Allerdings dachte ich bis eben, dass alle wichtigen Methoden bereits in Collection enthalten sind. Ich habe aber nochmal nachgesehen und festgestellt, dass get() fehlt. Man kann also auf die einzelnen Elemente der Collections nicht mehr ganz so leicht zugreifen.

Antworten

Zurück zu „Archiv“