Programmazione orientata agli oggetti in ANSI-C. Implementazione – riepilogo

void * è un tipo molto lasco che abbiamo sfruttato per costruire i metodi polimorfici e, in particolare, il nostro meccanismo per la selezione dei metodi linkati dinamicamente. Per via del polimorfismo, i tipi degli oggetti devono essere verificati a tempo di esecuzione, ossia quando un oggetto diventa parametro di un metodo.

Gli oggetti puntano ad una singola descrizione di classe; di conseguenza i loro tipi possono essere controllati confrontando il puntatore alla loro descrizione di classe con le descrizioni di classe note in un certo progetto. Abbiamo fornito tre metodi diversi per fare ciò: IsA controlla che un oggetto appartenga ad una classe specifica, IsOf() è vero se un oggetto appartiene a una classe o una delle sue sottoclassi e cast() termina il programma chiamante se un oggetto non può essere usato come membro di una certa classe.

Come modalità di codifica standard, richiediamo che cast() venga usato ogni volta che un oggetto puntatore deve essere dereferenziato. In particolare, i metodi con linking statico devono usare cast() su tutti i loro parametri, i selettori lo devono usare su tutti i parametri che non sono nella loro classe e i metodi con linking dinamico li devono usare su tutti i parametri che dichiarano di appartenere alla loro classe.

I valori risultanti devono essere controllati verificano i loro produttori, perchè il consumatore può solo dereferenziarli utilizzando cast() ancora una volta.

Ooc fornisce aiuto nel rafforzare questa metodologia di codicia perchè genera i selettori e fornisce lo statement %casts per l'importazione dei parametri. %casts genera le necessarie chiamate a cast() e dovrebbe essere usato nelle dichiarazioni delle variabili locali di un metodo, cast() non può provare la correttezza dei dati.

Tuttavia, facciamo in modo che sia difficile o altamente improbabile che cast() venga bypassato. La chiave di una codifica per la sicurezza dei programmi è sapere che i programmatori possono commettere errori abbastanza facilmente e limitare i casi in cui un errore non riesce ad essere individuato. Cast() è progettato per raggiungere un equilibrio fra l'efficienza e la possibilità di riconoscere ed individuare malfunzionamenti.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend