WikiDer > Библиотека обертки

Wrapper library

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

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

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

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

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

пример

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

C интерфейс

int pthread_mutex_init(pthread_mutex_t * мьютекс , pthread_mutexattr_t * attr);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 мьютекс;общественный:     Мьютекс()      {          pthread_mutex_init(&мьютекс, 0);     }     ~Мьютекс()     {          pthread_mutex_destroy(&мьютекс);     }частный:     друг класс Замок;     пустота замок()     {          pthread_mutex_lock(&мьютекс);     }     пустота разблокировать()     {          pthread_mutex_unlock(&мьютекс);     }};класс Замок{частный:      Мьютекс &мьютекс;общественный:      Замок(Мьютекс &мьютекс): мьютекс{мьютекс}      {            мьютекс.замок();      }      ~Замок()      {            мьютекс.разблокировать();      }};

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

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

Обертки драйверов

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

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

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

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

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

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