Ho bisogno di modellare un oggetto mobile molto semplice ( Robot
) su una griglia rettangolare. Il suo stato è descritto da position
(in pratica una coppia di numeri interi) e direction
(ad esempio, N, E, S, W). Ha solo due metodi (escluso il costruttore): può spostare un passo nella sua direction
, o ruotare di 90, 180 o 270 gradi.
A prescindere dagli ovvi problemi di prestazioni e da eventuali considerazioni specifiche della lingua, quali fattori dovrei prendere in considerazione quando decidere se rendere mutabili le istanze di Robot
(metodi modificano lo stato) o immutabili (i metodi restituiscono un robot appena creato con il nuovo stato) ? Le istanze di questa classe verranno utilizzate in varie simulazioni (ometto intenzionalmente i dettagli per ottenere una comprensione più chiara dei principi generali).
(Modificato per chiarire) Quando penso a un robot, l'immagine naturale nella mia mente è una cosa mobile, che corrisponderebbe a un oggetto mutevole. Detto questo, non è difficile per me superare questa associazione mentale e pensare ai robot come piccoli segni sulla griglia che vengono creati (e distrutti se non ci sono altri punti di riferimento su di loro) ogni volta che si muovono. Quindi non mi preoccuperei di ciò che sembra naturale e sceglierei solo ciò che funziona meglio in termini di codice.
Stavo pianificando di modellare position
e direction
come attributi di robot
. Indipendentemente dal fatto che robot
sia di per sé immutabile, stavo progettando di rendere immutabili i tipi di position
e direction
immutabili solo perché è più naturale per me considerarli come tali (ad es. quando parlo di un "punto su una griglia", immagino che resti sempre nello stesso posto, lo stesso per una "direzione").