Skip to main content

Wat is een klasse invariant?

In objectgeoriënteerde computerprogrammering en -ontwerp is een klasse -invariant een set regels die kunnen worden gebruikt om te bepalen of een objectinstantie bestaat in een geldige status.Vanuit een ontwerpperspectief is een klasse -invariant een reeks grenzen waartussen de gegevens binnen een object moeten vallen om in een juiste, functionele toestand te worden overwogen.Een klasse -invariant kan worden gedefinieerd in ontwerpdocumentatie of broncode -opmerkingen of, in sommige programmeertalen, kan direct worden geïmplementeerd in bruikbare computercode.Een programma dat gecodeerde invarianten en beweringen gebruikt, kan ertoe leiden dat het programma de uitvoering beëindigt of verschillende fouten gooit wanneer niet aan de invariante voorwaarden wordt voldaan.In tegenstelling tot standaardfoutcontrole worden klasse -invarianten in het algemeen alleen gebruikt om ervoor te zorgen dat de innerlijke implementatie van een klasse functioneert, en ze worden meestal niet vermeld in openbare documentatie of programmeerinterfaces.

Van een zeer basaal niveau, een klasse -invariantis in wezen een verzameling beweringen voor een klasse.Een bewering, opnieuw in eenvoudige bewoordingen, is een verklaring die een deel van de status van de klas controleert en moet evalueren naar waar voor de uitvoering van het programma om door te gaan.Een voorbeeld van een bewering is een verklaring die ervoor zorgt dat een bepaald geheel getal altijd tussen 1 en 10 is. Wanneer een klasse invariant wordt gebruikt, worden beweringen geëvalueerd voor alle relevante delen van de gegevens die door het object worden gehouden, in wezen dat alle gegevens in deObject bevindt zich binnen de gedefinieerde bereiken.

In veel gevallen lijkt het gebruik van een klasse -invariant sterk op standaardfoutcontrole, waarbij variabelen worden gemeten om ervoor te zorgen dat ze binnen bruikbare grenzen zijn of niet nul zijn.Het verschil tussen het gebruik van klasseninvarianten en standaardfoutcontrole is echter dat invarianten en beweringen voornamelijk worden gebruikt om fouten vast te leggen die niet mogen optreden tenzij er een intrinsieke fout in de code is.Een ander verschil is dat standaardfoutcontrole de neiging heeft om herstel en veranderingen in programmabesturingsstroom in te dienen, terwijl het resultaat van een invariant falen programma -beëindiging moet zijn.De reden waarom de meeste programma's eindigen wanneer een klasse-invariante cheque mislukt, is omdat het object in een gecompromitteerde staat is en vanuit een ontwerpweergave niet in staat is om zijn voorwaarden en post-condities te vervullen die nodig zijn om zich te houden aan het ontwerpcontract.Eigenschappen van een klasse invariant in objectgeoriënteerde programmeertalen waarin ze impliciet worden gedefinieerd, is dat de invariant een mechanisme is dat wordt geërfd door eventuele subklassen.Dit voorkomt dat een subklasse eventuele invariante controles die in de bovenliggende klasse worden uitgevoerd, overschrijdt.Uiteindelijk betekent dit dat een subklasse niet in staat is om het ontwerpcontract te breken dat is vastgesteld door de superclass, die onvoorspelbare resultaten of moeilijk te vinden programmafouten kan veroorzaken.