V objektově orientovaném a funkčním programování je neměnný objekt objekt, jehož stav nelze po vytvoření změnit. Veřejné API neměnného objektu zaručuje, že se bude během své životnosti chovat stejným způsobem. V některých případech je objekt považován za neměnný, i když se interně používané atributy mění, ale stav objektu se z externího hlediska jeví jako nezměněný. Níže je uveden příklad základní neměnné třídy:
uživatel třídy {
soukromé finále Long id;
soukromý závěrečný řetězec název;
Uživatel (dlouhý id Řetězec název) {
tento.id = id;
tento.název = název;
}}
Všechna pole jsou konečná, což znamená, že kompilátoru bylo řečeno, že jejich hodnoty se po inicializaci nesmí změnit. Všechny hodnoty pole se poté předají do konstruktoru.
Výhody neměnného objektu
Protože je objekt neměnný, uživatelé přesně vědí, co od něj mohou očekávat. Kód nelze změnit, což znamená, že neexistuje příležitost zavádět nekonzistence, které by mohly vést k běhovým chybám. Neměnné objekty jsou bezpečné pro vlákna, takže nedochází k problémům se synchronizací. Snadněji se navrhují, implementují a používají než proměnlivé třídy.
Jakmile je neměnný objekt vytvořen a ověřen, žádné jiné vlákno nebo proces na pozadí nebude moci změnit objekt bez přímého vědomí uživatele. To je užitečné pro programy, které vyžadují vysoké zabezpečení. Když nastane problém, ladění je u neměnných objektů snazší, protože původ chyby lze snadno vysledovat.
Neměnné vs. měnitelné objekty
Zatímco neměnné objekty nemohou změnit svůj stav, měnitelné objekty ano. Proměnlivé objekty poskytují metody pro změnu obsahu objektu a nejsou tak bezpečné jako vlákna jako neměnné objekty.
Mezi příklady proměnných objektů v Javě patří StringBuilder a java.util.Date. Mezi příklady neměnných objektů patří všechny starší třídy, obálkové třídy a třídy řetězců.
Mezi příklady proměnlivých typů v Pythonu patří list, dict a set. Mezi neměnné typy v Pythonu patří int, float, bool, string, unicode a n-tice.