Skip to main content

Hvad er en klasse invariant?

I objektorienteret computerprogrammering og design er en klasse invariant et sæt regler, der kan bruges til at definere, om der findes en objektinstans i en gyldig tilstand.Fra et designperspektiv er en klasse invariant et sæt grænser, som dataene inden for et objekt skal falde for at blive overvejet i en ordentlig, funktionel tilstand.En klasse invariant kan defineres i designdokumentation eller kildekodekommentarer eller kan på nogle programmeringssprog implementeres direkte i handlingsbar computerkode.Et program, der bruger kodede invarianter og påstande, kan få programmet til at ophøre med udførelsen eller kaste forskellige fejl, når de ufravigelige forhold ikke er opfyldt.I modsætning til standardfejlkontrol bruges klassiske invarianter generelt kun med det formål at sikre, at den indre implementering af en klasse fungerer, og de er normalt ikke opført i offentlig dokumentation eller programmeringsgrænseflader.

Fra et meget grundlæggende niveau, en klasse invariantI det væsentlige er en samling af påstande for en klasse.En påstand, igen på enkle termer, er en erklæring, der kontrollerer en del af klassens tilstand og skal evaluere til True for programudførelse for at fortsætte.Et eksempel på en påstand er en erklæring, der sikrer, at et givet heltal altid er mellem 1 og 10. Når der bruges en klasse invariant, evalueres påstande for alle relevante dele af de data, der er indeholdt af objektet, og validerer i det væsentlige, at alle data i demObjekt er inden for de definerede intervaller.

I mange tilfælde ligner brug af en klasse invariant stærkt standardfejlkontrol, hvor variabler måles for at sikre, at de er inden for brugbare grænser eller ikke er nul.Forskellen mellem at bruge klasses invarianter og standardfejlkontrol er imidlertid, at invarianter og påstande overvejende bruges til at fange fejl, der ikke bør forekomme, medmindre der er en iboende fejl i koden.En anden forskel er, at standardfejlkontrol har en tendens til at involvere gendannelse og ændringer i programkontrolstrømmen, mens resultatet af en ufravikelig fiasko skal være programafslutning.Årsagen til, at de fleste programmer afsluttes, når en klasse invariant kontrol mislykkes, er fordi objektet er i en kompromitteret tilstand og ikke, fra en designvisning, til at opfylde dens forudsætninger og efterbetingelser, der er nødvendige for at overholde sin designkontrakt.

En afEgenskaber ved en klasse invariant i objektorienterede programmeringssprog, hvor de implicit er defineret, er, at den invariant er en mekanisme, der er arvet af eventuelle underklasser.Dette forhindrer, at en underklasse tilsidesætter enhver ufravikelig kontrol, der udføres i overordnede klassen.I sidste ende betyder det, at en underklasse ikke er i stand til at bryde designkontrakten, der er fastlagt af superklassen, hvilket kan forårsage uforudsigelige resultater eller vanskelige at finde programfejl.