Kaj je nespremenljivi objekt?

V objektno usmerjenem programiranju je nespremenljiv objekt objekt, katerega lastnosti ni mogoče spremeniti, potem ko je bil ustvarjen. Nasprotno pa je večina predmetov spremenljivih, kar pomeni, da se lahko nekatere ali vse njihove lastnosti prosto spreminjajo po ustvarjanju. Različni računalniški jeziki imajo možnost ustvarjanja nespremenljivih predmetov, vključno z Java, C++, erlang, Tcl in scala.

Nespremenljivi objekt je mogoče ustvariti na enega od dveh načinov: z ustvarjanjem razreda, ki je po definiciji nespremenljiv, ali z izrecno razglasitev sicer spremenljivega predmeta za nespremenljivega. Metodologija za ustvarjanje nespremenljivega razreda se razlikuje glede na uporabljeni računalniški jezik. Ne glede na jezik nespremenljivi razred ne sme imeti metod, ki bi lahko spremenile njegove notranje podatke, in nobenega načina, da bi se metode spremenile – tj. preglasile ali preobremenile – na način, ki bi spremenil njegove notranje podatke. To je bolj zapleten od obeh pristopov. Po drugi strani pa lahko za ustvarjanje nespremenljivega predmeta iz sicer spremenljivega predmeta pogosto uporabite ključno besedo, da predmet označite kot nespremenljivega.

Na primer, ustvarjanje nespremenljivih objektov v Javi se močno zanaša na ključno besedo “final”. Hiter način, da naredite razred nespremenljivega v Javi, je, da razred, pa tudi vse njegove metode in člane podatkov, razglasite za končne. Podobno strategijo je mogoče uporabiti tudi v C++ s ključno besedo »const«. Vendar ti pristopi, odvisno od vsebine razreda, morda niso najboljši. Na splošno je mogoče objekte običajno narediti nespremenljive s skrbnim vzdrževanjem njihovih notranjih podatkov.

Ustvarjanje nespremenljivega predmeta s ključno besedo, kot v zgornjem primeru, je pogosto veliko lažje kot pisanje celotnega razreda, da je nespremenljiv. Vendar ima uporaba tega pristopa svoje nevarnosti. Pri izrecnem označevanju nespremenljivega objekta na ta način je pomembno, da se programer prepriča, da so bile vse ustrezne lastnosti in podatki najprej vključeni v objekt. Zanašanje na nepopoln predmet je lahko nevarno, zlasti če mu manjka bistvena informacija.

Če je objekt spremenljiv, vendar zahteva, da se nespremenljivi podatki pravilno ustvarijo, je treba nespremenljive podatke inicializirati, preden je mogoče izdelati spremenljivi objekt. Nespremenljivi objekti so vedno nespremenljivi, ne glede na to, ali so vrednosti podatkov ali veliki objekti, in jih je treba vedno obravnavati kot take. Na splošno nespremenljivega predmeta ni mogoče spremeniti, ko je bil ustvarjen, čeprav se včasih lahko kopira kot spremenljivi objekti. Običajno lahko domnevamo, da sta nespremenljivi predmet in katera koli njegova kopija prav tako nespremenljivi, kar lahko prepreči težave s podatki ali pomnilnikom.