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 mutable objekter, noe som betyr at noen eller alle egenskapene deres kan endres fritt etter opprettelse. 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 å lage en klasse som per definisjon er uforanderlig eller ved eksplisitt å erklære et ellers mutabelt objekt som kan være uforanderlig. Metodikken for å lage en uforanderlig klasse varierer avhengig av dataspråk som brukes. Uansett språket, må en uforanderlig klasse ikke ha noen metoder som kan endre sine interne data og ingen måte for metoder som skal endres - dvs. overstyrt eller overbelastet - på en måte som vil endre sine interne data. Dette er det mer kompliserte av de to tilnærmingene. Å lage et uforanderlig objekt fra en annenwiSE Mutable Object, derimot, kan man ofte bruke et nøkkelord for å utpeke objektet som uforanderlig.
Som et eksempel er uforanderlig objektoppretting i Java avhengig av det "endelige" nøkkelordet. En rask måte å gjøre en klasse uforanderlig i Java er å erklære klassen, så vel som alle dens metoder og datamedlemmer, Final. En lignende strategi kan også brukes i C ++ med nøkkelordet "Const". Disse tilnærmingene, avhengig av klasseinnholdet, er kanskje ikke de beste. Generelt kan objekter vanligvis gjøres uforanderlig ved nøye vedlikehold av 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 du eksplisitt betegner et uforanderlig objekt på denne måten, er det viktig for programmereren å være sikker på at alle passende egenskaperog data er først innarbeidet i objektet. Å stole på et ufullstendig objekt kan være farlig, spesielt hvis det mangler en viktig informasjon.
Hvis et objekt er mutabelt, men krever uforanderlige data som skal opprettes riktig, må de uforanderlige dataene initialiseres før det mutable objektet kan gjøres. Uforanderlige objekter er alltid uforanderlige, enten de er dataverdier eller store objekter, og må alltid behandles som sådan. Generelt kan ikke et uforanderlig objekt gjøres mutabelt etter at det er opprettet, selv om de noen ganger kan kopieres som mutable objekter. Det kan vanligvis antas at et uforanderlig objekt og noen av kopiene også er uforanderlige, noe som kan forhindre data eller hukommelsesproblemer.