Fragen zur Hausuebung 10

Sylvia G.
Mausschubser
Mausschubser
Beiträge: 73
Registriert: 22. Sep 2007 14:30

Fragen zur Hausuebung 10

Beitrag von Sylvia G. » 17. Jan 2008 21:06

Ich haette da erstmal eine generelle Verfahrensfrage zur 10. Hausuebung:

Wir haben ja keine Testklasse oder sonst irgendwie eine Klasse mit einer main-Methode gegeben. Sollen wir also quasi die Methoden mit den generics "blind" implementieren, ohne sie zu testen, oder sollen wir uns eigene Testklassen mit ausgedachten Beispielfaellen schreiben und diese bei der Loesung mitschicken, oder wie ist das gedacht?

Zweitens gibt es mal wieder einen leichten Unterschied zwischen der Aufgabenstellung und dem Template bei mergeInventory:
Die Aufgabenstellung sagt, man soll das 2. Inventory in das erste einfuegen, das Template sagt, man soll zwei Collections mischen und eine neue zurueckgeben... was gilt denn nun? Oder koennen wir uns das aussuchen?

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

Re: Fragen zur Hausuebung 10

Beitrag von Krümelmonster » 17. Jan 2008 21:19

Klar kannst du dir Testfällt implementieren.
Diese werden aber nicht mitgeschickt.

Nunja, das zweite Inverntory in das erste einfügen wird
schwer gehen, wenn sie einen unterschiedlichen Typ haben.
Vielmehr sollen wir wohl beide Inventories in ein Inventory
einer gemeinsamen Superklasse speichern, wobei erst
das erste und dann das zweite Inventory hineingeschrieben wird.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

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

Re: Fragen zur Hausuebung 10

Beitrag von s!mon » 18. Jan 2008 16:30

Ich habe jetzt auch mal ein paar Verständnisfragen. Im Interface steht sieht mergeInventory bei mir so aus: <Type1,Type2,Type3> Collection<T> mergeInventory(Collection<Type1> firstStock, Collection<Type2> secondStock); Müsste das T nicht Type3 heißen oder umgekehrt? Oder darf/muss man diesesmal im Template/Interface etwas ändern?

Ansonsten: Wenn ich das jetzt so in meine Klasse kopiere und mit Code füllen will, unterstreicht er mir die Paramater mit der Meldung, dass er nicht die Sichtbarkeit der geerbten Methode reduzieren darf. Wenn ich die Methode public mache kommt das nicht. Wieso?

Nun zum Verständnis. mergeInventory bekommt zwei Collections (Vectoren?), die logischerweise keine Subtypen voneinander sind. Die Elemente in den Collections sind aber immer Subtypen von StockItem. Zurückgegeben wird immer eine Collection<StockItem>, oder? Ich wollte vec.addAll() benutzen um die Elemente zu mergen, das funktioniert aber nicht. Wie kann ich die Sachen denn ineinander casten, beziehungsweise rausfinden von welchem Typ die sind?

Bin grad schwer überfordert, obwohl ich die Folien von T17 eigentlich komplett verstehe :P

joerg2007
Neuling
Neuling
Beiträge: 5
Registriert: 22. Okt 2007 16:04

Re: Fragen zur Hausuebung 10

Beitrag von joerg2007 » 18. Jan 2008 18:59

ich habe auch folgende Probleme beim Ausführen des Templates:
/**
* determines the maximum of a stock
* @param <T> type of the stock
* @param comparator comparator that shall used to determine the maximum
* @return the item of the stock with the highest predicate according to the comparator
*/
<Type> StockItem max(T comparator);
Hier wird bei mir von eclipse bemaengelt, das T nicht nach einen Typ aufgelöst werden kann.
Kann oder soll man hier einfach T nach Type umbennen?
/**
* deletes a stockItems with a certain predicate out of the Stock
* @param fil the predicate
* @return the stock
*/
Type filter(IFilterPredicate<Type> fil);
Hier bekomme ich eine Fehlermeldung ,das Type nicht nach einem Typ aufgelöst werden kann.

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

Re: Fragen zur Hausuebung 10

Beitrag von Krümelmonster » 18. Jan 2008 21:17

@S!mon:
Wie Prof. Rößling hier geschrieben hat, ist es gerade die Aufgabe, die passenden generischen Typen herauszufinden.

Außerdem soll ein zu Collection passender Typ
zurückgegeben.

Dass die beiden übergebenen Collections einen unterschiedlichen Subtyp von StockItem
enthalten können stimmt zwar, aber diese lassen sich ja auf einen gemeinsamen Supertyp
abbilden und in diese Collection speichern.

@joerg2007:
Füge mal ein <Type> am Anfang vor dem Rückgabetyp ein.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

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

Re: Fragen zur Hausuebung 10

Beitrag von s!mon » 18. Jan 2008 22:34

Das ist mir schon klar, dass das die Aufgabe ist. Ich wollte eigentlich erstmal nur wissen, ob das im Interface wirklich Collection<T> heißen soll, es mit den 3 anderen Subtypen also 4 formale generische Parameter (nennt man das so :)?) gibt, oder ob da ein Fehler ist beziehungsweise man selber etwas im Interface ändern muss, oder nur in der Klasse.

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

Re: Fragen zur Hausuebung 10

Beitrag von Stumpf.Alex » 19. Jan 2008 00:13

Du musst die "generische Parameter" in den Interface sowie Klassen ändern, so dass Typen alle miteinander kompatibel sind.

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

Re: Fragen zur Hausuebung 10

Beitrag von Jo(h)nny » 19. Jan 2008 10:44

ma ne blöde frage, wenn man glück hatte und die aufgaben bereits am montag runtergeladen hat, dann hat man ja eigentlich schon alle typen oder??? ich meine bei mir läuft alles, aber ich hab halt die fertige templates benutzt:)
Atomenergie ist wie Sex - im Prinzip genial, wenn man nur wüsste wohin mit den Endprodukten.

Benutzeravatar
guido
Computerversteher
Computerversteher
Beiträge: 378
Registriert: 30. Nov 2003 21:24
Wohnort: Mühltal
Kontaktdaten:

Re: Fragen zur Hausuebung 10

Beitrag von guido » 19. Jan 2008 12:04

Jo(h)nny hat geschrieben:ma ne blöde frage, wenn man glück hatte und die aufgaben bereits am montag runtergeladen hat, dann hat man ja eigentlich schon alle typen oder??? ich meine bei mir läuft alles, aber ich hab halt die fertige templates benutzt:)
Ja, dann hast Du "Glück gehabt". Oder eben auch nicht, denn es ist deutlich einfacher, vorgegebene Typen nachvollziehen zu können, also selbst auf die korrekten Typen zu kommen. Der Lerneffekt ist also potenziell viel geringer (auch wenn man das selbst vielleicht noch so wahrnimmt).

Das "Collection<T>", das weiter oben angesprochen wurde, sollte kein neuer Typ sein, sondern meiner Erinnerung nach einer der vorangestellten Typen (Type1, Type2, Type3). Welcher, kann ich auswendig nicht sagen (bin an einem fremden Laptop ohne Java etc. und nur kurz online). Die Ersetzung soll, wie schon diskutiert, eben "sinnvoll" / "passend" sein.

Guido

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

Re: Fragen zur Hausuebung 10

Beitrag von Jo(h)nny » 19. Jan 2008 12:17

@guido, jop hast recht:)
vor allem bei max methode den typ heryuszufinden würde vermutlich bei mir schon ne weile dauern:)
Atomenergie ist wie Sex - im Prinzip genial, wenn man nur wüsste wohin mit den Endprodukten.

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

Re: Fragen zur Hausuebung 10

Beitrag von Jo(h)nny » 19. Jan 2008 15:37

was sollen wir eigentlich an die tutoren schicken?? nur die StoreManger-Datei???
Atomenergie ist wie Sex - im Prinzip genial, wenn man nur wüsste wohin mit den Endprodukten.

Sylvia G.
Mausschubser
Mausschubser
Beiträge: 73
Registriert: 22. Sep 2007 14:30

Re: Fragen zur Hausuebung 10

Beitrag von Sylvia G. » 19. Jan 2008 16:52

Nochmal 2 grundsaetzliche Fragen zum Template:

Warum besitzt eigentlich der StoreManager nur den impliziten Standardkonstruktor? Und warum ist mergeInventory nicht static?

Beides widerspricht ja eigentlich dem, was wir gelernt haben... Sollten wir das aendern, auch wenn es nicht so in der Aufgabenstellung steht?

Benutzeravatar
guido
Computerversteher
Computerversteher
Beiträge: 378
Registriert: 30. Nov 2003 21:24
Wohnort: Mühltal
Kontaktdaten:

Re: Fragen zur Hausuebung 10

Beitrag von guido » 20. Jan 2008 09:25

cygne hat geschrieben:Nochmal 2 grundsaetzliche Fragen zum Template:

Warum besitzt eigentlich der StoreManager nur den impliziten Standardkonstruktor? Und warum ist mergeInventory nicht static?

Beides widerspricht ja eigentlich dem, was wir gelernt haben... Sollten wir das aendern, auch wenn es nicht so in der Aufgabenstellung steht?
Bitte lasst es entweder so, wie es ist, oder testet sorgfältig, ob es vielleicht Ärger mit den Tests gibt (das sollte hier wohl nicht der Fall sein). Anregungen zu besserer Modellierung sind immer willkommen; durch meine zeitliche Einbindung kann nicht immer alles "mustergültig" sein - mir fehlt auch einfach die Zeit, die Lösungen immer 100% gegenzulesen, um so "Kleinigkeiten" ebenfalls zu bemerken... :oops:

Guido

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

Re: Fragen zur Hausuebung 10

Beitrag von s!mon » 20. Jan 2008 15:17

Bin grad am Implementieren der toString-Methode. Hier drin mache ich so etwas:

Code: Alles auswählen

for(StockItem i: s) {
		  rString += i.toString() + System.getProperty("line.Separator");
	  }
Es wird also immer die schon implementierte toString-Methode der StockItems genommen. Die sieht so aus:

Code: Alles auswählen

String.valueOf(this.getID()).concat(", ").concat(this.getName()).concat(", ").concat(this.getClass().getName());
Ich verstehe absolut nicht, wieso ich dann als Ausgabe so etwas erhalte:

Code: Alles auswählen

[1, CD, Stockkeeping.AudioCD, 1, Buch, Stockkeeping.Book, 1, Babab, Stockkeeping.Book]
Wieso werden die einzelnen Items durch Kommas getrennt und nicht durch Zeilenumbrüche, und wieso wird das ganze durch [ ] begrenzt? Ist mir grad ein absolutes Rätsel.. wo diese Teile des Strings herkommen..

Außerdem habe ich noch ein Problem. Ich bekomme einen "name clash", wenn ich meine mergeInventory-Methode implementiere. "the method has the same erasure as mergeInventory of class IStoreManager2, but does not override it". Wieso? Sie heißt genau wie im Interface, wieso wird die Methode dann nicht überschrieben? Echt eine frustrierende Übung diese Woche :)

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

Re: Fragen zur Hausuebung 10

Beitrag von Krümelmonster » 20. Jan 2008 16:42

Das Problem mit der toString()-Methode kann ich bei mir nicht reproduzieren.

Das Problem mit dem Überschreiben habe ich meines Wissens dadurch gelöst, dass
mir Eclipse angeboten hat, über die Methode ein "@Override" zu schreiben.
Danach ist wohl die Warnung verschwunden, ohne allerdings verstanden zu haben,
was sie eigentlich ausgelöst hat. ;)
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Antworten

Zurück zu „Archiv“