Skip to main content

Vad är en klassinvariant?

I objektorienterad datorprogrammering och design är en klassvariant en uppsättning regler som kan användas för att definiera om ett objektinstans finns i ett giltigt tillstånd.Ur ett designperspektiv är en klassvariant en uppsättning gränser mellan vilka data inom ett objekt måste falla för att övervägas i ett ordentligt, funktionellt tillstånd.En klassvariant kan definieras i designdokumentation eller källkodkommentarer eller, på vissa programmeringsspråk, kan direkt implementeras i handlingsbar datorkod.Ett program som använder kodade invarianter och påståenden kan leda till att programmet upphör att utföra eller kasta olika fel när de invarianta villkoren inte uppfylls.Till skillnad från standardfelkontroll används klassinvarianter i allmänhet endast för att säkerställa att den inre implementeringen av en klass fungerar, och de är vanligtvis inte listade i offentlig dokumentation eller programmeringsgränssnitt.

Från en mycket grundläggande nivå, en klassinvariantI huvudsak är en samling påståenden för en klass.En påstående, återigen, är ett enkelt termer, ett uttalande som kontrollerar en del av klassens tillstånd och måste utvärdera till True för att programutförande ska fortsätta.Ett exempel på ett påstående är ett uttalande som säkerställer att ett givet heltal alltid är mellan 1 och 10. När en klassinvariant används utvärderas påståenden för alla relevanta delar av uppgifterna som innehas av objektet, i huvudsak validerar att alla data iObjektet ligger inom de definierade intervallen.

I många fall, med hjälp av en klassvariant liknar starkt standardfelkontroll, där variabler mäts för att säkerställa att de är inom användbara gränser eller inte är noll.Skillnaden mellan att använda klassinvarianter och standardfelkontroll är emellertid att invarianter och påståenden främst används för att fånga fel som inte bör inträffa om det inte finns en inre brist i koden.En annan skillnad är att standardfelkontroll tenderar att involvera återhämtning och förändringar i programkontrollflödet, medan resultatet av ett invariant fel bör vara programmet.Anledningen till att de flesta program avslutas när en klassinvariantkontroll misslyckas är att objektet är i ett komprometterat tillstånd och inte kan, från en designvy, för att uppfylla sina förutsättningar och efterkonditioner som krävs för att följa dess designavtal.

Ett av deEgenskaper hos en klassinvariant i objektorienterade programmeringsspråk där de implicit definieras är att den invarianta är en mekanism som ärvts av några underklasser.Detta förhindrar en underklass från att åsidosätta alla invarianta kontroller som utförs i överordnad klass.I slutändan innebär detta att en underklass inte kan bryta designkontraktet som upprättats av superklassen, vilket kan orsaka oförutsägbara resultat eller svårt att hitta programfel.