Библиотека-обертка

Библиотека программного обеспечения для программирования

Библиотеки-обертки (или библиотеки-обертки ) состоят из тонкого слоя кода (« прокладки »), который переводит существующий интерфейс библиотеки в совместимый интерфейс. Это делается по нескольким причинам:

  • Для улучшения плохо спроектированного или сложного интерфейса
  • Разрешить совместную работу кода, который в противном случае не может работать (например, несовместимые форматы данных)
  • Обеспечить кросс-языковую и/или динамическую совместимость

Библиотеки-обертки могут быть реализованы с использованием шаблонов проектирования адаптера , фасада и, в меньшей степени, прокси- шаблонов .

Структура и реализация

Конкретный способ реализации библиотеки-обертки очень специфичен для среды, в которой она пишется, и сценариев, которые она должна решать. Это особенно верно в случае, когда рассматривается кросс-языковая/средовая совместимость.

Пример

Ниже представлена ​​общая иллюстрация реализации библиотеки-обертки. В этом примере интерфейс C++ действует как «обертка» вокруг интерфейса C.

Интерфейс С

int pthread_mutex_init ( pthread_mutex_t * мьютекс , pthread_mutexattr_t * атрибут ); int pthread_mutex_destroy ( pthread_mutex_t * мьютекс ) ; int pthread_mutex_lock ( pthread_mutex_t * мьютекс ); int pthread_mutex_unlock ( pthread_mutex_t * мьютекс );                     

C++-оболочка

класс Мьютекс { pthread_mutex_t мьютекс ;   public : Mutex () { pthread_mutex_init ( & mutex , 0 ); }       ~ Мьютекс () { pthread_mutex_destroy ( & мьютекс ); }   частный : класс друга Lock ;    void lock () { pthread_mutex_lock ( & ​​мьютекс ); }     void unlock () { pthread_mutex_unlock ( & mutex ); } };    класс Lock { частный : Мьютекс & мьютекс ;   public : Lock ( Mutex & mutex ) : mutex { mutex } { mutex . lock (); }       ~ Блокировка () { мьютекс . разблокировка (); } };   

Исходный интерфейс C можно считать подверженным ошибкам, особенно в случае, когда пользователи библиотеки забывают разблокировать уже заблокированный мьютекс. Новый интерфейс эффективно использует получение ресурсов и инициализацию (RAII) в новых классах Mutex и Lock , чтобы гарантировать, что Mutex в конечном итоге будут разблокированы, а объекты pthread_mutex_t будут автоматически освобождены.

Приведенный выше код точно имитирует реализацию boost::scoped_lock и boost::mutex , которые являются частью библиотеки boost::thread.

Драйверные оболочки

Межъязыковая/межоперационная совместимость

Некоторые библиотеки-обертки существуют для того, чтобы выступать в качестве моста между клиентским приложением и библиотекой, написанной с использованием несовместимой технологии. Например, приложению Java может потребоваться выполнить системный вызов . Однако системные вызовы обычно представляются как функции библиотеки C. Для решения этой проблемы Java реализует библиотеки-обертки, которые делают эти системные вызовы доступными для вызова из приложения Java.

Чтобы достичь этого, такие языки, как Java, предоставляют механизм, называемый интерфейсом внешней функции , который делает это возможным. Вот некоторые примеры таких механизмов:

Существующие библиотеки-оболочки

Некоторые примеры существующих библиотек-оболочек:

  • Pthreads для WIN32
  • Привязки OpenGL для Python
  • MySQL++
  • JavaCV
  • ВиноD3D

Смотрите также

Получено с "https://en.wikipedia.org/w/index.php?title=Wrapper_library&oldid=1233824614"