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 er en klasse invariant i det væsentlige en samling af påstandeFor 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, i det væsentlige validerer, at alle data i objektet 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 thVed standardfejlkontrol har kontrol en tendens til at involvere gendannelse og ændringer i programkontrolstrømmen, mens resultatet af en ufravikelig fiasko bør være programoptering. Årsagen til, at de fleste programmer afsluttes, når en klasse invariant kontrol mislykkes, er fordi objektet er i en kompromitteret tilstand og ikke er i stand til, fra en designvisning, til at opfylde dens forudsætninger og efterbetingelser, der er nødvendige for at overholde sin designkontrakt.
En af egenskaberne 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.