Liebes Forum,
ich begrüße euch ganz herzlich als Neuling in eurer Runde und hoffe auf Rat.
Mein Problem ist folgendes: Ich programmiere gerade ein kleines Spiel, bei dem ich zwei Spielertypen habe: Mensch und Computer. Beide Klassen erben von der abstrakten Klasse "Spieler".
Jetzt habe ich einen Algorithmus, der Züge errechnet. Momentan ist er nur in der Klasse "Computer" zu finden, jedoch soll er auch dem Menschen als Zughilfe dienen.
Da Code-Duplizierung ja nicht wirklich die feinste Art ist, dachte ich an's Auslagern des Algorithmus in eine andere Klasse, die Mensch und Computer erben (Siehe Anhang) - wo wir auch schon bei der Mehrfachvererbung sind.
Wie könnte ich das Problem umgehen? Ich weiß, es gibt da noch Interfaces, aber aus denen werde ich nicht wirklich schlau, zumal die irgendwie das Gleiche wie mehrfachvererbbare abstrakte Klassen zu sein scheinen... ???:L
Hier mal eine vereinfachte Darstellung des Klassenaufbaus:
Klasse: Spieler
Klasse: Mensch
Klasse: Computer
ich begrüße euch ganz herzlich als Neuling in eurer Runde und hoffe auf Rat.
Mein Problem ist folgendes: Ich programmiere gerade ein kleines Spiel, bei dem ich zwei Spielertypen habe: Mensch und Computer. Beide Klassen erben von der abstrakten Klasse "Spieler".
Jetzt habe ich einen Algorithmus, der Züge errechnet. Momentan ist er nur in der Klasse "Computer" zu finden, jedoch soll er auch dem Menschen als Zughilfe dienen.
Da Code-Duplizierung ja nicht wirklich die feinste Art ist, dachte ich an's Auslagern des Algorithmus in eine andere Klasse, die Mensch und Computer erben (Siehe Anhang) - wo wir auch schon bei der Mehrfachvererbung sind.
Wie könnte ich das Problem umgehen? Ich weiß, es gibt da noch Interfaces, aber aus denen werde ich nicht wirklich schlau, zumal die irgendwie das Gleiche wie mehrfachvererbbare abstrakte Klassen zu sein scheinen... ???:L
Hier mal eine vereinfachte Darstellung des Klassenaufbaus:
Klasse: Spieler
Java:
abstract class Spieler{
public String name;
Player(String newName){
name = newName;
}
/**
* Errechnung des nächsten Zuges.
*/
public abstract Zug Algorithmus();
}
Klasse: Mensch
Java:
class Mensch extends Spieler{
Mensch(String newName){
super(newName);
}
public Zug Algorithmus(){
// Hier wird der Zug errechnet und zurückgeliefert.
// Das ist aber Code-Duplizierung, siehe: Computer
}
}
Klasse: Computer
Java:
class Computer extends Spieler{
Computer(String newName){
super(newName);
}
public Zug Algorithmus(){
// Hier wird der Zug errechnet und zurückgeliefert.
// Das ist aber Code-Duplizierung, siehe: Mensch
}
}
Anhänge
Zuletzt bearbeitet: