Vad är ett oföränderligt objekt?

I objektorienterad programmering är ett oföränderligt objekt ett objekt vars egenskaper inte kan ändras efter att det har skapats. De flesta objekt, däremot, är föränderliga objekt, vilket betyder att vissa eller alla deras egenskaper kan ändras fritt efter skapandet. En mängd olika datorspråk har förmågan att skapa oföränderliga objekt, inklusive Java, C++, erlang, Tcl och scala.

Ett oföränderligt objekt kan skapas på ett av två sätt: genom att skapa en klass som per definition är oföränderlig eller genom att uttryckligen förklara att ett annars föränderligt objekt är oföränderligt. Metoden för att skapa en oföränderlig klass varierar beroende på vilket datorspråk som används. Oavsett språk får en oföränderlig klass inte ha några metoder som kan ändra dess interna data och inget sätt för metoder att ändras – dvs åsidosättas eller överbelastas – på ett sätt som skulle ändra dess interna data. Detta är det mer komplicerade av de två tillvägagångssätten. För att skapa ett oföränderligt objekt från ett annars föränderligt objekt kan man å andra sidan ofta använda ett nyckelord för att beteckna objektet som oföränderligt.

Som ett exempel bygger oföränderligt objektskapande i Java till stor del på det ”slutliga” nyckelordet. Ett snabbt sätt att göra en klass oföränderlig i Java är att deklarera klassen, såväl som alla dess metoder och datamedlemmar, final. En liknande strategi kan också användas i C++ med nyckelordet ”const”. Dessa tillvägagångssätt, beroende på klassinnehållet, kanske inte är de bästa. I allmänhet kan objekt vanligtvis göras oföränderliga genom noggrant underhåll av deras interna data.

Att göra ett oföränderligt objekt med ett nyckelord, som i exemplet ovan, är ofta mycket lättare än att skriva en hel klass för att vara oföränderlig. Att använda detta tillvägagångssätt har dock sina faror. När du uttryckligen designerar ett oföränderligt objekt på detta sätt, är det viktigt för programmeraren att vara säker på att alla lämpliga egenskaper och data har införlivats i objektet först. Att förlita sig på ett ofullständigt föremål kan vara farligt, särskilt om det saknar en viktig del av information.

Om ett objekt är föränderligt men kräver att oföränderlig data skapas på rätt sätt, måste den oföränderliga data initialiseras innan det föränderliga objektet kan skapas. Oföränderliga objekt är alltid oföränderliga, oavsett om de är datavärden eller stora objekt, och måste alltid behandlas som sådana. I allmänhet kan ett oföränderligt objekt inte göras föränderligt efter att det har skapats, även om de ibland kan kopieras som föränderliga objekt. Det kan vanligtvis antas att ett oföränderligt objekt och någon av dess kopior också är oföränderliga, vilket kan förhindra data- eller minnesproblem.