Nella programmazione orientata agli oggetti, un oggetto immutabile è un oggetto le cui proprietà non possono essere modificate dopo che è stato creato. La maggior parte degli oggetti, al contrario, sono oggetti mutabili, il che significa che alcune o tutte le loro proprietà possono essere modificate liberamente dopo la creazione. Una varietà di linguaggi per computer hanno la capacità di creare oggetti immutabili, inclusi Java, C++, erlang, Tcl e scala.
Un oggetto immutabile può essere creato in due modi: creando una classe che è per definizione immutabile o dichiarando esplicitamente immutabile un oggetto altrimenti mutabile. La metodologia per creare una classe immutabile varia a seconda del linguaggio informatico utilizzato. Indipendentemente dal linguaggio, una classe immutabile non deve avere metodi che possano cambiare i suoi dati interni e nessun modo per cambiare i metodi — cioè sovrascriverli o sovraccaricarli — in un modo che cambierebbe i suoi dati interni. Questo è il più complicato dei due approcci. Per creare un oggetto immutabile da un oggetto altrimenti mutabile, d’altra parte, si può spesso applicare una parola chiave per designare l’oggetto come immutabile.
Ad esempio, la creazione di oggetti immutabili in Java si basa molto sulla parola chiave “final”. Un modo rapido per rendere immutabile una classe in Java è dichiarare la classe, così come tutti i suoi metodi e membri dati, definitivi. Una strategia simile può essere utilizzata anche in C++ con la parola chiave “const”. Tuttavia, questi approcci, a seconda del contenuto della classe, potrebbero non essere i migliori. In generale, gli oggetti possono di solito essere resi immutabili mediante un’attenta manutenzione dei loro dati interni.
Creare un oggetto immutabile usando una parola chiave, come nell’esempio sopra, è spesso molto più semplice che scrivere un’intera classe come immutabile. Usare questo approccio, tuttavia, ha i suoi pericoli. Quando si designa esplicitamente un oggetto immutabile in questo modo, è importante che il programmatore si assicuri che tutte le proprietà ei dati appropriati siano stati prima incorporati nell’oggetto. Affidarsi a un oggetto incompleto potrebbe essere pericoloso, soprattutto se manca un’informazione essenziale.
Se un oggetto è mutabile ma richiede la corretta creazione di dati immutabili, i dati immutabili devono essere inizializzati prima che l’oggetto mutabile possa essere creato. Gli oggetti immutabili sono sempre immutabili, siano essi valori di dati o oggetti di grandi dimensioni, e devono essere sempre trattati come tali. In generale, un oggetto immutabile non può essere reso mutabile dopo che è stato creato, sebbene a volte possano essere copiati come oggetti mutabili. Di solito si può presumere che un oggetto immutabile e tutte le sue copie siano immutabili, il che può prevenire problemi di dati o di memoria.