Concept des pointeurs opaques
Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 17 sur 61.
Jusqu’à présent, lorsque nous définissons un struct dans un fichier d’en-tête, toute personne qui inclut cet en-tête peut voir et accéder directement à tous ses membres. Cela rompt l’encapsulation : le principe qui consiste à masquer les détails internes au code externe.
C fournit une technique puissante appelée pointeurs opaques pour résoudre ce problème. L’idée est simple : déclarer qu’une structure existe dans l’en-tête, mais ne pas révéler ce qu’elle contient. Cela se fait à l’aide d’un type incomplet :
// wallet.h
typedef struct Wallet Wallet; // Déclaration uniquement - pas de corps !
Wallet *create_wallet(int initial_balance);
void free_wallet(Wallet *w);
Remarquez qu’il n’y a pas d’accolades. Nous ne définissons jamais ce que contient Wallet. Le compilateur sait que le type existe, mais pas quelle est sa taille ni quels sont ses membres. Cela signifie que le code qui inclut cet en-tête ne peut fonctionner qu’avec des pointeurs vers Wallet, jamais directement avec la structure elle-même.
Pourquoi est-ce important ? Comme la définition réelle de struct reste cachée dans le fichier .c, aucun code utilisant votre en-tête ne peut écrire w->balance ni utiliser sizeof(Wallet). Il doit utiliser les fonctions que vous fournissez. Vous contrôlez tout accès aux données et vous pouvez modifier ultérieurement la structure interne sans casser le code qui dépend de votre en-tête.
Dans la prochaine leçon, tu t’exerceras à définir le corps réel de la structure dans le fichier source, afin de compléter le modèle du pointeur opaque.
Essayez vous-même
Cette leçon ne comprend pas de défi de code.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Bases de la programmation modulaire
Fichiers d'en-têteGardes d'inclusionFichiers sourcesFonctions statiquesRécapitulatif : Calculatrice modulaire4Encapsulation
Concept des pointeurs opaquesDéfinir des structures opaquesGetters et settersValidation dans les settersRécapitulatif : La boîte secrète2Objets et méthodes
Structs comme objetsLe pointeur 'Self'Rigueur du mot-clé constPointeur vs ValeurMéthodes utilitairesRécapitulatif : Point Manager5Projet : Compte bancaire simple
Configuration du projetImplémentation du compte8Polymorphisme
Pointeurs de fonctions dans les structuresSimulation de méthodesLe concept d'interfaceImplémentation d'interfacesItération polymorphiqueRécapitulatif : Greeter11Patrons de conception en C
Patron SingletonPatron FabriquePatron ItérateurRécapitulatif : Logger Factory3Cycle de vie des objets
Pattern de constructeurPattern de destructeurInitialisation sur la pileCopie profondeRécapitulatif : String Wrapper6Héritage par composition
Imbrication de structLa règle du premier membreAccès aux membres parentsUpcastingRécapitulatif : Hiérarchie des formes9Projet : Dessinateur de formes
Aperçu du projetImplémentation du cercleImplémentation du rectangleUtilisation polymorpheConteneur de formesEntraînez-vous par vous-même : Compilateur C en ligne