Co to jest obiekt niezmienny?

W programowaniu obiektowym niezmienny obiekt to obiekt, którego właściwości nie mogą zostać zmienione po jego utworzeniu. W przeciwieństwie do tego większość obiektów to obiekty mutowalne, co oznacza, że ​​niektóre lub wszystkie ich właściwości można dowolnie zmieniać po utworzeniu. Różne języki komputerowe mają możliwość tworzenia niezmiennych obiektów, w tym Java, C++, erlang, Tcl i scala.

Obiekt niezmienny można utworzyć na dwa sposoby: tworząc klasę, która z definicji jest niezmienna, lub jawnie deklarując, że obiekt niezmienny w inny sposób jest niezmienny. Metodologia tworzenia niezmiennej klasy różni się w zależności od używanego języka komputerowego. Niezależnie od języka, klasa niezmienna nie może mieć metod, które mogą zmienić jej dane wewnętrzne, ani możliwości zmiany metod — tj. nadpisania lub przeciążenia — w sposób, który zmieniłby jej dane wewnętrzne. To jest bardziej skomplikowane z dwóch podejść. Z drugiej strony, aby utworzyć niezmienny obiekt z innego obiektu, który można by zmienić, często można zastosować słowo kluczowe, aby oznaczyć obiekt jako niezmienny.

Na przykład, tworzenie niezmiennych obiektów w Javie w dużej mierze opiera się na słowie kluczowym „final”. Szybkim sposobem na uczynienie klasy niezmiennej w Javie jest zadeklarowanie klasy, jak również wszystkich jej metod i składowych danych, jako finalne. Podobną strategię można również zastosować w C++ ze słowem kluczowym „const”. Te podejścia, w zależności od treści zajęć, mogą jednak nie być najlepsze. Ogólnie rzecz biorąc, obiekty można zazwyczaj uczynić niezmiennymi poprzez staranne utrzymanie ich danych wewnętrznych.

Stworzenie niezmiennego obiektu za pomocą słowa kluczowego, jak w powyższym przykładzie, jest często znacznie łatwiejsze niż napisanie całej klasy jako niezmiennej. Stosowanie takiego podejścia niesie jednak ze sobą niebezpieczeństwa. Przy wyraźnym wyznaczaniu w ten sposób niezmiennego obiektu ważne jest, aby programista upewnił się, że wszystkie odpowiednie właściwości i dane zostały najpierw włączone do obiektu. Poleganie na niekompletnym przedmiocie może być niebezpieczne, szczególnie jeśli brakuje w nim istotnej informacji.

Jeśli obiekt jest zmienny, ale wymaga prawidłowego utworzenia niezmiennych danych, niezmienne dane muszą zostać zainicjowane przed utworzeniem zmiennego obiektu. Obiekty niezmienne są zawsze niezmienne, niezależnie od tego, czy są to wartości danych, czy duże obiekty, i zawsze muszą być traktowane jako takie. Ogólnie rzecz biorąc, niemutowalny obiekt nie może zostać zmieniony po utworzeniu, chociaż czasami mogą być kopiowane jako zmienne obiekty. Zwykle można założyć, że obiekt niezmienny i dowolna jego kopia jest również niezmienna, co może zapobiec problemom z danymi lub pamięcią.