Hey Community,
da mein Spiel fast fertig ist und ich durch den Code bereits nicht mehr durchsteige muss ich anfangen meine Programme besser zu unterteilen und sinnvolle Klassen erstellen.
Ich fange einfach mal damit an, dass ich eine Klasse Game habe, wo alle Spielgegenstände und Grafiken enthalten sind. Jeder Spielgegenstand ist ein Objekt und enthält die für sich wichtigen Attribute und Methoden. Da es z.B. die Methode draw() und delete() bei allen Spielgegenständen gibt, könnte ich hierfür sicher ein Interface nutzen? Sollte ich eine abstrakte Klasse für Spielgegenstände schreiben wo ich nur name und alter z.B drin speichere und dort auch das Interface implementiere oder lieber in den Unterklassen ?
Ich habe mal folgendes ausprobiert:
-GameObject ist eine abstrakte Klasse und enthält seinen Namen und implementiert drawable und deleteable.
- Plant ist ein GameObject und enthält eine Methode test()
- Game ist die Klasse, welche alle Spielgegenstände in einer Liste speichert und alles miteinander verknüpft.
Jetzt habe ich die Möglichkeit eine Schleife zu schreiben, wo alle Spielgegenstände welche gemalt werden können mit "instanceof drawable" zu malen:
In einem anderen Forum wurde mir bereits erklärt immer die oberste Klasse als Typ zu verwenden und mit einem Objekt einer Kindklasse zu füllen. Ich verstehe allerdings nicht, warum das so sein soll. Im Code oben habe ich einmal ein GameObject und ein Plant, also einmal vom Typ der Oberklasse und einmal den Type der Klasse selber(was für mich durchaus sinniger erscheint) erzeugt.
Nun der Aufruf:
funktioniert natürlich nicht, da GameObject nichts von der Kindklasse weiß.
Der Aufruf:
allerdings schon, da Plant über sich selbst Bescheid weiß(richtig ausgedrückt)?
Wo liegt hierin nun der Vorteil bzw. ist das wirklich richtig so?
In welchen Fällen sollte ich ein Interface nutzen und wie benutzen?
In welchen Fällen sollte ich den Typ der Oberklasse nehmen?
Die Aussagen im Buch von Galileo Computing sind etwas zu kompliziert...
grüße coco07!
da mein Spiel fast fertig ist und ich durch den Code bereits nicht mehr durchsteige muss ich anfangen meine Programme besser zu unterteilen und sinnvolle Klassen erstellen.
Ich fange einfach mal damit an, dass ich eine Klasse Game habe, wo alle Spielgegenstände und Grafiken enthalten sind. Jeder Spielgegenstand ist ein Objekt und enthält die für sich wichtigen Attribute und Methoden. Da es z.B. die Methode draw() und delete() bei allen Spielgegenständen gibt, könnte ich hierfür sicher ein Interface nutzen? Sollte ich eine abstrakte Klasse für Spielgegenstände schreiben wo ich nur name und alter z.B drin speichere und dort auch das Interface implementiere oder lieber in den Unterklassen ?
Ich habe mal folgendes ausprobiert:
Java:
public static void main(String[] args) {
GameObject gameObject = new Plant();
Plant plant = new Plant();
Game newGame = new Game(gameObject, plant);
newGame.mGameObject.draw();
newGame.mGameObject.delete();
newGame.mGameObject.test(); // Geht nicht
newGame.mPlant.draw();
newGame.mPlant.delete();
newGame.mPlant.test();
}
-GameObject ist eine abstrakte Klasse und enthält seinen Namen und implementiert drawable und deleteable.
- Plant ist ein GameObject und enthält eine Methode test()
- Game ist die Klasse, welche alle Spielgegenstände in einer Liste speichert und alles miteinander verknüpft.
Jetzt habe ich die Möglichkeit eine Schleife zu schreiben, wo alle Spielgegenstände welche gemalt werden können mit "instanceof drawable" zu malen:
Java:
ArrayList<GameObject> gameObjects = new ArrayList<GameObject>();
Plant g1 = new Plant();
Plant g2 = new Plant();
gameObjects.add(g1);
gameObjects.add(g2);
for(Drawable d : gameObjects){
d.draw();
}
In einem anderen Forum wurde mir bereits erklärt immer die oberste Klasse als Typ zu verwenden und mit einem Objekt einer Kindklasse zu füllen. Ich verstehe allerdings nicht, warum das so sein soll. Im Code oben habe ich einmal ein GameObject und ein Plant, also einmal vom Typ der Oberklasse und einmal den Type der Klasse selber(was für mich durchaus sinniger erscheint) erzeugt.
Nun der Aufruf:
Java:
newGame.mGameObject.test()
Der Aufruf:
Java:
newGame.mPlant.test()
Wo liegt hierin nun der Vorteil bzw. ist das wirklich richtig so?
In welchen Fällen sollte ich ein Interface nutzen und wie benutzen?
In welchen Fällen sollte ich den Typ der Oberklasse nehmen?
Die Aussagen im Buch von Galileo Computing sind etwas zu kompliziert...
grüße coco07!
Zuletzt bearbeitet: