Mis on muutumatu objekt?

Objektorienteeritud programmeerimises on muutumatu objekt objekt, mille omadusi ei saa pärast loomist muuta. Enamik objekte seevastu on muutuvad objektid, mis tähendab, et mõnda või kõiki nende omadusi saab pärast loomist vabalt muuta. Paljudel arvutikeeltel on võimalus luua muutumatuid objekte, sealhulgas Java, C++, erlang, Tcl ja scala.

Muutumatu objekti saab luua kahel viisil: luues klassi, mis on definitsiooni järgi muutumatu, või kuulutades selgesõnaliselt muutumatuks muutumatuks objektiks. Muutumatu klassi loomise metoodika varieerub sõltuvalt kasutatavast arvutikeelest. Olenemata keelest ei tohi muutumatul klassil olla meetodeid, mis suudaksid muuta tema siseandmeid, ega meetodite muutmiseks – st ülekirjutamiseks või ülekoormamiseks – viisil, mis muudaks tema siseandmeid. See on kahest lähenemisviisist keerulisem. Teisest küljest võib muidu muutuvast objektist muutumatu objekti loomiseks sageli kasutada märksõna, et määrata objekt muutumatuks.

Näiteks Java-s muutumatu objekti loomine sõltub suuresti “lõplikust” märksõnast. Kiire viis klassi muutmiseks Javas on kuulutada klass, samuti kõik selle meetodid ja andmeliikmed lõplikuks. Sarnast strateegiat saab kasutada ka C++-s märksõnaga “const”. Need lähenemisviisid, olenevalt klassi sisust, ei pruugi siiski olla parimad. Üldiselt saab objekte muuta muutumatuks nende siseandmete hoolika hooldamisega.

Muutumatu objekti loomine märksõna abil, nagu ülaltoodud näites, on sageli palju lihtsam kui terve klassi muutumatuks kirjutamine. Selle lähenemisviisi kasutamisel on aga omad ohud. Sel viisil muutumatu objekti määramisel on programmeerija jaoks oluline olla kindel, et kõik sobivad omadused ja andmed on esmalt objektile lisatud. Mittetäielikule objektile tuginemine võib olla ohtlik, eriti kui sellel puudub oluline teave.

Kui objekt on muutuv, kuid nõuab muutumatute andmete õiget loomist, tuleb muutumatud andmed enne muutuva objekti loomist lähtestada. Muutumatud objektid on alati muutumatud, olgu need siis andmeväärtused või suured objektid, ja neid tuleb alati sellistena käsitleda. Üldiselt ei saa muutumatut objekti pärast selle loomist muuta muudetavaks, kuigi mõnikord võidakse neid kopeerida muudetavate objektidena. Tavaliselt võib eeldada, et muutumatu objekt ja selle koopiad on samuti muutumatud, mis võib ära hoida andme- või mäluprobleeme.