Vad är en klassvariant?

I objektorienterad datorprogrammering och design är en klass invariant en uppsättning regler som kan användas för att definiera om en objektinstans finns i ett giltigt tillstånd. Ur ett designperspektiv är en klass invariant en uppsättning gränser mellan vilka data inom ett objekt måste falla för att betraktas i ett korrekt, funktionellt tillstånd. En klass invariant kan definieras i designdokumentation eller kommentarer från källkoden eller, i vissa programmeringsspråk, kan implementeras direkt i handlingsbar datorkod. Ett program som använder kodade invarianter och påståenden kan orsaka att programmet upphör med körningen eller kastar olika fel när de invarianta villkoren inte är uppfyllda. Till skillnad från standardfelkontroll används klassinvianer vanligtvis endast i syfte 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å, är en klass invariant i grunden en samling av påståenden för en klass. En påstående, återigen i enkla termer, är ett uttalande som kontrollerar en del av klassens tillstånd och måste utvärdera till sann för att programutförandet ska fortsätta. Ett exempel på ett påstående är ett uttalande som säkerställer att ett visst heltal alltid är mellan 1 och 10. När en klass invariant används utvärderas påståenden för alla relevanta delar av data som objektet innehar, vilket i huvudsak validerar att alla data i objekt ligger inom de definierade områdena.

I många fall liknar det att använda en klass invariant starkt felkontroll, där variabler mäts för att säkerställa att de ligger inom användbara gränser eller inte är noll. Skillnaden mellan att använda klassinvarianter och standardfelkontroll är dock att invarianter och påståenden främst används för att fånga fel som inte bör uppstå 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 skulle vara programavslutning. Anledningen till att de flesta program avslutas när en klassinvariantkontroll misslyckas är att objektet är i ett komprometterat tillstånd och från en designvy inte kan uppfylla sina förutsättningar och postvillkor som är nödvändiga för att följa dess designkontrakt.

En av egenskaperna hos en klass invariant i objektorienterade programmeringsspråk där de implicit definieras är att invarianten är en mekanism som ärvs av alla underklasser. Detta förhindrar en underklass från att åsidosätta eventuella invariantkontroller som utförs i förälderklassen. 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åra att hitta programfel.

ANDRA SPRÅK

Hjälpte den här artikeln dig? Tack för feedbacken Tack för feedbacken

Hur kan vi hjälpa? Hur kan vi hjälpa?