Kas yra nekintantis objektas?

Objektiniame programavime nekintantis objektas yra objektas, kurio savybių negalima pakeisti po to, kai jis buvo sukurtas. Dauguma objektų, atvirkščiai, yra kintantys objektai, o tai reiškia, kad kai kurios arba visos jų savybės gali būti laisvai keičiamos po sukūrimo. Įvairios kompiuterių kalbos turi galimybę sukurti nekintamus objektus, įskaitant Java, C++, erlang, Tcl ir scala.

Nekintamas objektas gali būti sukurtas vienu iš dviejų būdų: sukuriant klasę, kuri pagal apibrėžimą yra nekintanti, arba aiškiai deklaruojant kitaip kintamą objektą nekintamu. Nekintamos klasės kūrimo metodika skiriasi priklausomai nuo naudojamos kompiuterio kalbos. Nepriklausomai nuo kalbos, nekintančioje klasėje neturi būti jokių metodų, galinčių pakeisti jos vidinius duomenis, ir jokiu būdu, kad metodai būtų pakeisti – ty nepaisyti arba perkrauti – taip, kad pasikeistų jos vidiniai duomenys. Tai yra sudėtingesnis iš dviejų būdų. Kita vertus, norint sukurti nekintantį objektą iš kitaip kintančio objekto, dažnai galima pritaikyti raktinį žodį, kad objektas būtų nekintamas.

Pavyzdžiui, nekintamų objektų kūrimas Java programoje labai priklauso nuo „galutinio“ raktinio žodžio. Greitas būdas padaryti klasę nekintama Java yra paskelbti klasę, taip pat visus jos metodus ir duomenų narius galutiniais. Panaši strategija taip pat gali būti naudojama C++ su raktiniu žodžiu „const“. Tačiau šie metodai, atsižvelgiant į klasės turinį, gali būti ne patys geriausi. Apskritai objektus paprastai galima padaryti nekintamus, atidžiai prižiūrint jų vidinius duomenis.

Padaryti nekintamą objektą naudojant raktinį žodį, kaip aukščiau pateiktame pavyzdyje, dažnai yra daug lengviau, nei įrašyti visą klasę, kad ji būtų nekintanti. Tačiau šio metodo naudojimas turi savo pavojų. Tokiu būdu aiškiai žymint nekintantį objektą, programuotojui svarbu įsitikinti, kad į objektą pirmiausia buvo įtrauktos visos tinkamos savybės ir duomenys. Pasikliauti neužbaigtu objektu gali būti pavojinga, ypač jei jame trūksta esminės informacijos.

Jei objektas yra kintamas, bet norint tinkamai sukurti nekintamus duomenis, nekeičiami duomenys turi būti inicijuoti prieš sukuriant kintamą objektą. Nekintami objektai visada yra nekintami, nesvarbu, ar tai duomenų reikšmės, ar dideli objektai, ir visada turi būti laikomi tokiais. Apskritai, nekintantis objektas negali būti keičiamas po to, kai jis buvo sukurtas, nors kartais jie gali būti nukopijuoti kaip kintantys objektai. Paprastai galima daryti prielaidą, kad nekintantis objektas ir bet kurios jo kopijos taip pat yra nekintamos, o tai gali užkirsti kelią duomenų ar atminties problemoms.