Функция-обертка
Функция -обертка — это функция (другое слово для обозначения подпрограммы ) в библиотеке программного обеспечения или компьютерной программе , основной целью которой является вызов второй подпрограммы. [1] или системный вызов с небольшими дополнительными вычислениями или без них. Функции-оболочки упрощают написание компьютерных программ, абстрагируя детали реализации подпрограммы.
Цель
[ редактировать ]Функции-оболочки являются средством делегирования и могут использоваться для ряда целей.
Удобство программирования
[ редактировать ]Функции-оболочки упрощают написание компьютерных программ. Например, MouseAdapter
и подобные классы в библиотеке Java AWT демонстрируют это. [2]
Они полезны при разработке приложений, использующих функции сторонних библиотек. Для каждой сторонней функции можно написать оболочку и использовать ее в собственном приложении. В случае изменения или обновления сторонних функций необходимо изменить только оболочки в собственном приложении, а не изменять все экземпляры сторонних функций в собственном приложении.
Адаптация интерфейсов классов/объектов
[ редактировать ]Функции-оболочки можно использовать для адаптации существующего класса или объекта к другому интерфейсу. Это особенно полезно при использовании существующего кода библиотеки.
Тестирование кода
[ редактировать ]Функции-оболочки можно использовать для написания процедур проверки ошибок для уже существующих системных функций без значительного увеличения длины кода путем повторения одной и той же проверки ошибок для каждого вызова функции. [3] Все вызовы исходной функции можно заменить вызовами оболочки, что позволяет программисту забыть о проверке ошибок после написания оболочки. Тестовый драйвер — это своего рода функция-оболочка, которая проверяет модуль кода, обычно вызывая его неоднократно, с разными настройками или параметрами, чтобы строго следовать каждому возможному пути. Это не доставляемый код, но и не одноразовый код, который обычно сохраняется для использования в регрессионном тестировании . Адаптер интерфейса — это своего рода функция-оболочка, которая упрощает, адаптирует или расширяет интерфейс модуля кода с целью сделать его более понятным или релевантным для пользователя. Он может переименовывать параметры, объединять параметры, устанавливать для параметров значения по умолчанию и т.п.
Множественное наследование
[ редактировать ]В языке программирования , который не поддерживает множественное наследование базовых классов, для его имитации можно использовать функции-оболочки. Ниже приведен пример части класса Java , который «наследует» от LinkedList и HashSet. см. в разделе «Метод» Дополнительные сведения о реализации .
public class Test implements LinkedList, HashSet{
@Override
//contains data members and data methods
//covariant return
}
Библиотечные функции и системные вызовы
[ редактировать ]Многие библиотечные функции, например, в стандартной библиотеке C , действуют как интерфейсы для абстракции системных вызовов . функции fork и execve в glibc Примерами этого являются . Они вызывают нижнего уровня системные вызовы fork и execve соответственно.
Это может привести к неправильному использованию терминов «системный вызов» и «системный вызов» для обозначения вызовов библиотеки более высокого уровня, а не системных вызовов с аналогичными названиями, которые они оборачивают. [4] [5]
Вспомогательная функция
[ редактировать ]Вспомогательная функция — это функция, которая группирует части вычислений , присваивая описательные имена и позволяя повторно использовать вычисления. [6] Хотя не все оболочки являются вспомогательными функциями, все вспомогательные функции являются оболочками, и заметное использование вспомогательных функций — группирование часто используемых операций — происходит в динамической двоичной трансляции , в которой вспомогательные функции определенной архитектуры используются для трансляции инструкций из одной инструкции. установить в другой. [7]
См. также
[ редактировать ]- Библиотека-оболочка
- Оболочка драйвера
- Шаблон адаптера
- Шаблон декоратора
- Делегирование (программирование)
- Пересылка (объектно-ориентированное программирование)
- Оболочка привязки языка к другому языку
- SWIG Автоматический генератор оберток
- Вложенная функция
- Частичное применение
Ссылки
[ редактировать ]- ^ Реселман, Боб; Писли, Ричард; Прухняк, Уэйн (1998). Использование Visual Basic 6 . Que. п. 446. ИСБН 9780789716330 .
- ^ Учебники по Java
- ^ Стивенс, Ричард; Феннер, Билл; Рудофф; Эндрю М. (2003). Сетевое программирование UNIX . Аддисон-Уэсли. стр. 5–6, 29. ISBN. 9780131411555 .
- ^ «syscalls(2) — страница руководства Linux» . man7.org . Проверено 25 апреля 2020 г.
- ^ «Системные вызовы (Библиотека GNU C)» . www.gnu.org . Проверено 25 апреля 2020 г.
- ^ Фислер, Кэти (2005). «CS 1101: Вспомогательные функции» . Вустерский политехнический институт . Архивировано из оригинала 7 мая 2021 года . Проверено 17 ноября 2021 г.
- ^ Ван, Вэньвэнь (3 марта 2021 г.). Встраивание вспомогательной функции при динамической двоичной трансляции . CC: Создание компилятора. Нью-Йорк, США: Ассоциация вычислительной техники . п. 107. дои : 10.1145/3446804.3446851 . ISBN 978-1-4503-8325-7 .