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

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

Обго́ртка бібліоте́ки (англ. 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.

Відомі обгортки бібліотек[ред. | ред. код]

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

Див. також[ред. | ред. код]