Co to jest niezmiennik klasy?
W programowaniu i projektowaniu komputerowym zorientowanym obiektowo niezmiennikiem klasy jest zestaw reguł, których można użyć do określenia, czy instancja obiektu istnieje w poprawnym stanie. Z perspektywy projektowej niezmiennik klasy jest zbiorem granic, między którymi dane w obiekcie muszą spaść, aby mogły zostać uwzględnione w odpowiednim, funkcjonalnym stanie. Niezmiennik klasy może być zdefiniowany w dokumentacji projektowej lub komentarzach do kodu źródłowego lub, w niektórych językach programowania, może być bezpośrednio zaimplementowany w możliwym do wykonania kodzie komputerowym. Program, który używa zakodowanych niezmienników i asercji, może spowodować, że program przerwie wykonywanie lub wyrzuci różne błędy, gdy niezmienne warunki nie zostaną spełnione. W przeciwieństwie do standardowego sprawdzania błędów, niezmienniki klas są zwykle używane tylko w celu zapewnienia, że wewnętrzna implementacja klasy działa, i zwykle nie są wymienione w dokumentacji publicznej lub interfejsach programistycznych.
Z bardzo podstawowego poziomu niezmiennik klasy jest zasadniczo zbiorem twierdzeń dla klasy. Twierdzenie, również w prostych słowach, jest stwierdzeniem, które sprawdza pewną część stanu klasy i musi zostać ocenione jako prawdziwe, aby wykonanie programu było kontynuowane. Jednym z przykładów asercji jest instrukcja, która zapewnia, że dana liczba całkowita zawsze wynosi od 1 do 10. Gdy używany jest niezmiennik klasy, asercje są oceniane dla wszystkich istotnych części danych przechowywanych przez obiekt, zasadniczo sprawdzając, czy wszystkie dane w obiekty mieszczą się w zdefiniowanych zakresach.
W wielu przypadkach użycie niezmiennika klasy silnie przypomina standardowe sprawdzanie błędów, w którym zmienne są mierzone, aby upewnić się, że mieszczą się w granicach użyteczności lub nie są zerowe. Różnica między używaniem niezmienników klasowych a standardowym sprawdzaniem błędów polega jednak na tym, że niezmienniki i twierdzenia są przeważnie wykorzystywane do wychwytywania błędów, które nie powinny wystąpić, chyba że w kodzie występuje istotna wada. Inną różnicą jest to, że standardowe sprawdzanie błędów zwykle obejmuje odzyskiwanie i zmiany w przepływie sterowania programem, podczas gdy wynikiem niezmiennej awarii powinno być zakończenie programu. Powodem, dla którego większość programów kończy się, gdy sprawdzenie niezmiennika klasy nie powiedzie się, jest to, że obiekt znajduje się w stanie kompromisu i z punktu widzenia projektu nie jest w stanie spełnić swoich warunków wstępnych i warunków dodatkowych niezbędnych do przestrzegania umowy o projekt.
Jedną z właściwości niezmiennika klasy w obiektowych językach programowania, w których są one domyślnie zdefiniowane, jest to, że niezmiennik jest mechanizmem dziedziczonym przez dowolne podklasy. Zapobiega to zastąpieniu przez podklasę wszelkich niezmiennych kontroli, które są wykonywane w klasie nadrzędnej. Ostatecznie oznacza to, że podklasa nie jest w stanie złamać umowy projektowej ustanowionej przez nadklasę, co może powodować nieprzewidywalne wyniki lub trudne do znalezienia błędy programu.