Gdzie i jak jest używany termin WRAPPER w programowaniu, w czym pomaga?


87

Spotykam programistów używających terminu tworzenie Wrapperów innych klas lub API lub nawet niektórych kodów, jest to termin używany przez doświadczonych programistów

Więc jakikolwiek pomysł, co przez to rozumieją;

np. proste pytanie; mamy dwa rodzaje technik sortowania tablic, stwórzmy dla niego opakowanie

Powyższy jest bardzo prostym przykładem

Odpowiedzi:


137

Termin „opakowanie” jest często używany. Zwykle jest używany do opisania klasy, która zawiera instancję innej klasy, ale która nie ujawnia bezpośrednio tej instancji. Głównym celem opakowania jest zapewnienie „innego” sposobu użycia opakowanego obiektu (być może opakowanie zapewnia prostszy interfejs lub dodaje pewną funkcjonalność).

Słowa „opakowanie” można również używać przy opisywaniu klasycznych wzorców projektowych.

Zawijanie obiektu w celu zapewnienia uproszczonego interfejsu jest często opisywane jako wzorzec „Fasada”. Owijka to fasada.

Czasami możesz mieć klasę, która pasowałaby do określonego interfejsu, ale nie możesz zmienić jej kodu, aby był zgodny z tym interfejsem. Możesz utworzyć opakowanie dla tej klasy, która implementuje interfejs, ale kieruje większość wywołań do opakowanego obiektu. To jest wzór „adaptera”. Owijka to adapter.

Przykład, który opisujesz, w którym masz dwie klasy, które mogą sortować tablice przy użyciu różnych algorytmów, brzmi jak wzorzec „Strategia”, w którym podajesz sposób wykonania operacji na jakimś obiekcie, ale algorytm użyty do tej operacji może się różnić w zależności od na strukturę tego obiektu.

Na przykład jeden z twoich algorytmów sortowania może być świetny dla tablic o długości mniejszej niż 100, ale wtedy wydajność może być dla niego problemem. Drugi algorytm może być dobry dla większych tablic. Możesz utworzyć „opakowanie” dla dwóch algorytmów, które obsługują operację sortowania, ale decydują, którego algorytmu użyć na podstawie długości tablicy.

Zdecydowana większość opakowań istnieje, aby ukryć jakąś złożoność.


5
och,
rozumiem

W Pythonie jest pakiet xdress github.com/xdress/xdress . Mówi, że jest to generator pakujący. Co to w tym kontekście oznacza? Czy tworzy plik wykonywalny w C (który rzeczywiście zapewniłby

79

Proste wyjaśnienie przez analogię: co to jest opakowanie?

Kod nie służy do wyjaśnienia.

Przykład 1: Ipad „otula” iPhone'a

Co robi iPad, czego nie robi iPhone?

Czy nie są w zasadzie tym samym, z wyjątkiem tego, że jeden ma większy ekran?

IPad „otula” iPhone'a: ​​co oznacza, że ​​masz wszystkie zalety iPhone'a WEWNĄTRZ iPada ORAZ większy ekran itp. Jednak zasadniczo wewnątrz iPada znajduje się iPhone.

Co zatem jest innego? Jedyną różnicą jest wygląd zewnętrzny: masz większy ekran i być może nie możesz wykonywać połączeń telefonicznych na iPadzie.

Ipad to jedyna rzecz wewnątrz iPada.  Ipad dosłownie otula iPhone'a.  Tyle, że nie możesz wykonywać połączeń za pomocą iPada, ponieważ możliwość wykonywania połączeń telefonicznych nie została „ujawniona”.  Apple chce, abyś kupował x2 produkty, a nie tylko jeden: P

Dosłownie to samo dotyczy „przedmiotów”.

............. wnętrze ma wszystkie dobre rzeczy, które są takie same, ale inne elementy zewnętrzne. Inne opakowanie.

„Opakowania mogą uwidaczniać inne cechy niż podstawowy obiekt” ...... dobrze, ale co to oznacza?

Czasami opakowanie może ograniczać rzeczy, do których masz dostęp. Na przykład iPad może ograniczać możliwość wykonywania połączeń telefonicznych, mimo że ukryty w nim telefon ma taką możliwość.

Przykład 2: Automatyczny samochód pełniący funkcję opakowania do samochodu ręcznego

Pomyśl o samochodzie automatycznym i samochodzie ręcznym. Za kulisami, w samochodzie automatycznym, jest jakiś mechanizm inżynieryjny, który automatycznie zmienia biegi za Ciebie, ale zasadniczo pod powierzchnią samochód nadal jest samochodem ręcznym. Innymi słowy, automatyczne funkcje samochodu „obejmują” ręczną funkcjonalność samochodu. Jeśli chciałeś samodzielnie samodzielnie zmieniać biegi w automatycznym samochodzie - po prostu nie możesz tego zrobić. Możliwość zmiany biegów „nie jest eksponowana” w automatycznym samochodzie. Ale jest odsłonięty w ręcznym samochodzie. To prawda, że ​​analogia jest trochę napięta, ale mam nadzieję, że wiesz, do czego zmierzam.

Ale jaki jest cel opakowania?

Jeśli chcesz uprościć sprawę, napiszesz zajęcia z zawijania. Utworzyłbyś łatwy w użyciu „wrapper” i pozostawił wszystkie skomplikowane elementy wewnątrz opakowania, upewniając się, że te skomplikowane bity nie są „odsłonięte”.

Na przykład możesz mieć opakowanie .net, które pod spodem wykonuje wywołania COM. Gdybyś nie miał opakowania, byłbyś zmuszony do samodzielnego wykonania tych wywołań COM. Na szczęście z opakowaniem wystarczy wykonać wywołania kodu opakowującego .net - co z kolei spowoduje wywołanie COM. Miejmy nadzieję, że to powinno uprościć sprawę.


8
Lubię takie wyjaśnienia, kiedy wyjaśniam żargony techniczne. Czy znasz jakieś witryny, które konkretnie to robią? Dzięki.
viggy28

3
to ma taki sens.
L. Dai

11

Po prostu piszesz jakiś łatwy w użyciu kod, aby ukryć złożoność kodu pod spodem. Jest to szczególnie przydatne, gdy musisz wywołać jakiś niskopoziomowy interfejs API z języka wyższego poziomu i chcesz ukryć cały „brzydki” kod.

Edycja: więcej informacji na ten temat można znaleźć w tych dwóch artykułach wiki: biblioteka i funkcja


4

Wrapper to kod, który jest tworzony w celu wewnętrznego wywołania jakiegoś API bez zmiany rzeczywistego API.

Przykładem tego jest wydanie Facebooka ich zestawu SDK C # dla Facebooka . SDK jest w rzeczywistości opakowaniem, ponieważ pozwala tylko wywołać jego podstawową platformę bez podawania konkretnych metod i klas. Z drugiej strony, Facebook Developer Toolkit to jego pełne API.


Muszę napisać program C #, który tworzy plik skryptu (język skryptów jest specyficzny dla urządzenia sprzętowego i nazywa się CoraScript). W CoraScript jest około 50 poleceń, np. Takie, które łączy się z urządzeniem, takie, które wysyła pliki do tego urządzenia, nakazuje mu wykonanie aplikacji w pamięci Flash itd. Zamiast ręcznie kodować CoraScript, lubię tworzyć bibliotekę C #, która wygeneruje taki skrypt. Czy ta biblioteka C # byłaby nazywana wrapper libraryjęzykiem skryptowym CoraScript?
Minh Tran

Interpreter wiersza poleceń dla tego języka skryptowego to aplikacja konsolowa. Gdy ta aplikacja działa, pobiera polecenia CoraScript, wykonuje je i zwraca dane wyjściowe polecenia (np. Connect localhostPolecenie CoraScript zwróci ciąg znaków +connect,"coralib3.dll version 1,8,11"wskazujący, że polecenie zostało wykonane pomyślnie).
Minh Tran

2

Istnieje wiele przykładów „opakowań”, a termin ten jest czasami używany zamiennie. Oto kilka przykładów, które przychodzą na myśl:

DLL Wrapper

W przeszłości utworzyłem opakowanie COM wokół biblioteki DLL .NET w celu wykorzystania zaawansowanych funkcji .NET w starszych aplikacjach, które rozumieją COM, ale nie rozumieją .NET.

Object Wrapper (Java)

W języku Java w java.langpakiecie znajduje się klasa udostępniająca metody obiektów dla ośmiu typów pierwotnych. Wszystkie prymitywne klasy opakowania w Javie są niezmienne. Dlatego Wrapperklasy są używane do reprezentowania wartości pierwotnych, gdy Objectjest wymagany.


1

Funkcja opakowująca, funkcja, której głównym celem jest wywołanie drugiej funkcji


-1

Powiedzmy, że chcesz dodać więcej funkcji do swojego kodu, ale nie możesz go zmienić. W tym pomaga opakowanie. Możesz użyć opakowania, aby uzyskać dane wyjściowe bez zmiany oryginalnego kodu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.