Hallo Java-Welt,
Zusammen mit einem Freund bin dabei ein kleines Spiel in Java zu entwickel und wir scheitern leider kläglich an der Kapselung eines wizigen Attributes - der Position.
In unserem Spiel braucht jedes Objekt eine Position auf dem Spielfeld, und die soll auch NUR von dem jeweiligen Objekt durch Methodenaufrufe verändert werden (nichts neues also...).
Hier einmal 4 Beispielklassen, die das Problem verdeutlichen:
Wie können wir unbefugen Zugriff auf die Position verhinder, gleichzeitig aber allen Unterobjekten von Spielobjekt ermöglichen ihre Position zu verändern?
Ein einfacher (protected) Setter ist sicher auch nicht besser als das Attribut so zu lassen, da dann über einen kleinen Umweg genau das gleiche Erreicht werden kann...
Das ist sicherlich kein neues Problem, wäre also super wenn ihr eure Erfahrungen mit uns teilen könntet. Wir stehen da etwas auf dem Schlauch:bahnhof:
Zusammen mit einem Freund bin dabei ein kleines Spiel in Java zu entwickel und wir scheitern leider kläglich an der Kapselung eines wizigen Attributes - der Position.
In unserem Spiel braucht jedes Objekt eine Position auf dem Spielfeld, und die soll auch NUR von dem jeweiligen Objekt durch Methodenaufrufe verändert werden (nichts neues also...).
Hier einmal 4 Beispielklassen, die das Problem verdeutlichen:
Java:
class Spielobjekt{
protected int position
...
}
Java:
class Kugel extends Spielobjekt{
private int geschwindigkeit = 5;
public void positionAktualisiren()
{
//Zugriff auf position von Spielobjekt
position = position + geschwindigkeit;
}
}
Java:
class Gegner extends Spielobjekt{
public void angreifen(Spieler spieler)
{
//In Richtung des Spielers bewegen - also zugriff auf position nötig!!!
}
}
Java:
class Spielfigur extends Spielobjekt{
public void getroffenVon(Kugel kugel)
{
//Genau hier kann ich jetzt die Position von der Kugel beliebig ändern und das ist nicht im Sinne des Erfinders....
kugel.position = 42;
}
}
Wie können wir unbefugen Zugriff auf die Position verhinder, gleichzeitig aber allen Unterobjekten von Spielobjekt ermöglichen ihre Position zu verändern?
Ein einfacher (protected) Setter ist sicher auch nicht besser als das Attribut so zu lassen, da dann über einen kleinen Umweg genau das gleiche Erreicht werden kann...
Das ist sicherlich kein neues Problem, wäre also super wenn ihr eure Erfahrungen mit uns teilen könntet. Wir stehen da etwas auf dem Schlauch:bahnhof: