Обгортка бібліотеки

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Обго́ртка бібліоте́ки (англ. 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, замість окремих бібліотек-обгорток використовується окремий механізм — інтерфейс до зовнішніх функцій.

Деякі приклади реалізації такого механізму:

Відомі обгортки бібліотек

[ред. | ред. код]

Кілька прикладів відомих обгорток бібліотек

Див. також

[ред. | ред. код]