Функция- оболочка - это подпрограмма (другое слово для обозначения функции ) в программной библиотеке или компьютерной программе , основная цель которой - вызвать вторую подпрограмму [1] или системный вызов с небольшими дополнительными вычислениями или без них. Функции оболочки используются для упрощения написания компьютерных программ за счет абстрагирования деталей базовой реализации подпрограммы.
Цель
Функции-оболочки - это средства делегирования, которые можно использовать для различных целей.
Удобство программирования
Функции оболочки можно использовать для облегчения написания компьютерных программ. Примером этого является MouseAdapter
и подобные классы в библиотеке Java AWT . [2] Функции оболочки полезны при разработке приложений, использующих функции сторонних библиотек. Для каждой сторонней функции можно написать оболочку и использовать ее в собственном приложении. В случае изменения или обновления сторонних функций необходимо изменить только оболочки в собственном приложении, в отличие от изменения всех экземпляров сторонних функций в собственном приложении.
Адаптация интерфейсов класса / объекта
Функции оболочки можно использовать для адаптации существующего класса или объекта к другому интерфейсу. Это особенно полезно при использовании существующего библиотечного кода.
Тестирование кода
Функции-оболочки могут использоваться для написания подпрограмм проверки ошибок для уже существующих системных функций без увеличения длины кода на большую величину путем повторения одной и той же проверки ошибок для каждого вызова функции. [3] Все вызовы исходной функции можно заменить вызовами оболочки, позволяя программисту забыть о проверке ошибок после того, как оболочка написана. Тестовый драйвер - это своего рода функция-оболочка, которая проверяет модуль кода, обычно вызывая его многократно, с различными настройками или параметрами, чтобы строго следовать каждому возможному пути. Это не доставляемый код, но и не выбрасываемый код, который обычно сохраняется для использования в регрессионном тестировании . Адаптер интерфейса - это своего рода функция-оболочка, которая упрощает, адаптирует или расширяет интерфейс модуля кода с целью сделать его более понятным или актуальным для пользователя. Он может переименовывать параметры, комбинировать параметры, устанавливать значения по умолчанию для параметров и тому подобное.
Множественное наследование
В языке программирования , который не поддерживает множественное наследование базовых классов, для его моделирования можно использовать функции оболочки. Ниже приведен пример части класса Java, который «наследуется» от LinkedList и HashSet. См. « Метод» для получения дополнительных сведений о реализации.
открытый класс Test реализует LinkedList , HashSet {@Override // содержит элементы данных и методы данных // ковариантный возврат}
Библиотечные функции и системные вызовы
Многие библиотечные функции, такие , как в стандартной библиотеке C , выступают в качестве интерфейсов для абстракции от системных вызовов . Функции fork и execve в glibc являются примерами этого. Они вызывают системные вызовы fork и execve нижнего уровня соответственно.
Это может привести к неправильному использованию терминов «системный вызов» и «системный вызов» для ссылки на вызовы библиотеки более высокого уровня, а не на системные вызовы с аналогичными именами, которые они заключают в оболочку. [4] [5]
Смотрите также
Рекомендации
- ^ Реселман, Боб; Писли, Ричард; Пручняк, Уэйн (1998). Использование Visual Basic 6 . Que. п. 446. ISBN. 9780789716330.
- ^ Учебники по Java
- ^ Стивенс, Ричард; Феннер, Билл; Рудофф; Эндрю М. (2003). Сетевое программирование UNIX . Эддисон-Уэсли. С. 5–6, 29. ISBN 9780131411555.
- ^ "syscalls (2) - справочная страница Linux" . man7.org . Проверено 25 апреля 2020 .
- ^ «Системные вызовы (библиотека GNU C)» . www.gnu.org . Проверено 25 апреля 2020 .