Što je nepromjenjivi objekt?

U objektno orijentiranom programiranju, nepromjenjivi objekt je objekt čija se svojstva ne mogu mijenjati nakon što je stvoren. Većina objekata, nasuprot tome, promjenjivi su objekti, što znači da se neka ili sva njihova svojstva mogu slobodno mijenjati nakon stvaranja. Različiti računalni jezici imaju mogućnost stvaranja nepromjenjivih objekata, uključujući Javu, C++, erlang, Tcl i scalu.

Nepromjenjivi objekt može se stvoriti na jedan od dva načina: stvaranjem klase koja je po definiciji nepromjenjiva ili eksplicitnim deklariranjem inače promjenjivog objekta nepromjenjivim. Metodologija za stvaranje nepromjenjive klase razlikuje se ovisno o jeziku računala koji se koristi. Bez obzira na jezik, nepromjenjiva klasa ne smije imati metode koje mogu promijeniti njezine interne podatke niti način da se metode mijenjaju – tj. nadjačaju ili preopterećuju – na način koji bi promijenio njezine interne podatke. Ovo je kompliciraniji od dva pristupa. Za stvaranje nepromjenjivog objekta od inače promjenjivog objekta, s druge strane, često se može primijeniti ključna riječ za označavanje objekta kao nepromjenjivog.

Na primjer, stvaranje nepromjenjivih objekata u Javi uvelike se oslanja na ključnu riječ “final”. Brz način da učinite klasu nepromjenjivom u Javi je deklariranje klase, kao i svih njezinih metoda i članova podataka, konačnim. Slična strategija se također može koristiti u C++ s ključnom riječi “const”. Međutim, ovi pristupi, ovisno o sadržaju nastave, možda neće biti najbolji. Općenito, objekte se obično može učiniti nepromjenjivim pažljivim održavanjem njihovih internih podataka.

Izrada nepromjenjivog objekta pomoću ključne riječi, kao u gornjem primjeru, često je mnogo lakše nego napisati cijelu klasu da bude nepromjenjiva. Korištenje ovog pristupa, međutim, ima svoje opasnosti. Prilikom eksplicitnog označavanja nepromjenjivog objekta na ovaj način, važno je da programer bude siguran da su sva odgovarajuća svojstva i podaci prvo ugrađeni u objekt. Oslanjanje na nekompletan objekt može biti opasno, osobito ako mu nedostaje bitna informacija.

Ako je objekt promjenjiv, ali zahtijeva da se nepromjenjivi podaci pravilno kreiraju, nepromjenjivi podaci moraju biti inicijalizirani prije nego što se može napraviti promjenjivi objekt. Nepromjenjivi objekti su uvijek nepromjenjivi, bilo da su vrijednosti podataka ili veliki objekti, i uvijek se moraju tretirati kao takvi. Općenito, nepromjenjivi objekt ne može se učiniti promjenjivim nakon što je stvoren, iako se ponekad mogu kopirati kao promjenjivi objekti. Obično se može pretpostaviti da su nepromjenjivi objekt i bilo koja od njegovih kopija također nepromjenjivi, što može spriječiti probleme s podacima ili memorijom.