Laden...

Wrapper-Klasse

Erstellt von Unikum vor 19 Jahren Letzter Beitrag vor 18 Jahren 16.396 Views
U
Unikum Themenstarter:in
228 Beiträge seit 2004
vor 19 Jahren
Wrapper-Klasse

Hallo zusammen,

ich hoffe mein Posting ist hier im richtigen Forum 🙂

ich habe des öfters mal etwas von einer Wrapper-Klasse gehört und gelesen. Aber bisher noch keine eindeutige und erhellende Erklärung dazu gefunden. Ist eine Wrapper-Klasse sowas in der Richtung wie ein Interface oder einfach nur eine Definition einer bestimmten Klassenart?

Freu mich auf Eure Antworten.

gruß Olli

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo Unikum,

to wrap heißt verpacken/einpacken. Man schafft also eine Klasse, die nach außen die gewünschte Schnittstelle (also die gewünschten Methoden und Eigenschaften) zur Verfügung stellt, diese aber nicht selbt implementiert, sondern dazu eine bestehene Klasse oder ein bestehendes API zur Implementierung benutzt. Die Klasse Form ist z.B. eine Wrapper-Klasse für ein Win32-Window.

herbivore

PS: Wie gesagt, irgendwie vergesse ich immer Wikipedia: http://de.wikipedia.org/wiki/Wrapper-Klasse

S
127 Beiträge seit 2004
vor 19 Jahren

Wrapper Klassen sind Klassen die dir die Kommunikation mit nicht .Net Komponenten ermöglichen, so das man auch mit .Net das alte ADO einsetzen kann.(als Beispiel)
Die Wrapper Klassen bilden für dich dann ein Schnittstelle zu der Komponete, sie ummandeln praktisch die Komponete.

Mehr weiß ich leider auch nicht dazu.

B
189 Beiträge seit 2004
vor 19 Jahren

Wrapper ist ein bekanntes Entwurfsmuster (Design Pattern), das auch unter dem Namen Adapter bekannt ist. Es dient dazu, eine Schnittstelle so zu verändern, dass sie zu einer anderen Schnittstellen passt oder kompatibel ist.

U
Unikum Themenstarter:in
228 Beiträge seit 2004
vor 19 Jahren

Ah, jetzt wird mir einiges Klarer. Ich denk mal ich weiß nun was eine "Hüllenklasse" (hab ich von Wikepedia 😁 ) ist.

Gruß Olli

2.921 Beiträge seit 2005
vor 18 Jahren

Das stimmt nicht immer ganz. Aber total falsch ist das auch nicht.

Nehmen wir an wir wollen eine DLL-Datei in C# benutzen, die wir zuvor in C++ geschrieben haben, weil sich das anbietet.

Jetzt müßte jeder der die Klasse benutzen wollte, wieder anfangen die Library-Definitionen usw. mit DllImport([]...) usw. zu definieren um die Funktionen zu benutzen, wenn er auch die DSL haben will.

Einfacher ist:

[DllImport("echo.native.dll", CallingConvention=CallingConvention.Cdecl)]
static extern void SendMidiCode(string s);

WrapperKlasse::WrapperKlasse()
{
//DLL laden
LoadDLL();
}

~WrapperKlasse::WrapperKlasse()
{
//DLL entladen
UnloadDLL();
}

WrapperKlasse::SendMidicode(string sCode) //Das wird nachher aufgerufen, wir müssen uns dann sonst um nix mehr kümmern.
{
SendMidiCode(sCode); //Das ist der DLL-Aufruf
}

Also wie man hier sieht, wird der Originalaufruf einfach in die Klasse eingebettet...

Wenn dann die Datentypen zusätzlich noch umgewandelt werden müssen, kriegt der Anwender davon gar nichts mit. 🙂

Ist doch toll, oder?

Sorry habe etwas C++ und C#-Syntax hier vermischt, hoffe aber ist trotzdem verständlich.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

S
8.746 Beiträge seit 2005
vor 18 Jahren

Original von bitstream
Wrapper ist ein bekanntes
>
, das auch unter dem Namen
>
bekannt ist. Es dient dazu, eine Schnittstelle so zu verändern, dass sie zu einer anderen Schnittstellen passt oder kompatibel ist.

Das ist zwar nicht falsch, aber die Frage ist, ob z.B. nicht auch "andere" Entwurfsmuster Wrapper sind, z.B. der Dekorierer und die Fassade.

Der Unterschied der drei besteht ja in der Intention der Kapselung. Wenn meine Intention darin besteht die Interfaces zu harmonisieren dann ist es ein Adapter-Wrapper, geht es darum Funktionalität hinzuzufügen ist es ein Dekorierer-Wrapper, will ich Funktionalität verbergen oder vereinfachen ist ein Fassaden-Wrapper.

Eigentlich ist ein Wrapper kein Pattern, sondern eine Methode ein Pattern zu implementieren, nämlich mit einer umhüllenden Klasse. Der Pattern entsteht erst durch die Intention, die ich damit verfolge.

Insofern ist ein Wrapper ein Meta-Pattern (Pattern für Patterns).