Seite 1 von 1

Frage zu AntysHelperAnt bzw. ElisabethTheQueenHarvesterAnt

Verfasst: 4. Jan 2008 01:16
von Weintraube
Eine Frage zur Umsetzung von Elisabeth und Helper.

In der AntysHelperAnt könnte ja der Konstruktor entweder eine RectangleDataAccess oder ein Array als Parameter bekommen. Mit dem RectangleDataAccess würde man ja eigendlich das ganze Feld übergeben, was man gar nicht braucht. Deshalb könnte man ja auch von der elisabeth her den Konstruktor mit einem Array [] aufrufen welches nur eine Zeile enthält. Allerdings muss man dann in AntysHelperAnt den Konstruktor der Superklasse mir super(street, avenue, null) aufrufen. Dies ist ja gegebenfalls auch nicht schön, bzw. könnte ungünstig sein, wenn jemand das Programm weiter schreiben würde...


Jetzt ist halt die Frage ob bei einer der beiden Möglichkeit es Punktabzug geben würde oder nicht. Beides hat ja Vor- und Nachteile. Beim übergeben des Feldes werden ja überflüssige Daten weitergegeben die AntysHelperAnt gar nicht braucht. Beim anderen ist der Nachteil das null.

Verfasst: 4. Jan 2008 12:41
von Stumpf.Alex
Wenn ich das richtig verstanden habe, erben die Helpers von der Queen. Probiers mal andersherum: Die Queen ist ein spezialisierter Helper, also die Queen erbt von Helper.

Außerdem kannst du Konstruktoren überladen. Damit kannst du mehrere Konstruktoren für eine Klasse schreiben.


EDIT: Es kommt doch die Aufgabe vor, in der eine einzelne Ant das gesamte Feld aberntet. Da brauchst du ja auch das gesamte RectangleDataAccess. Spezialisert du das nun, wie du vorhin meintest, dann funktioniert diese Ameise nicht mehr. Ich habe schon in einem anderem Topic vorgeschlagen das RectangleDataAccess statisch in der Antsklasse zu speichern. Denn da wird nur 1mal Speicherplatz für ALLE Ameisen verbraucht und kommt somit was die Ausnutzung der Speichers betrifft mind. genausogut weg wie deine Array-Methode.

Verfasst: 4. Jan 2008 13:28
von andre_w
Einfach das gesamte Feld statisch verfügbar zu machen ist sicherlich sinnvoll.

Zum Klassendesign:
Klasse A sollte nur von Klasse B erben wenn man sagen kann "A ist ein B". Ansonsten macht Vererbung keinen Sinn. Deshalb sollte meiner Meinung nach weder der Helper von der Queen erben noch die Queen vom Helper.
Sie machen ja auch komplett verschiedene Sachen, wenn ich die Aufgabe richtig verstanden habe: die Queen koordiniert, die Helper laufen rum.

Re: Frage zu AntysHelperAnt bzw. ElisabethTheQueenHarvesterAnt

Verfasst: 6. Jan 2008 16:39
von Stumpf.Alex
In diesem Fall muss aber die Königen von den Helfern erben, denn in der Aufgabe wird gesagt, dass alle Hilfsfunktionen der Helfer nur von Erben sichtbar sein soll. Damit also unsere Königen die Herrschaft antreten kann, muss sie eine Erbin von den Helfern sein, sonst könnte sie nicht auf die protected Methoden zugreifen.

Re: Frage zu AntysHelperAnt bzw. ElisabethTheQueenHarvesterAnt

Verfasst: 6. Jan 2008 17:06
von Weintraube
Hmm.. ich glaube ich habe die Frage falsch formuliert.

Die Helper erben von der AntyTheHarvesterAnt (wie es laut Aufgabenstellung ja auch sein soll) und die Queen von Robot.
Stumpf.Alex hat geschrieben:In diesem Fall muss aber die Königen von den Helfern erben, denn in der Aufgabe wird gesagt, dass alle Hilfsfunktionen der Helfer nur von Erben sichtbar sein soll. Damit also unsere Königen die Herrschaft antreten kann, muss sie eine Erbin von den Helfern sein, sonst könnte sie nicht auf die protected Methoden zugreifen.
Ich denke mal du meinst AntyTheHarvesterAnt und nicht die Helfer?

Wenn ich in ElisabethTheQueenHarvesterAnt AntysHelperAnts erzeuge (also den Konstruktor von AntysHelperAnt aufrufe), muss ich dem ja das RectangleDataAccess des Feldes übergeben. Allerdings muss aber eine einzelne AntysHelperAnt nicht das gesamte Feld kennen, sondern nur die jeweilige Zeile. Deshalb wäre es ja nicht sinnvoll mehr Informationen weiter zu geben als nötig sind.

Nun hatte ich mir überlegt ein Array (welches die benötigte Zeile enthält) statt des RectangleDataAccess zu übergeben. Allerdings muss man ja in AntysHelperAnt den Superkonstruktor aufrufen, also den Konstruktor von AntyTheHarvesterAnt. Der erwartet aber ein RectangleDataAccess und kein Array. Daher könnte man stattdessen super(street, avenue, null) schreiben. Aber diese Lösung ist ja auch nicht besonders hübsch. Deshalb war meine Frage was man lieber machen soll.

Allerdings hab ich das nun doch anders gelöst indem ich mir einfach ne neue Klasse schreibe und ein RectangleDataAccess erstelle, welches nur die "Höhe eins" besitzt und ansonsten die jeweilige Zeile wiedergeben kann.

Trotzdem danke für eure Antworten :)

Re: Frage zu AntysHelperAnt bzw. ElisabethTheQueenHarvesterAnt

Verfasst: 6. Jan 2008 17:23
von Stumpf.Alex
Weintraube hat geschrieben:Ich denke mal du meinst AntyTheHarvesterAnt und nicht die Helfer?
Ja. Sorry!