Skip to main content

Hva er en klasse invariant?

I objektorientert dataprogrammering og design er en klasse invariant et sett med regler som kan brukes til å definere om et objektforekomst eksisterer i en gyldig tilstand.Fra et designperspektiv er en klasse Invariant et sett med grenser mellom hvilke dataene i et objekt må falle for å bli vurdert i en riktig funksjonell tilstand.En klasseinvariant kan defineres i designdokumentasjon eller kildekode -kommentarer, eller på noen programmeringsspråk kan implementeres direkte i handlingsdyktige datakode.Et program som bruker kodede invarianter og påstander kan føre til at programmet slutter å utføre eller kaste forskjellige feil når de ufravikelige forholdene ikke er oppfylt.I motsetning til standard feilkontroll, brukes klasseinvarianter vanligvis bare med det formål å sikre at den indre implementeringen av en klasse fungererI hovedsak er en samling av påstander for en klasse.En påstand, igjen på enkle termer, er en uttalelse som sjekker en del av klassens tilstand og må evaluere til True for at programutførelsen skal fortsette.Et eksempel på en påstand er en uttalelse som sikrer at et gitt heltall alltid er mellom 1 og 10. Når en klasse invariant brukes, blir påstander evaluert for alle relevante deler av dataene som er holdt av objektet, i hovedsak validerer at alle dataene iForskjellen mellom å bruke klasseinvarianter og standard feilkontroll, er imidlertid at invarianter og påstander hovedsakelig brukes til å fange opp feil som ikke bør oppstå med mindre det er en egen feil 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 klasseinvariant sjekk mislykkes, er fordi objektet er i en kompromittert tilstand og ikke er i stand til å utføre dens forutsetninger og etterforhold som er nødvendige for å overholde designkontrakten.

Egenskaper til en klasse invariant i objektorienterte programmeringsspråk der de implisitt er definert, er at invariant er en mekanisme som er arvet av noen underklasser.Dette forhindrer en underklasse i å overstyre eventuelle ufravikelige sjekker som utføres i foreldreklassen.Til syvende og sist betyr dette at en underklasse ikke er i stand til å bryte designkontrakten som er etablert av superklassen, noe som kan forårsake uforutsigbare resultater eller vanskelig å finne programfeil.