Функция -обертка — это функция (другое название подпрограммы ) в библиотеке программного обеспечения или компьютерной программе , основной целью которой является вызов второй подпрограммы [1] или системного вызова с небольшими или нулевыми дополнительными вычислениями. Функции-обертки упрощают написание компьютерных программ, абстрагируя детали реализации подпрограммы.
Функции-обертки являются средством делегирования и могут использоваться для различных целей.
Функции-обертки упрощают написание компьютерных программ. Например, MouseAdapter
и подобные классы в библиотеке Java AWT демонстрируют это. [2]
Они полезны при разработке приложений, использующих функции сторонних библиотек. Обертка может быть написана для каждой из сторонних функций и использована в собственном приложении. В случае изменения или обновления сторонних функций необходимо изменить только оболочки в собственном приложении, а не все экземпляры сторонних функций в собственном приложении.
Функции-обертки можно использовать для адаптации существующего класса или объекта к другому интерфейсу. Это особенно полезно при использовании существующего библиотечного кода.
Функции-обертки можно использовать для написания процедур проверки ошибок для уже существующих системных функций без значительного увеличения длины кода путем повторения той же проверки ошибок для каждого вызова функции. [3] Все вызовы исходной функции можно заменить вызовами обертки, что позволяет программисту забыть о проверке ошибок после написания обертки. Тестовый драйвер — это своего рода функция-обертка, которая проверяет модуль кода, обычно вызывая его повторно с разными настройками или параметрами, чтобы строго следовать каждому возможному пути. Это не поставляемый код, но это и не одноразовый код, который обычно сохраняется для использования в регрессионном тестировании . Адаптер интерфейса — это своего рода функция-обертка, которая упрощает, адаптирует или расширяет интерфейс к модулю кода с целью сделать его более понятным или релевантным для пользователя. Он может переименовывать параметры, объединять параметры, устанавливать значения по умолчанию для параметров и тому подобное.
В языке программирования , который не поддерживает множественное наследование базовых классов, можно использовать функции-обертки для его имитации. Ниже приведен пример части класса Java , которая «наследует» от LinkedList и HashSet. См. метод для получения дополнительных сведений о реализации.
открытый класс Test реализует LinkedList , HashSet { @Override // содержит элементы данных и методы данных // ковариантный возврат }
Многие библиотечные функции, например, в стандартной библиотеке C , действуют как интерфейсы для абстракции системных вызовов . Примерами этого являются функции fork и execve в glibc . Они вызывают системные вызовы fork и execve нижнего уровня соответственно.
Это может привести к неправильному использованию терминов «системный вызов» и «syscall» для обозначения библиотечных вызовов более высокого уровня, а не системных вызовов с аналогичными названиями, которые они оборачивают. [4] [5]
Вспомогательная функция — это функция, которая группирует части вычислений , назначая им описательные имена и позволяя повторно использовать вычисления. [6] Хотя не все обертки являются вспомогательными функциями, все вспомогательные функции являются обертками, и заметное использование вспомогательных функций — группировка часто используемых операций — происходит в динамической двоичной трансляции , в которой вспомогательные функции определенной архитектуры используются для трансляции инструкций из одного набора инструкций в другой. [7]