Де і як використовується термін WRAPPER у програмуванні, що він допомагає робити?


87

Я стикаюся з розробниками програмного забезпечення, використовуючи термін створення Wrappers інших класів або API або навіть деяких кодів, це термін, який використовують досвідчені програмісти

Тож будь-яка ідея, що вони мають на увазі під нею;

наприклад, просте запитання; ми отримали два типи методів сортування масивів, дозволимо створити для нього обгортку

Наведений вище - дуже простий приклад

Відповіді:


137

Термін "обгортка" багато вживається. Як правило, він використовується для опису класу, який містить екземпляр іншого класу, але який безпосередньо не викриває цей екземпляр. Основна мета обгортки полягає у наданні "іншого" способу використання загорнутого об'єкта (можливо, обгортка забезпечує простіший інтерфейс або додає певну функціональність).

Слово «обгортка» також можна використовувати при описі класичних моделей дизайну.

Обгортання об’єкта для надання спрощеного інтерфейсу до нього часто описується як шаблон „Фасад”. Обгортка - це фасад.

Іноді у вас може бути клас, який підходить для певного інтерфейсу, але ви не можете змінити код для нього, щоб він відповідав цьому інтерфейсу. Ви можете створити обгортку для того класу, який реалізує інтерфейс, але який спрямовує більшість викликів до обгорнутого об'єкта. Це шаблон "Адаптер". Обгортка - це адаптер.

Описаний вами екземпляр, де у вас є два класи, які можуть виконувати сортування масивів з використанням різних алгоритмів, звучить як шаблон "Стратегія", де ви надаєте спосіб виконати операцію з деяким об’єктом, але алгоритм, який використовується для цієї операції, може бути різним залежно від на структуру цього об'єкта.

Наприклад, один із ваших алгоритмів сортування може бути чудовим для масивів довжиною менше 100, але тоді продуктивність може бути проблемою для нього. Інший алгоритм може підійти для більших масивів. Ви можете створити "обгортку" для двох алгоритмів, яка підтримує операцію сортування, але вирішує, який алгоритм використовувати на основі довжини масиву.

Переважна більшість обгортків існує, щоб приховати якусь складність.


5
о, зрозумів ... Дякую :) дуже детальна відповідь, вирішив там свої проблеми з обгорткою :)
Басіт Анвер

У python є пакет xdress github.com/xdress/xdress . Там сказано, що це генератор обгортки. Що в цьому контексті означає? Чи створює він виконуваний файл на C (який справді надав би "інший" (на C) спосіб використання загорнутого об'єкта (на Python), чи я

79

Просте пояснення за аналогією: Що таке обгортання?

Код не використовується для пояснення.

Приклад 1: Ipad "загортає" Iphone

Що робить ipad, а що iphone не робить?

Хіба в основному це не одне і те ж, хіба що у одного більший екран?

Ipad "обгортає" iphone: це означає, що ви маєте всі переваги iphone всередині самого ipad, а також переваги більшого екрану тощо. Але принципово, всередині ipad, лежить Iphone.

Що тоді відрізняється? Єдине, що відрізняється зовнішнім виглядом: у вас екран більший, і, можливо, ви не можете телефонувати на Ipad.

Iphone - це єдине, що знаходиться всередині Ipad.  Ipad буквально обгортає Iphone.  За винятком того, що ви не можете телефонувати за допомогою Ipad, оскільки можливість здійснення телефонних дзвінків не була "викрита".  Apple хоче, щоб ви купували продукти x2, а не лише один: P

Буквально те саме з "предметами".

............. всередині є все хороше, що є однаковим, але іншим зовнішнім виглядом. Інша обгортка.

"Обгортки можуть виявляти інші функції, ніж основний об'єкт" ...... добре, але що це означає?

Іноді обгортка може обмежувати те, до чого ви можете отримати доступ всередині. Наприклад, ipad може обмежити вашу можливість здійснювати телефонні дзвінки, навіть незважаючи на те, що Iphone, похований у ньому, має таку можливість.

Приклад 2: Автоматичний автомобіль, який діє як обгортка для ручного автомобіля

Подумайте про автоматичну та ручну машини. За лаштунками, в автоматичному автомобілі, є якийсь інженерний механізм, який автоматично перемикає передачі для вас, але принципово, під поверхнею, автомобіль все ще є ручним автомобілем. Іншими словами, автоматичні функції автомобіля «обгортають» ручну функціональність автомобіля. Якщо ви хотіли самостійно змінити передачі самостійно в автоматичному автомобілі - ви просто не можете цього зробити. Можливість перемикання передач "не піддається" в автоматичному автомобілі. Але це виставляється в ручному автомобілі. Зрозуміло, аналогія трохи напружена, але, сподіваюся, ви бачите, до чого я приходжу.

Але яке призначення обгортки?

Ви б написали клас упаковки, якщо хочете спростити речі. Ви створили б просту у використанні `` обгортку '', а всі складні біти залишили всередині обгортки, гарантуючи, що ці ускладнені біти не будуть `` оголеними ''.

Наприклад, у вас може бути обгортка .net, яка внизу робить виклики COM. Якщо у вас не було обгортки, тоді ви були б змушені самі робити ці дзвінки COM. На щастя, з обгорткою ви просто зробите виклики коду обтікання .net - що, в свою чергу, зробить ці виклики COM. І це, сподіваємось, має спростити для вас речі.


8
Мені подобаються ці своєрідні пояснення, коли я пояснюю технічні жаргони. Чи знаєте ви, що будь-які сайти спеціально це роблять? Дякую.
viggy28

3
це має стільки сенсу.
L. Dai

11

Просто ви пишете простий у використанні код, щоб приховати складність коду під ним. Це особливо корисно, коли вам потрібно зателефонувати до API низького рівня з мови більш високого рівня, і ви хочете приховати весь "потворний" код.

Редагувати: Ви можете дізнатись більше про це у цих двох статтях wiki: бібліотека та функція


4

Wrapper - це якийсь код, який створюється для внутрішнього виклику деякого API без зміни фактичного API.

Прикладом цього є випуск Facebook їх Facebook C # SDK . SDK насправді є обгорткою, оскільки дозволяє лише викликати базову платформу, не надаючи конкретних методів та класів. З іншого боку, Facebook Developer Toolkit - це його повний API.


Мені потрібно написати програму на C #, яка створює файл сценарію (мова сценаріїв специфічна для апаратного пристрою і називається CoraScript). У CoraScript є близько 50 команд, наприклад, одна, яка підключається до пристрою, та, яка надсилає файли на цей пристрій, каже йому виконати програму у своїй флеш-пам’яті тощо. Замість ручного кодування CoraScript я б хотіли б створити бібліотеку C #, яка генерує такий сценарій. Чи буде ця бібліотека C # називатися wrapper libraryмовою сценаріїв CoraScript?
Minh Tran

Інтерпретатор командного рядка для цієї мови сценаріїв є консольним додатком. Поки програма працює, вона приймає команди CoraScript, виконує їх і повертає вихідні дані цієї команди (наприклад, команда Connect localhostCoraScript повертає рядок, +connect,"coralib3.dll version 1,8,11"щоб вказати, що команда успішно виконана).
Minh Tran

2

Є багато прикладів «обгортки», і цей термін іноді використовується як взаємозамінний. Нижче наведено кілька прикладів, які спадають на думку:

Обгортка DLL

Раніше я створив обгортку COM навколо .NET DLL, щоб використовувати розширені функції .NET у старих програмах, які розуміють COM, але не розуміють .NET.

Обгортка об’єктів (Java)

У Java в java.langпакеті передбачений клас, який надає об'єктні методи для восьми примітивних типів. Усі примітивні класи обгортки в Java незмінні. Отже, Wrapperкласи використовуються для представлення примітивних значень, коли потрібне значення an Object.



-1

Скажімо, ви хочете додати ще кілька функціональних можливостей до свого коду, але ви не можете змінити код. Ось де обгортка допомагає. Ви можете використовувати обгортку, щоб отримати вихідні дані, не змінюючи вихідний код.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.