Sto programmando un gioco di piccole dimensioni e ho due classi: Board
e Piece
. Board
hanno (finora) uno Piece
che può essere spostato nei bordi di Board
.Il passaggio dell'oggetto (questo) al metodo di un campo è un approccio errato?
public class Board {
private Piece piece_;
private int width, height;
...
movePieceDown() {
piece_.moveTo(this, 1, 2);
}
}
public class Piece {
public boolean moveTo(Board board, int x, int y) {
// move piece to new location (x,y)
// return true if successful
}
}
È brutto approccio se io in piece_.moveTo(this, 1, 2);
riferimento passaggio al bordo in modo pezzo potrebbe passare alla nuova posizione se non ci sono ostacoli sul bordo? Senza passare il riferimento a Board, Piece non sa se ci sono ostacoli in una nuova posizione o è fuori dai confini del Board.
È a mio parere che ogni oggetto dovrebbe preoccuparsi solo di sé: Pezzo dovrebbe spostarsi in una nuova posizione e Board dovrebbe preoccuparsi se è legale o no, MA questo codice di esempio che ho pubblicato ha più senso e semplifica le cose.
TL; DR: Sto interrompendo alcune linee guida OOP con il passaggio dell'oggetto stesso al metodo di un campo o è un normale idioma OOP? Grazie in anticipo per chiarirmi questo.
Perché stai passando un 'Board' per spostarePieceDown? –
Sì, buona telefonata, mi dispiace, quello era un refuso quando stavo campionando il codice per la pubblicazione. Ora verrà modificato. – h00s