Hva er et uforanderlig objekt?
I objektorientert programmering er et uforanderlig objekt et objekt hvis egenskaper ikke kan endres etter at det er opprettet. De fleste objekter derimot er mutbare objekter, noe som betyr at noen eller alle egenskapene deres kan endres fritt etter opprettelsen. En rekke dataspråk har muligheten til å lage uforanderlige objekter, inkludert Java, C ++, erlang, Tcl og scala.
Et uforanderlig objekt kan opprettes på en av to måter: ved å opprette en klasse som per definisjon er uforanderlig eller ved eksplisitt å erklære at et ellers mutabelt objekt er uforanderlig. Metodikken for å lage en uforanderlig klasse varierer avhengig av dataspråket som brukes. Uavhengig av språket, må en uforanderlig klasse ikke ha noen metoder som kan endre dens interne data og ingen måte for metoder å bli endret på - dvs. overstyres eller overbelastes - på en måte som vil endre de interne dataene. Dette er den mer kompliserte av de to tilnærmingene. For å lage et uforanderlig objekt fra et ellers mutabelt objekt, derimot, kan man ofte bruke et nøkkelord for å betegne objektet som uforanderlig.
Som et eksempel er uforanderlig objektoppretting i Java sterkt avhengig av det "endelige" nøkkelordet. En rask måte å gjøre en klasse uforanderlig i Java er å erklære klassen, samt alle dens metoder og datamedlemmer, for endelig. En lignende strategi kan også brukes i C ++ med søkeordet "const". Disse tilnærmingene, avhengig av klasseinnhold, er kanskje ikke de beste. Generelt kan objekter vanligvis gjøres uforanderlige ved nøye vedlikehold av deres interne data.
Å lage et uforanderlig objekt ved hjelp av et nøkkelord, som i eksemplet ovenfor, er ofte mye enklere enn å skrive en hel klasse for å være uforanderlig. Å bruke denne tilnærmingen har imidlertid sine farer. Når man eksplisitt betegner et uforanderlig objekt på denne måten, er det viktig for programmereren å være sikker på at alle passende egenskaper og data er blitt integrert i objektet først. Å stole på et ufullstendig objekt kan være farlig, spesielt hvis det mangler en viktig informasjon.
Hvis et objekt er mutabelt, men krever at uforanderlige data skal opprettes riktig, må de uforanderlige dataene initialiseres før det mutbare objektet kan lages. Uforanderlige objekter er alltid uforanderlige, enten det er dataverdier eller store objekter, og må alltid behandles som sådan. Generelt kan et uforanderlig objekt ikke gjøres mutabelt etter at det er opprettet, selv om de noen ganger kan kopieres som mutable objekter. Det kan vanligvis antas at en uforanderlig gjenstand og noen av kopiene også er uforanderlig, noe som kan forhindre data- eller hukommelsesproblemer.