Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

Структура и реализация [ править ]

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

Пример [ править ]

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

Интерфейс C [ править ]

int  pthread_mutex_init ( pthread_mutex_t  *  mutex  ,  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 ++ [ править ]

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

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

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

Оболочки драйверов [ править ]

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

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

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

Существующие библиотеки оболочки [ править ]

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

См. Также [ править ]