Cos'è una classe invariante?

Nella programmazione e progettazione di computer orientati agli oggetti, una classe invariante è un insieme di regole che possono essere utilizzate per definire se esiste un'istanza di oggetto in uno stato valido. Dal punto di vista del design, una classe invariante è un insieme di confini tra i quali i dati all'interno di un oggetto devono cadere per essere considerati in uno stato corretto e funzionale. Un'invariante di classe può essere definita nella documentazione di progettazione o nei commenti del codice sorgente o, in alcuni linguaggi di programmazione, può essere implementato direttamente nel codice del computer attuabile. Un programma che utilizza invarianti e asserzioni codificati può far cessare l'esecuzione o trasmettere vari errori quando le condizioni invarianti non sono soddisfatte. A differenza del controllo degli errori standard, gli invarianti di classe sono generalmente utilizzati solo allo scopo di garantire che l'implementazione interiore di una classe sia funzionante e di solito non sono elencati nella documentazione pubblica o nelle interfacce di programmazione.

da un livello molto semplice, una classe invariante è essenzialmente una raccolta di asserzioniper una classe. Un'affermazione, sempre in termini semplici, è una dichiarazione che controlla una parte dello stato della classe e deve valutare il vero per l'esecuzione del programma per continuare. Un esempio di un'affermazione è un'affermazione che garantisce che un determinato intero sia sempre tra 1 e 10. Quando viene utilizzata una classe invariante, le asserzioni vengono valutate per tutte le parti rilevanti dei dati detenuti dall'oggetto, essenzialmente convalidando che tutti i dati nell'oggetto si trovano all'interno degli intervalli definiti.

In molti casi, l'utilizzo di una classe invariante assomiglia fortemente al controllo degli errori standard, in cui le variabili vengono misurate per assicurarsi che si trovino nei confini utilizzabili o non sono nulli. La differenza tra l'utilizzo degli invarianti di classe e il controllo degli errori standard, tuttavia, è che gli invarianti e le asserzioni sono prevalentemente utilizzati per acquisire errori che non dovrebbero verificarsi a meno che non vi sia un difetto intrinseco nel codice. Un'altra differenza è thAl controllo degli errori standard tende a comportare il recupero e le variazioni del flusso di controllo del programma, mentre il risultato di un guasto invariante dovrebbe essere la risoluzione del programma. Il motivo per cui la maggior parte dei programmi termina quando un controllo invariante di classe fallisce è perché l'oggetto è in uno stato compromesso e non è in grado, da una visione del design, per soddisfare le sue premissioni e le sue condizioni post-condizioni necessarie per aderire al suo contratto di progettazione.

Una delle proprietà di una classe invariante nei linguaggi di programmazione orientati agli oggetti in cui sono implicitamente definite è che l'invariante è un meccanismo ereditato da qualsiasi sottoclasse. Ciò impedisce a una sottoclasse di prevalere su eventuali controlli invarianti che vengono eseguiti nella classe principale. In definitiva, ciò significa che una sottoclasse non è in grado di rompere il contratto di progettazione stabilito dalla superclasse, che potrebbe causare risultati imprevedibili o errori del programma difficili da trovare.

ALTRE LINGUE

Questo articolo è stato utile? Grazie per il feedback Grazie per il feedback

Come possiamo aiutare? Come possiamo aiutare?