Co je třída Invariant?
V objektově orientovaném počítačovém programování a designu je invariant třídy sada pravidel, která lze použít k definování, zda instance objektu existuje v platném stavu. Z pohledu designu je invariant třídy množina hranic, mezi nimiž musí být data v objektu považována za řádně funkční. Třída invariant může být definována v projektové dokumentaci nebo v komentářích zdrojového kódu nebo, v některých programovacích jazycích, může být přímo implementována do akčního počítačového kódu. Program, který používá kódované invarianty a tvrzení, může způsobit, že program přestane vykonávat nebo vyvolá různé chyby, pokud nebudou splněny invariantní podmínky. Na rozdíl od standardní kontroly chyb se invarianty třídy obecně používají pouze za účelem zajištění funkčnosti vnitřní implementace třídy a obvykle nejsou uvedeny ve veřejné dokumentaci nebo programovacích rozhraních.
Od velmi základní úrovně je invariant třídy v podstatě souborem tvrzení o třídě. Prohlášení, opět jednoduše řečeno, je příkazem, který kontroluje určitou část stavu třídy a musí pokračovat v hodnocení pravdivosti, aby provádění programu pokračovalo. Jedním příkladem tvrzení je prohlášení, které zajišťuje, že dané celé číslo je vždy mezi 1 a 10. Při použití invariantu třídy jsou tvrzení vyhodnocena pro všechny relevantní části dat v držení objektu, což v podstatě potvrzuje, že všechna data v objekt se nachází v definovaných rozsazích.
V mnoha případech se použití invariantu třídy silně podobá standardní kontrole chyb, ve které se proměnné měří, aby se zajistilo, že jsou v použitelných mezích nebo nejsou nulové. Rozdíl mezi používáním invariantů třídy a standardní kontrolou chyb je však v tom, že invarianty a tvrzení se používají hlavně k zachycení chyb, které by se neměly vyskytnout, pokud v kódu není vnitřní chyba. Další rozdíl je v tom, že standardní kontrola chyb má tendenci zahrnovat zotavení a změny v toku řízení programu, zatímco výsledkem neměnné poruchy by mělo být ukončení programu. Důvod, proč většina programů končí, když selže kontrola invariantů třídy, je ten, že objekt je v ohroženém stavu a není schopen z pohledu návrhu splnit své předpoklady a podmínky nezbytné pro dodržení smlouvy o provedení.
Jednou z vlastností třídy invariant v objektově orientovaných programovacích jazycích, ve kterých jsou implicitně definovány, je to, že invariant je mechanismem zděděným jakoukoli podtřídou. To zabrání podtřídě v potlačení všech invariantních kontrol, které jsou prováděny v nadřazené třídě. V konečném důsledku to znamená, že podtřída není schopna porušit konstrukční smlouvu vytvořenou nadřazenou třídou, což by mohlo způsobit nepředvídatelné výsledky nebo těžko najít chyby programu.