Hvad er et uforanderligt objekt?
I objektorienteret programmering er et uforanderligt objekt et objekt, hvis egenskaber ikke kan ændres, når det er oprettet. De fleste objekter derimod er mutable objekter, hvilket betyder, at nogle af eller alle deres egenskaber frit kan ændres efter oprettelsen. En række computersprog har evnen til at oprette uforanderlige objekter, herunder Java, C ++, erlang, Tcl og scala.
Et uforanderligt objekt kan oprettes på en af to måder: ved at oprette en klasse, der per definition er uforanderlig, eller ved eksplicit at erklære et ellers mutabelt objekt for at være uforanderligt. Metoden til oprettelse af en uforanderlig klasse varierer afhængigt af det anvendte computersprog. Uanset sproget må en uforanderlig klasse ikke have nogen metoder, der kan ændre dens interne data og ingen måde for metoder til at ændres - dvs. overstyres eller overbelastes - på en måde, der ændrer dens interne data. Dette er den mere komplicerede af de to tilgange. For at oprette et uforanderligt objekt fra et ellers mutabelt objekt kan man på den anden side ofte anvende et nøgleord for at udpege objektet som uforanderligt.
Som eksempel er immutable objekter, der oprettes i Java, stærkt afhængige af det "endelige" nøgleord. En hurtig måde at gøre en klasse uforanderlig i Java er at erklære klassen, samt alle dens metoder og datamedlemmer, endelige. En lignende strategi kan også bruges i C ++ med "const" -søgeordet. Disse tilgange afhængigt af klassens indhold er muligvis ikke de bedste. Generelt kan objekter normalt gøres uforanderlige ved omhyggelig vedligeholdelse af deres interne data.
At fremstille et uforanderligt objekt ved hjælp af et nøgleord, som i ovenstående eksempel, er ofte meget lettere end at skrive en hel klasse for at være uforanderlig. Brug af denne tilgang har dog sine farer. Når man eksplicit udpeger et uforanderligt objekt på denne måde, er det vigtigt for programmereren at være sikker på, at alle passende egenskaber og data er blevet integreret i objektet først. Det kan være farligt at stole på et ufuldstændigt objekt, især hvis det mangler et vigtigt stykke information.
Hvis et objekt er mutabelt, men kræver, at immutable data oprettes korrekt, skal de immutable data initialiseres, før det mutable objekt kan oprettes. Uændelige objekter er altid uforanderlige, hvad enten det drejer sig om dataværdier eller store objekter, og skal altid behandles som sådan. Generelt kan et uforanderligt objekt ikke gøres mutabelt, når det er oprettet, skønt de undertiden muligvis kan kopieres som mutable objekter. Det kan normalt antages, at et uforanderligt objekt og en af dets kopier også er uforanderligt, hvilket kan forhindre data- eller hukommelsesproblemer.