Co to jest klasa owijania?

Co to jest klasa wrapper?
W jaki sposób takie zajęcia są przydatne?

Author: Patrick McDonald, 2009-05-20

17 answers

Ogólnie Klasa wrapper to każda klasa ,która "wraps" lub "enkapsuluje" funkcjonalność innej klasy lub komponentu. Są one użyteczne przez zapewnienie poziomu abstrakcji z implementacji bazowej klasy lub komponentu; na przykład, klasy wrapper, które zawijają komponenty COM mogą zarządzać procesem wywoływania komponentu COM bez zawracania mu głowy kodem wywołującym. Mogą również uprościć korzystanie z podstawowego obiektu, zmniejszając liczbę punktów interfejsu często sprawia to, że korzystanie z podstawowych komponentów jest bezpieczniejsze.

 156
Author: Paul Sonier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-20 17:19:59

Jak to brzmi: klasa, która "zawija" funkcjonalność innej klasy lub API w prostsze lub po prostu inne API.

Zobacz: Wzór adaptera, Wzór elewacji

 64
Author: Shog9,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-20 17:18:10

Klasy wrappera zapewniają sposób używania prymitywnych typów jako obiektów. Dla każdego prymitywu mamy klasę wrappera, taką jak,

int Integer
byte Byte 

Integer i Byte są klasami owijania prymitywnych int i byte. Istnieją czasy / ograniczenia, kiedy trzeba używać primitives jako obiektów, więc klasy wrapper zapewniają mechanizm zwany Boks / unboxing.

Pojęcie można dobrze zrozumieć na poniższym przykładzie jako

double d = 135.0 d;
Double doubleWrapper = new Double(d);

int integerValue = doubleWrapper.intValue();
byte byteValue = doubleWrapper.byteValue();
string stringValue = doubleWrapper.stringValue();

Więc w ten sposób możemy użyć wrapper class type aby przekształcić się w inne prymitywne typy, jak również. Ten typ konwersji jest używany, gdy trzeba przekonwertować prymitywny typ na obiekt i użyć ich, aby uzyskać inne prymitywne, jak również.Jednak w tym podejściu musisz napisać duży kod . Jednak to samo można osiągnąć za pomocą prostej techniki odlewania, ponieważ fragment kodu można uzyskać jak poniżej

double d = 135.0;
int integerValue = (int) d ;

Chociaż Podwójna wartość jest jawnie konwertowana na wartość całkowitą, również wywołaną jako downcasting.

 38
Author: SBTec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-07 11:22:37

Klasa wrapper niekoniecznie musi owijać inną klasę. Może to być funkcja owijania klas API, np. w pliku dll.

Na przykład bardzo przydatne może być utworzenie klasy wrapper dll, która zajmuje się wszystkimi inicjalizacją i czyszczeniem dll oraz tworzenie metod klas, z których tworzone są Wskaźniki funkcji zawijania, np. GetProcAddress().

Zdrówko !
 17
Author: ralphtheninja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-25 23:45:11

Klasa owijania to klasa, która "owija" coś innego, tak jak jej nazwa.

Bardziej formalną jej definicją byłaby klasa, która implementuje Wzór adaptera . Pozwala to zmodyfikować jeden zestaw interfejsów API w bardziej użyteczną, czytelną formę. Na przykład w C#, jeśli chcesz użyć natywnego interfejsu API systemu Windows, pomaga to owinąć go w klasę zgodną z wytycznymi.NET design guidelines.

 8
Author: Reed Copsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-20 17:18:52

Istnieje kilka wzorców projektowych, które można nazwać klasami wrapperów.

Zobacz moją odpowiedź na " Czym różnią się wzory Proxy, dekorator, Adapter i mostek?"

 8
Author: Bill Karwin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:10

Warto również zauważyć, że w niektórych środowiskach wiele z tego, co mogą robić klasy wrapperów, jest zastępowanych aspektami.

EDIT:

Ogólnie rzecz biorąc, wrapper rozszerzy to, co robi wrappee, nie martwiąc się o implementację wrappee, w przeciwnym razie nie ma sensu owijania zamiast rozszerzania klasy owiniętej. Typowym przykładem jest dodanie informacji o czasie lub funkcji rejestrowania wokół innego interfejsu usługi, w przeciwieństwie do dodawanie go do każdej implementacji tego interfejsu.

Jest to typowy przykład programowania Aspektowego. Zamiast przechodzić przez funkcję interfejsu po funkcji i dodawać logowanie boilerplate, w programowaniu aspektu definiujesz pointcut, który jest rodzajem wyrażenia regularnego dla metod, a następnie deklarujesz metody, które chcesz wykonać przed, po lub wokół wszystkich metod pasujących do pointcut. Można chyba powiedzieć, że programowanie aspektowe jest rodzajem wykorzystanie wzoru dekoratora, do którego można również wykorzystać klasy wrapper, ale obie technologie mają inne zastosowania.

 7
Author: Jherico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-20 18:57:15

Klasa Wrapper jest klasą, która otacza inną klasę i zapewnia abstrakcję między Klientem a oryginalną klasą, która jest owinięta.

 7
Author: Rakesh verma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-09 05:11:15

Klasa wrapper jest zwykle klasą, która ma obiekt jako własność prywatną. wrapper implementuje API tego prywatnego obiektu, więc może być przekazywany jako argument, w którym obiekt prywatny.

Powiedzmy, że masz kolekcję i chcesz użyć jakiegoś tłumaczenia, gdy obiekty są do niej dodawane-piszesz klasę wrappera, która ma wszystkie metody kolekcji. po wywołaniu add (), wrapper tłumaczy argumenty zamiast po prostu przekazywać je do prywatnego kolekcja.

Wrapper może być używany wszędzie tam, gdzie może być użyta kolekcja, a obiekt prywatny może nadal mieć inne obiekty odwołujące się do niej i odczytujące ją.

 5
Author: Amir Arad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-20 17:25:44

Klasa wrapper jest klasą, która jest używana do owijania innej klasy, aby dodać warstwę indrection i abstrakcji między Klientem a oryginalną klasą, która jest owijana.

 3
Author: Andrew Hare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-20 17:18:39

Klasa Wrapper jest opakowaniem wokół prymitywnego typu danych. Reprezentuje prymitywne typy danych w odpowiadających im instancjach klas, np. typ danych boolean może być reprezentowany jako instancja klasy Boolean. Wszystkie prymitywne klasy wrapper w Javie są niezmienne, tzn. po przypisaniu wartości do instancji klasy wrapper nie można dalej zmieniać.

 3
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-04 08:14:17

Programowanie w języku Java zapewnia klasę wrapper dla każdego prymitywnego typu danych, aby przekonwertować prymitywne typy danych na odpowiedni obiekt klasy wrapper.

 3
Author: THOSEEF PASHA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-01 12:42:22

Aby wrapper class well being nie jest łatwym zadaniem. Zrozumienie klasy owijarki, jak jest ona projektowana przez innych, również nie jest łatwym zadaniem. Bo to idea, a nie kod. Tylko wtedy, gdy zrozumiesz ideę, zrozumiesz wrapper.

 1
Author: Tony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-18 03:14:38

Klasy Wrapper powstały, aby spełnić podstawową potrzebę programistów - tj. aby używać prymitywnych wartości wszędzie tam, gdzie dozwolone są tylko obiekty. Jak sama nazwa wskazuje, klasy wrapper owijają prymitywną wartość i utrzymują ją w obiekcie. Tak więc, wszystkie te miejsca, w których prymitywy nie były dozwolone - takie jak generics, hashmap-keys, Arraylists itp. - programiści mają teraz możliwość podania tych prymitywnych wartości jako odpowiadających im typów owijek.

DODATKOWO owijarka typy mają wiele metod użytkowych do konwersji z typu prymitywnego na odpowiednie typy owijarek i z powrotem, a także z łańcuchów do typów owijarek i z powrotem.

Napisałem szczegółowy artykuł o klasach wrapperów na moim blogu, który szczegółowo wyjaśnia pojęcie typów wrapperów - http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples/ (Disclosure - this blog is owned by me)

 0
Author: Dhruv Rai Puri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-03 06:23:57

Obecnie używam klasy wrapper dla mojego projektu i główne korzyści, które otrzymuję (tylko jedna korzyść, aby poszerzyć Wyjaśnienie tematu):

Obsługa wyjątków: moja główna klasa, że inna klasa wraps, ma metody, które rzucają wyjątki, jeśli występują, więc stworzyłem klasę wrapper, która obsługuje wyjątki i rejestruje je natychmiast. Więc, w moim głównym zakresie, nie ma obsługi wyjątków. Po prostu dzwonię po metodę i coś robię.

Łatwe użycie: mogę łatwo zainicjować obiekt. Zwykle Faza inicjacji jest zbudowana z wielu kroków.

Czytelność kodu: gdy inny programista otworzy mój kod, kod będzie wydawał się bardzo przejrzysty i łatwy do manipulowania.

Ukrywanie szczegółów: jeśli generujesz klasę, której będzie używał inny programista, możesz zawinąć szczegóły, takie jak " obsługa błędów, obsługa wyjątków, rejestrowanie wiadomości itp..."aby programista nie musiał radzić sobie z chaosem, po prostu używa metod.

 0
Author: Bahadir Tasdemir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-20 09:27:17

Klasa wrapper jest klasą, która służy wyłącznie do przechowywania czegoś i dodawania do niego pewnych funkcjonalności. W Javie od podstaw (np. ints,floats,chars...) nie są obiektami, więc jeśli chcesz je tak traktować, musisz użyć klasy wrapper. Załóżmy, że chcesz utworzyć Wektor ints, problem polega na tym, że wektor zawiera tylko obiekty, a nie prymitywy. Więc to, co zrobisz, to Umieść wszystkie ints w opakowaniu Integer i użyj tego. Przykład:

int number = 5;
Integer numberWrapped = new Integer(number);
//now you have the int in an object.
//and this is how to access the int value that is being wrapped.
int again = numberWrapped.intValue();
 -1
Author: Reza Baradaran Gazorisangi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-14 14:09:45

Owijarka jest klasą, która służy do komunikacji pomiędzy dwoma różnymi aplikacjami pomiędzy różnymi platformami

 -7
Author: laxminarayan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-27 11:46:11