Les bibliothèques d'encapsulation (ou wrappers de bibliothèques ) sont constituées d'une fine couche de code (un « shim ») qui traduit l'interface existante d' une bibliothèque en une interface compatible. Ceci est fait pour plusieurs raisons :
- Pour améliorer une interface mal conçue ou compliquée
- Permettre à du code de fonctionner ensemble alors qu'il ne le pourrait pas autrement (par exemple, des formats de données incompatibles).
- Activer l'interopérabilité entre les langages et/ou à l'exécution
Les bibliothèques wrapper peuvent être implémentées à l'aide des modèles de conception adaptateur , façade et, dans une moindre mesure, proxy .
l'interopérabilité entre langages et environnements d'exécution est un critère important.Exemple
L'exemple suivant illustre l'implémentation courante d'une bibliothèque d'encapsulation autour de l'en-tête <pthread.h> d'une bibliothèque C POSIX (pour les threads POSIX, ou « pthreads »). Dans cet exemple, une interface C++ sert d'encapsulation à une interface C.
Interface C
Dans <pthread.h> :l'acquisition de ressources lors de l'initialisation (RAII) dans les nouvelles Boost qui font partie de la bibliothèque Boost.Thread .
enveloppes de pilote
Pour ce faire, des langages comme Java proposent un mécanisme appelé interface de fonction étrangère qui rend cela possible. Voici quelques exemples de ce mécanisme :
- Interface native Java (JNI) et API de fonction et de mémoire étrangères Java
- Accès natif Java (JNA)
- Python )
- Extensions gérées
- SWIG (Générateur simplifié d'interface et de wrapper)
std::ffi( Rouiller )- Bibliothèque cxx (interopérabilité Rust-C++)
Bibliothèques wrapper existantes
Voici quelques exemples de bibliothèques wrapper existantes :
- Pthreads pour WIN32
- Liaisons OpenGL pour Python
- MySQL++
- JavaCV
- WineD3D