Il concetto di puntatori opachi
Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 17 di 61.
Finora, quando definiamo una struct in un file header, chiunque includa quell'header può vedere e accedere direttamente a tutti i suoi membri. Questo compromette l'incapsulamento: il principio di nascondere i dettagli interni al codice esterno.
C offre una tecnica potente chiamata puntatori opachi per risolvere questo problema. L'idea è semplice: dichiarare che una struct esiste nell'header, senza rivelare cosa contiene. Questo si fa usando un tipo incompleto:
// wallet.h
typedef struct Wallet Wallet; // Declaration only - no body!
Wallet *create_wallet(int initial_balance);
void free_wallet(Wallet *w);
Nota che non ci sono parentesi graffe. Non definiamo mai cosa contiene Wallet. Il compilatore sa che il tipo esiste, ma non ne conosce le dimensioni né i membri. Ciò significa che il codice che include questo header può lavorare solo con puntatori a Wallet, mai direttamente con la struct stessa.
Perché è importante? Poiché la definizione effettiva della struct è nascosta nel file .c, il codice che usa il tuo header non può scrivere w->balance né sizeof(Wallet). Deve usare le funzioni che fornisci. Controlli tu ogni accesso ai dati e puoi modificare la struttura interna in seguito senza interrompere il funzionamento del codice che dipende dal tuo header.
Nella prossima lezione, ti eserciterai a definire il corpo effettivo della struct all'interno del file sorgente, completando il pattern del puntatore opaco.
Provalo tu
Questa lezione non include una sfida di codice.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Basi di programmazione modulare
File di intestazioneGuardie di inclusioneFile sorgenteFunzioni staticheRipasso: calcolatrice modulare4Incapsulamento
Il concetto di puntatori opachiDefinire struct opacheGetter e setterLa convalida nei setterRiepilogo: scatola segreta2Oggetti e metodi
Le struct come oggettiIl puntatore 'Self'Correttezza constPuntatore o valoreMetodi di supportoRiepilogo: gestore di punti5Progetto: Conto bancario semplice
Configurazione del progettoImplementazione del conto8Polimorfismo
Puntatori a funzione nelle structSimulare i metodiIl concetto di interfacciaImplementare le interfacceIterazione polimorficaRiepilogo: Greeter11Pattern di progettazione in C
Pattern SingletonPattern FactoryPattern IteratorRiepilogo: Factory di Logger3Ciclo di vita degli oggetti
Pattern del costruttorePattern del distruttoreInizializzazione sullo stackCopia profondaRiepilogo: wrapper di stringhe6Ereditarietà tramite composizione
Incorporamento delle structLa regola del primo membroAccesso ai membri della classe baseUpcastingRiepilogo: gerarchia di forme9Progetto: Disegnatore di forme
Panoramica del progettoImplementazione del cerchioImplementazione del rettangoloUtilizzo polimorficoContenitore di formeEsercitati da solo: Compilatore C online