Programmazione orientata agli oggetti in ANSI-C. Un esempio – Set

Come si implementa un tipo di dato astratto? Come esempio consideriamo un set di elementi con le operazioni di add, find, e drop*. Si applicano tutte ad un set ed ad un elemento del set e restituiscono, rispettivamente, l'elemento aggiunto, trovato od eliminato dal set.

La funzione find può essere utilizzata per implementare una condizione contains (contiene) che indica se un elemento è già contenuto in un set.

Da questo punto di vista, il set è un tipo di dato astratto. Per dichiarare ciò che possiamo fare con un set, possiamo scrivere il file header set.h

ansi_c_set_h

Le istruzioni per il preprocessore protegge le dichiarazioni: nessun problema con il numero di volte che includiamo il file set.h, il compilatore C vedrà una sola dichiarazione. Questa tecnica di protezione dei file header è talmente standard che il preprocessore C GNU lo riconosce e non effettua accessi a tale file (set.h) quando è definito il suo simbolo di protezione.

Il file set.h è completo, ma è utile? Non possiamo saperlo, quello che possiamo assumere per ipotesi è che Set dovrà in qualche modo rappresentare il fatto che siamo lavorando con i set; add() prende un elemento, lo aggiunge al set e restituisce ciò che è stato appena aggiunga o che è già presente nel set; find() cerca un elemento nel set e ne indica la sua presenza o meno (in questo caso restituisce un puntatore a null); drop() trova un elemento, lo rimuove dal set e restituisce ciò che è stato rimosso; contains() converte il risultato di find() in un valore vero o falso.

E' da notare che il puntatore generico void * viene usato largamente. Da una parte il generico puntatore permette di scoprire a che cosa il set corrisponde, ma d'altro canto permette di passare virtualmente qualsiasi cosa alla funzione add() e alle altre funzioni. Non tutto si comporterà come un set o come un elemento - stiamo sacrificando la sicurezza del tipo a favore dell'information hiding. Ad ogni modo, vedremo nel capitolo 8 che questo approccio può essere reso "sicuro".

*sfortunatamente, in C ANSI remove è una funzione di libreria che esegue l'eliminazione di un file. Se usassimo questo nome per una funzione non potremmo includere il file stdio.h

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend