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 er 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 basisniveau, een klasse invariant is in wezen een verzameling beelden isvoor een klas. 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 ligt. Wanneer een klasseninvariant wordt gebruikt, worden beweringen geëvalueerd voor alle relevante delen van de gegevens die door het object worden gehouden, in wezen valideren dat alle gegevens in het object binnen de gedefinieerde bereiken liggen.

In veel gevallen lijkt het gebruik van een klasse -invariant sterk op standaardfoutcontrole, waarin variabelen worden gemeten om ervoor te zorgen dat ze binnen bruikbare grenzen liggen 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 thBij standaard foutcontrole heeft de neiging om herstel en wijzigingen in de programmabesturing te hebben, terwijl het resultaat van een invariante falen de beëindiging van het programma moet zijn. De reden dat de meeste programma's eindigen wanneer een klasse-invariantcontrole mislukt, is omdat het object zich in een gecompromitteerde status bevindt 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.

Een van de 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, wat onvoorspelbare resultaten of moeilijk te vinden programmafouten kan veroorzaken.

ANDERE TALEN