Ce este un obiect imuabil?

În programarea orientată pe obiecte, un obiect imuabil este un obiect ale cărui proprietăți nu pot fi modificate după ce a fost creat. Majoritatea obiectelor, prin contrast, sunt obiecte mutabile, ceea ce înseamnă că unele sau toate proprietățile lor pot fi modificate liber după creare. O varietate de limbaje de calculator au capacitatea de a crea obiecte imuabile, inclusiv Java, C++, erlang, Tcl și scala.

Un obiect imuabil poate fi creat în unul din două moduri: prin crearea unei clase care este prin definiție imuabilă sau prin declararea explicită a unui obiect altfel mutabil ca fiind imuabil. Metodologia de creare a unei clase imuabile variază în funcție de limbajul de calculator folosit. Indiferent de limbaj, o clasă imuabilă nu trebuie să aibă nicio metodă care să-și poată schimba datele interne și nicio modalitate prin care metodele să fie modificate – adică suprascrise sau supraîncărcate – într-un mod care să-și schimbe datele interne. Aceasta este cea mai complicată dintre cele două abordări. Pentru a crea un obiect imuabil dintr-un obiect altfel mutabil, pe de altă parte, se poate aplica adesea un cuvânt cheie pentru a desemna obiectul ca imuabil.

De exemplu, crearea de obiecte imuabile în Java se bazează în mare măsură pe cuvântul cheie „final”. O modalitate rapidă de a face o clasă imuabilă în Java este declararea finală a clasei, precum și a tuturor metodelor și membrilor ei de date. O strategie similară poate fi folosită și în C++ cu cuvântul cheie „const”. Aceste abordări, în funcție de conținutul clasei, ar putea să nu fie, totuși, cele mai bune. În general, obiectele pot deveni de obicei imuabile prin întreținerea atentă a datelor lor interne.

Crearea unui obiect imuabil folosind un cuvânt cheie, ca în exemplul de mai sus, este adesea mult mai ușor decât scrierea unei clase întregi pentru a fi imuabilă. Folosirea acestei abordări are însă pericolele sale. Când desemnează în mod explicit un obiect imuabil în acest mod, este important ca programatorul să se asigure că toate proprietățile și datele adecvate au fost încorporate mai întâi în obiect. A te baza pe un obiect incomplet poate fi periculos, mai ales dacă îi lipsește o informație esențială.

Dacă un obiect este mutabil, dar necesită ca date imuabile să fie create corect, datele imuabile trebuie inițializate înainte ca obiectul mutabil să poată fi creat. Obiectele imuabile sunt întotdeauna imuabile, fie că sunt valori de date sau obiecte mari, și trebuie întotdeauna tratate ca atare. În general, un obiect imuabil nu poate fi făcut mutabil după ce a fost creat, deși ar putea fi uneori copiat ca obiecte mutabile. De obicei, se poate presupune că un obiect imuabil și oricare dintre copiile sale sunt, de asemenea, imuabile, ceea ce poate preveni problemele de date sau de memorie.