Hva er en klasse invariant?
I objektorientert dataprogrammering og -design er en klasseinvariant et sett med regler som kan brukes til å definere om en objektforekomst eksisterer i gyldig tilstand. Fra et designperspektiv er en klasseinvariant et sett av grenser mellom dataene i et objekt må falle for å bli vurdert i en riktig, funksjonell tilstand. En klasseinvariant kan defineres i designdokumentasjon eller kommentarer fra kildekoder, eller i noen programmeringsspråk kan den implementeres direkte i handlingsbar datakode. Et program som bruker kodede invarianter og påstander kan føre til at programmet slutter kjøringen eller kaster forskjellige feil når de invariante betingelsene ikke er oppfylt. I motsetning til standard feilsjekk, brukes klassevirksomheter generelt bare med det formål å sikre at den indre implementeringen av en klasse fungerer, og de er vanligvis ikke oppført i offentlig dokumentasjon eller programmeringsgrensesnitt.
Fra et helt grunnleggende nivå er en klasseinvariant egentlig en samling påstander for en klasse. En påstand, igjen i enkle ord, er en uttalelse som kontrollerer en del av klassens tilstand og må vurdere til sann for at programutførelse skal fortsette. Et eksempel på en påstand er en påstand som sikrer at et gitt heltall alltid er mellom 1 og 10. Når en klassevariant brukes, blir påstander evaluert for alle relevante deler av dataene som objektet innehar, og i det vesentlige validerer at alle dataene i objektet er innenfor de definerte områdene.
I mange tilfeller ligner bruk av en klassevariant sterkt standard feilkontroll, der variabler måles for å sikre at de er innenfor brukbare grenser eller ikke er null. Forskjellen mellom bruk av klassiske invarianter og standard feilkontroll er imidlertid at invarianter og påstander hovedsakelig brukes til å fange opp feil som ikke skal oppstå med mindre det er en egenfeil i koden. En annen forskjell er at standard feilkontroll har en tendens til å involvere utvinning og endringer i programkontrollstrømmen, mens resultatet av en ufravikelig feil bør være programavslutning. Årsaken til at de fleste programmene avsluttes når en klassekontrollkontroll mislykkes, er fordi objektet er i en kompromittert tilstand og ikke fra et designsyn kan oppfylle sine forutsetninger og postbetingelser som er nødvendige for å overholde designkontrakten.
En av egenskapene til en klasseinvariant i objektorienterte programmeringsspråk der de implisitt er definert, er at invarianten er en mekanisme som er arvet av alle underklasser. Dette forhindrer en underklasse i å overstyre eventuelle invariantkontroller som utføres i foreldreklassen. Til syvende og sist betyr dette at en underklasse ikke kan bryte designkontrakten som er opprettet av superklassen, noe som kan føre til uforutsigbare resultater eller vanskelig å finne programfeil.