Qu'est-ce que pimpla ?
Pimpla
Le patron de conception Pimpl (Pointer to Implementation) est une technique de programmation C++ utilisée pour masquer les détails d'implémentation d'une classe. Il permet de :
- Réduire la dépendance du code client vis-à-vis de l'implémentation interne d'une classe. Ceci signifie que les modifications de l'implémentation (ajout/suppression de variables membres, modification des types, etc.) ne nécessitent pas de recompilation du code client.
- Fournir un firewall binaire. Ceci est particulièrement important pour les bibliothèques partagées (DLL sous Windows, shared objects sous Linux). En cachant l'implémentation, on s'assure que les clients n'auront pas de problèmes de compatibilité binaire lors des mises à jour de la bibliothèque.
- Réduire le temps de compilation. En séparant l'interface de l'implémentation, on peut réduire le nombre de fichiers à recompiler en cas de modification de l'implémentation.
Comment ça marche :
Une classe publique (l'interface) contient un pointeur vers une classe privée (l'implémentation), généralement nommée Impl
. Toute l'implémentation réelle de la classe est déplacée vers cette classe privée. L'interface se contente de déléguer les appels de fonctions à l'implémentation via ce pointeur.
Points clés :
- Interface Publique : Définition des méthodes publiques de la classe. Les clients interagissent uniquement avec cette interface.
- Classe d'Implémentation Privée : Contient les données membres et l'implémentation concrète des méthodes. Elle est totalement masquée aux clients.
- Pointeur vers l'Implémentation : Un membre de l'interface publique qui pointe vers une instance de la classe d'implémentation privée. Ce pointeur est généralement géré via des techniques comme les pointeurs intelligents (unique_ptr, shared_ptr) pour garantir la gestion automatique de la mémoire.
Avantages:
- Couplage lâche : Réduit les dépendances entre le code client et l'implémentation.
- Encapsulation améliorée : Masque les détails d'implémentation.
- Temps de compilation réduits : Modification de l'implémentation n'entraîne pas de recompilation des clients.
- Compatibilité binaire : Facilite la maintenance des bibliothèques.
Inconvénients:
- Surcharge de performance légère : L'appel de fonctions via un pointeur ajoute une petite surcharge.
- Complexité accrue du code : Ajoute une couche d'abstraction supplémentaire, ce qui peut rendre le code plus difficile à comprendre et à déboguer.
Concepts importants liés à Pimpl:
Catégories