Kaj je invariant razreda?

V objektno usmerjenem računalniškem programiranju in oblikovanju je invarianta razreda niz pravil, ki jih je mogoče uporabiti za določitev, ali primerek objekta obstaja v veljavnem stanju. Z vidika načrtovanja je to niz meja, med katerimi morajo pasti podatki znotraj predmeta, da se obravnavajo v ustreznem funkcionalnem stanju. Lahko se definira v projektni dokumentaciji ali v komentarjih izvorne kode ali pa se v nekaterih programskih jezikih lahko neposredno implementira v računalniško kodo, ki je uporabna. Program, ki uporablja kodirane nespremenljive in trditve, lahko povzroči, da program preneha izvajati ali povzroči različne napake, če invariantni pogoji niso izpolnjeni. Za razliko od standardnega preverjanja napak se invariante razreda na splošno uporabljajo samo za zagotavljanje delovanja notranje izvedbe razreda in običajno niso navedene v javni dokumentaciji ali programskih vmesnikih.

Na zelo osnovni ravni je invarianta razreda v bistvu zbirka trditev za razred. Trditev, spet preprosto povedano, je stavek, ki preveri določen del stanja razreda in mora oceniti, da je res, da se izvajanje programa nadaljuje. En primer trditve je stavek, ki zagotavlja, da je dano celo število vedno med 1 in 10. Ko se uporabi invarianta razreda, se trditve ovrednotijo ​​za vse ustrezne dele podatkov, ki jih hrani objekt, v bistvu potrjuje, da so vsi podatki v predmet znotraj definiranega obsega.

V mnogih primerih uporaba invarianta razreda močno spominja na standardno preverjanje napak, pri katerem se merijo spremenljivke, da se zagotovi, da so znotraj uporabnih meja ali niso ničelne. Razlika med uporabo invariant razreda in standardnim preverjanjem napak pa je v tem, da se nespremenljive in trditve večinoma uporabljajo za zajemanje napak, ki se ne bi smele zgoditi, razen če je v kodi notranja napaka. Druga razlika je v tem, da standardno preverjanje napak običajno vključuje obnovitev in spremembe v toku nadzora programa, medtem ko bi moral biti rezultat nespremenljive napake zaključek programa. Razlog, zakaj se večina programov konča, ko preverjanje invariantnosti razreda ne uspe, je, ker je objekt v ogroženem stanju in z vidika načrtovanja ne more izpolniti svojih predpogojev in naknadnih pogojev, potrebnih za spoštovanje pogodbe o načrtovanju.

Ena od lastnosti invarianta razreda v objektno usmerjenih programskih jezikih, v katerih so implicitno definirani, je, da je invarianta mehanizem, ki ga podedujejo kateri koli podrazredi. To preprečuje, da bi podrazred preglasil vsa preverjanja nespremenljivosti, ki se izvajajo v nadrejenem razredu. Navsezadnje to pomeni, da podrazred ne more prekiniti pogodbe o načrtovanju, ki jo je vzpostavil nadrazred, kar bi lahko povzročilo nepredvidljive rezultate ali težko najdene programske napake.