Wo und wie wird der Begriff WRAPPER in der Programmierung verwendet, wozu hilft er?

85

Ich stoße auf Softwareentwickler, die den Begriff des Erstellens von Wrappern anderer Klassen oder APIs oder sogar einiger Codes verwenden. Dieser Begriff wird von erfahrenen Softwareprogrammierern verwendet

Also jede Idee, was sie damit meinen;

zB eine einfache Frage; Wir haben zwei Arten von Array-Sortiertechniken. Lassen Sie uns einen Wrapper dafür erstellen

Das obige ist ein sehr einfaches Beispiel

Basit Anwer
quelle

Antworten:

134

Der Begriff "Wrapper" wird viel herumgeworfen. Im Allgemeinen wird es verwendet, um eine Klasse zu beschreiben, die eine Instanz einer anderen Klasse enthält, diese Instanz jedoch nicht direkt verfügbar macht. Der Hauptzweck des Wrappers besteht darin, eine "andere" Möglichkeit zur Verwendung des umhüllten Objekts bereitzustellen (möglicherweise bietet der Wrapper eine einfachere Benutzeroberfläche oder fügt einige Funktionen hinzu).

Das Wort "Wrapper" kann auch zur Beschreibung klassischer Designmuster verwendet werden.

Das Umwickeln eines Objekts, um eine vereinfachte Schnittstelle zu diesem Objekt bereitzustellen, wird häufig als "Fassadenmuster" bezeichnet. Die Hülle ist die Fassade.

Manchmal haben Sie möglicherweise eine Klasse, die für eine bestimmte Schnittstelle geeignet ist, aber Sie können den Code nicht ändern, damit er mit dieser Schnittstelle übereinstimmt. Sie können einen Wrapper für diese Klasse erstellen, der die Schnittstelle implementiert, aber die meisten Aufrufe an das umschlossene Objekt weiterleitet. Dies ist das 'Adapter'-Muster. Der Wrapper ist der Adapter.

Die von Ihnen beschriebene Instanz, in der Sie zwei Klassen haben, die die Array-Sortierung mit unterschiedlichen Algorithmen durchführen können, klingt wie das 'Strategie'-Muster, in dem Sie eine Möglichkeit zum Ausführen einer Operation für ein Objekt bereitstellen. Der für diese Operation verwendete Algorithmus kann jedoch je nach Operation unterschiedlich sein auf die Struktur dieses Objekts.

Zum Beispiel kann einer Ihrer Sortieralgorithmen für Arrays mit einer Länge von weniger als 100 großartig sein, aber dann kann die Leistung ein Problem dafür sein. Der andere Algorithmus ist möglicherweise für größere Arrays geeignet. Sie können einen 'Wrapper' für die beiden Algorithmen erstellen, der die Sortieroperation unterstützt, aber basierend auf der Array-Länge entscheidet, welcher Algorithmus verwendet werden soll.

Die überwiegende Mehrheit der Wrapper existiert, um irgendeine Art von Komplexität zu verbergen.

Alex Humphrey
quelle
5
oh, verstanden ... Danke :) eine sehr detaillierte Antwort, löste meine Wrapper-Probleme dort :)
Basit Anwer
In Python gibt es das xdress-Paket github.com/xdress/xdress . Es heißt, es sei ein Wrapper-Generator. Was bedeutet das in diesem Zusammenhang? Erstellt es eine ausführbare Datei in C (die in der Tat eine "andere" (in C) Möglichkeit
77

Einfache Erklärung durch Analogie: Was ist Wrapping?

Code nicht zur Erklärung verwendet.

Beispiel 1: Ein Ipad "umhüllt" ein Iphone

Was macht das iPad, was das iPhone nicht macht?

Sind sie nicht im Grunde dasselbe, außer dass man einen größeren Bildschirm hat?

Das iPad "umhüllt" das iPhone: Dies bedeutet, dass Sie alle Vorteile des iPhones innerhalb des iPad selbst haben UND die Vorteile eines größeren Bildschirms usw. haben. Grundsätzlich befindet sich im iPad jedoch ein iPhone.

Was ist dann anders? Das einzige, was anders ist, ist das Äußere: Sie haben einen größeren Bildschirm und können möglicherweise nicht auf dem iPad telefonieren.

Ein iPhone ist das einzige, was in einem Ipad steckt.  Das Ipad verpackt das Iphone buchstäblich.  Außer Sie können nicht mit einem Ipad telefonieren, da die Möglichkeit zum Telefonieren nicht "offengelegt" wurde.  Apple möchte, dass Sie x2 Produkte kaufen, nicht nur eines: P.

Es ist buchstäblich dasselbe mit "Objekten".

............. das Innere hat all die guten Sachen, die gleich sind, aber ein anderes Äußeres. Ein anderer Wrapper.

"Wrapper können andere Merkmale als das zugrunde liegende Objekt verfügbar machen " ...... okay, aber was bedeutet das?

Manchmal kann der Wrapper die Dinge einschränken, auf die Sie im Inneren zugreifen können. Beispielsweise kann das iPad Ihre Fähigkeit zum Telefonieren einschränken, obwohl das darin vergrabene iPhone über diese Fähigkeit verfügt.

Beispiel 2: Automatisches Auto, das als Hülle für ein manuelles Auto fungiert

Denken Sie an ein automatisches Auto und ein manuelles Auto. Hinter den Kulissen eines automatischen Autos gibt es einen technischen Mechanismus, der automatisch die Gänge für Sie schaltet, aber im Grunde genommen ist das Auto unter der Oberfläche immer noch ein manuelles Auto. Mit anderen Worten, die automatischen Funktionen des Autos "umhüllen" die manuelle Funktionalität des Autos. Wenn Sie die Gänge in einem automatischen Auto manuell selbst wechseln möchten, können Sie dies einfach nicht tun. Die Möglichkeit, die Gänge zu wechseln, ist im automatischen Auto "nicht ausgesetzt". Aber es ist in einem manuellen Auto ausgesetzt. Zugegeben, die Analogie ist etwas angespannt, aber ich hoffe, Sie sehen, worauf ich hinaus will.

Aber was ist der Zweck eines Wrappers?

Sie würden eine Verpackungsklasse schreiben, wenn Sie die Dinge vereinfachen möchten. Sie würden einen einfach zu verwendenden "Wrapper" erstellen und alle komplizierten Bits im Wrapper belassen, um sicherzustellen, dass diese komplizierten Bits nicht "freigelegt" werden.

Sie könnten beispielsweise einen .net-Wrapper haben, der darunter COM-Aufrufe ausführt. Wenn Sie keinen Wrapper hätten, wären Sie gezwungen, diese COM-Anrufe selbst zu tätigen. Glücklicherweise würden Sie mit dem Wrapper nur den .net-Wrapping-Code aufrufen - was wiederum diese COM-Aufrufe bewirken würde. Und das sollte hoffentlich die Dinge für Sie vereinfachen.

BKSpurgeon
quelle
8
Ich mag diese Art von Erklärung, wenn ich technische Jargons erkläre. Kennen Sie Websites, die das speziell tun? Vielen Dank.
viggy28
3
das macht so viel Sinn.
L. Dai
10

Es ist nur so, dass Sie einfach zu verwendenden Code schreiben, um die Komplexität des Codes darunter zu verbergen. Dies ist besonders nützlich, wenn Sie eine Low-Level-API aus einer höheren Sprache aufrufen müssen und den gesamten "hässlichen" Code versteckt halten möchten.

Bearbeiten: Weitere Informationen finden Sie in diesen beiden Wiki-Artikeln: Bibliothek und Funktion

Hans Olsson
quelle
4

Ein Wrapper ist ein Code, der erstellt wird, um eine API intern aufzurufen, ohne die tatsächliche API zu ändern.

Ein Beispiel hierfür ist die Veröffentlichung des Facebook C # SDK durch Facebook . Das SDK ist eigentlich ein Wrapper, da Sie nur die zugrunde liegende Plattform aufrufen können, ohne bestimmte Methoden und Klassen anzugeben. Auf der anderen Seite ist das Facebook Developer Toolkit die vollständige API.

Carlos Muñoz
quelle
Ich muss ein C # -Programm schreiben, das eine Skriptdatei erstellt (die Skriptsprache ist spezifisch für ein Hardwaregerät und wird aufgerufen CoraScript). Es gibt ungefähr 50 Befehle in CoraScript, z. B. einen, der eine Verbindung zu einem Gerät herstellt, einen, der Dateien an dieses Gerät sendet, es anweist, eine Anwendung in seinem Flash-Speicher auszuführen usw. Anstatt ein CoraScript von Hand zu codieren, würde ich möchte eine C # -Bibliothek erstellen, die ein solches Skript generiert. Würde diese C # -Bibliothek als wrapper libraryCoraScript-Skriptsprache bezeichnet?
Minh Tran
Der Befehlszeileninterpreter für diese Skriptsprache ist eine Konsolenanwendung. Während diese Anwendung ausgeführt wird, werden CoraScript-Befehle verwendet, ausgeführt und die Ausgabe dieses Befehls zurückgegeben (z. B. Connect localhostwürde der CoraScript-Befehl die Zeichenfolge zurückgeben, +connect,"coralib3.dll version 1,8,11"um anzuzeigen, dass der Befehl erfolgreich ausgeführt wurde).
Minh Tran
2

Es gibt viele Beispiele für "Wrapper" und der Begriff wird manchmal synonym verwendet. Es folgen einige Beispiele, die mir in den Sinn kommen:

DLL Wrapper

In der Vergangenheit habe ich einen COM-Wrapper um eine .NET-DLL erstellt, um die erweiterten Funktionen von .NET in älteren Anwendungen zu verwenden, die COM verstehen, aber .NET nicht verstehen.

Object Wrapper (Java)

In Java enthält das java.langPaket eine Klasse , die Objektmethoden für die acht primitiven Typen bereitstellt. Alle primitiven Wrapper-Klassen in Java sind unveränderlich. Daher werden WrapperKlassen verwendet, um primitive Werte darzustellen, wenn ein Objecterforderlich ist.


quelle
1

Wrapper-Funktion, eine Funktion, deren Hauptzweck darin besteht, eine zweite Funktion aufzurufen

Shahid Malik
quelle
-1

Angenommen, Sie möchten Ihrem Code weitere Funktionen hinzufügen, können den Code jedoch nicht ändern. Hier hilft Wrapper. Sie können einen Wrapper verwenden, um die Ausgabe abzurufen, ohne den ursprünglichen Code zu ändern.

Löwe
quelle