Обгортка бібліотеки
Обго́ртка бібліоте́ки (англ. wrapper) — є проміжним шаром між прикладною програмою та іншою бібліотекою або інтерфейсом програмування додатку (API).
Метою написання обгортки бібліотеки може бути забезпечення нормальної роботи бібліотеки (API) в якій-небудь (найчастіше скриптовій) мові, в якій прямий виклик функцій цієї бібліотеки API ускладнений або неможливий. Іншою метою може бути забезпечення додаткової зручності для прикладного програміста — адаптація бібліотек до об'єктно-орієнтованого стилю програмування, компенсація незручного дизайну бібліотеки та ін. Існують також крос-платформові обгортки бібліотек, які приховують реалізацію для різних операційних систем, наприклад WxWidgets.
Приклад
Приклад показує загальну реалізацію бібліотеки-обгортки. Тут інтерфейс C++ діє як "обгортка" навколо інтерфейсу на мові C.
C-інтерфейс
int pthread_mutex_init(pthread_mutex_t * mutex , pthread_mutexattr_t * attr);
int pthread_mutex_destroy (pthread_mutex_t * mutex);
int pthread_mutex_lock (pthread_mutex_t * mutex );
int pthread_mutex_unlock (pthread_mutex_t * mutex );
C++-обгортка
class Mutex
{
pthread_mutex_t mutex;
public:
Mutex()
{
pthread_mutex_init(&mutex, 0);
}
~Mutex()
{
pthread_mutex_destroy(&mutex);
}
private:
friend class Lock;
void lock()
{
pthread_mutex_lock(&mutex);
}
void unlock()
{
pthread_mutex_unlock(&mutex);
}
};
class Lock
{
Mutex& mutex;
public:
Lock(Mutex& mutex):mutex(mutex){mutex.lock();}
~Lock(){mutex.unlock();}
};
Початковий C-інтерфейс можна розглядати як недостатньо надійний, зокрема може статися так, що користувачі бібліотеки забудуть розблокувати заблокований мютекс. Новий інтерфейс, використовує RAII в нових класах Mutex і Lock для забезпечення автоматичного розблокування Mutex і, відповідно, об'єкта pthread_mutex_t.
Зв'язність між несумісними мовами, середовищами виконання
Деякі бібліотеки-обгортки працюють як міст між клієнтською програмою та бібліотекою, яка використовує іншу, несумісну технологію із основною програмою. Наприклад, Java програми працюють в віртуальній машині й не можуть напряму викликати системні функції ОС, які реалізовані на C. В таких мовах програмування, як Java, замість окремих бібліотек-обгорток використовується окремий механізм — інтерфейс до зовнішніх функцій.
Деякі приклади реалізації такого механізму:
- Java Native Interface
- Java Native Access
- SWIG
Відомі обгортки бібліотек
Кілька прикладів відомих обгорток бібліотек