プログラミングでWRAPPERという用語はどこでどのように使用されていますか?それは何をするのに役立ちますか?


83

他のクラスやAPIのラッパー、または一部のコードを作成するという用語を使用しているソフトウェア開発者に出くわします。これは、経験豊富なソフトウェアプログラマーが使用する用語です。

だから、それが何を意味するのか、どんな考えでも。

例:簡単な質問。2種類の配列ソート手法があります。ラッパーを作成しましょう。

上記は非常に単純な例です

回答:


132

「ラッパー」という用語はよく使われます。通常、別のクラスのインスタンスを含むが、そのインスタンスを直接公開しないクラスを説明するために使用されます。ラッパーの主な目的は、ラップされたオブジェクトを使用するための「異なる」方法を提供することです(おそらく、ラッパーはより単純なインターフェースを提供するか、いくつかの機能を追加します)。

「ラッパー」という言葉は、古典的なデザインパターンを説明するときにも使用できます。

簡略化されたインターフェイスを提供するためにオブジェクトをラップすることは、「ファサード」パターンと呼ばれることがよくあります。ラッパーはファサードです。

特定のインターフェイスに適したクラスがある場合もありますが、そのインターフェイスに準拠するようにコードを変更することはできません。インターフェイスを実装するが、ほとんどの呼び出しをラップされたオブジェクトに向ける、そのクラスのラッパーを作成できます。これは「アダプタ」パターンです。ラッパーはアダプターです。

異なるアルゴリズムを使用して配列の並べ替えを実行できる2つのクラスがある場合、説明するインスタンスは「ストラテジー」パターンのように聞こえます。このパターンでは、オブジェクトに対して操作を実行する方法を提供しますが、その操作に使用されるアルゴリズムは、状況によって異なる場合があります。そのオブジェクトの構造に。

たとえば、ソートアルゴリズムの1つは、長さが100未満の配列には最適ですが、パフォーマンスが問題になる可能性があります。他のアルゴリズムは、より大きなアレイに適している場合があります。ソート操作をサポートする2つのアルゴリズムの「ラッパー」を作成できますが、配列の長さに基づいて使用するアルゴリズムを決定します。

ラッパーの大部分は、ある種の複雑さを隠すために存在します。


5
ああ、わかった...ありがとう:)非常に詳細な答え、そこで私のラッパーの問題を解決した:)
Basit Anwer 2010

Pythonには、xdressパッケージgithub.com/xdress/xdressがあります。ラッパージェネレーターだそうです。この文脈では、それはどういう意味ですか?それはCで実行可能ファイルを作成しますか(これは実際にラップされたオブジェクト(Pythonで)を使用するための「異なる」(Cで)方法を提供しますか、それとも私は混乱していますか?

75

類推による簡単な説明:ラッピングとは何ですか?

説明に使用されていないコード。

例1:IpadがiPhoneを「ラップ」する

iPhoneができないことをiPadは何をしますか?

画面が大きいことを除けば、基本的に同じではありませんか?

Ipadはiphoneを「ラップ」します。つまり、ipad自体の中にiphoneのすべての利点があり、より大きな画面などの利点があります。しかし、基本的に、ipadの中にはIphoneがあります。

では、何が違うのでしょうか?唯一違うのは外観です。画面が大きく、おそらくIpadで電話をかけることはできません。

Ipadの中にはiPhoneだけがあります。 Ipadは文字通りiPhoneを包みます。 電話をかける機能が「公開」されていないため、Ipadで電話をかけることができないことを除いて。 Appleはあなたに1つだけではなくx2製品を購入してほしい:P

それは文字通り「オブジェクト」と同じです。

.............内部には同じですが、外観が異なるすべての良いものがあります。別のラッパー。

「ラッパーは、基になるオブジェクトとは異なる機能を公開する可能性があります」 ......わかりましたが、これはどういう意味ですか?

ラッパーによって、内部でアクセスできるものが制限される場合があります。たとえば、ipadは、その中に埋め込まれたIphoneにその機能がある場合でも、電話をかける機能を制限する場合があります。

例2:マニュアル車のラッパーとして機能するオートマチック車

オートマチック車とマニュアル車を考えてみてください。舞台裏では、オートマチック車には自動的にギアを変更するエンジニアリングメカニズムがありますが、基本的に、車は表面下ではまだマニュアル車です。言い換えれば、車の自動機能は、車の手動機能を「ラップ」します。オートマチック車で自分でギアを手動で変更したい場合は、それはできません。オートマチック車では、ギアを変更する機能は「公開されていません」。しかし、それはマニュアル車で露出されています。確かにアナロジーは少し緊張していますが、私が何をしているのか見ていただければ幸いです。

しかし、ラッパーの目的は何ですか?

物事を単純化したい場合は、ラッピングクラスを作成します。使いやすい「ラッパー」を作成し、すべての複雑なビットをラッパー内に残して、それらの複雑なビットが「公開」されないようにします。

たとえば、その下にCOM呼び出しを行う.netラッパーを作成できます。ラッパーがない場合は、それらのCOM呼び出しを自分で行う必要があります。幸いなことに、ラッパーを使用すると、.netラッピングコードを呼び出すだけで、COM呼び出しを行うことができます。そして、それはうまくいけばあなたのために物事を単純化するはずです。


8
技術用語を説明するとき、私はこれらのちょっとした説明が好きです。具体的にそれを行っているサイトを知っていますか?ありがとう。
viggy28 2018

2
これは非常に理にかなっています。
L.大

10

使いやすいコードを記述して、その下にあるコードの複雑さを隠すだけです。これは、高水準言語から低水準APIを呼び出す必要があり、すべての「醜い」コードを隠したい場合に特に便利です。

編集:あなたはこれらの2つのウィキ記事でそれについてもっと見つけることができます:ライブラリ関数


4

ラッパーは、実際のAPIを変更せずにAPIを内部的に呼び出すために作成されるコードです。

この例は、FacebookがFacebook C#SDKをリリースしたことです。SDKは、特定のメソッドやクラスを提供せずに、基盤となるプラットフォームを呼び出すことしかできないため、実際にはラッパーです。一方、Facebook DeveloperToolkitは完全なAPIです。


スクリプトファイルを作成するC#プログラムを作成する必要があります(スクリプト言語はハードウェアデバイスに固有であり、と呼ばれますCoraScript)。CoraScriptには約50個のコマンドがあります。たとえば、デバイスに接続するコマンド、そのデバイスにファイルを送信するコマンド、フラッシュメモリでアプリケーションを実行するように指示するコマンドなどです。CoraScriptを手動でコーディングする代わりに、そのようなスクリプトを生成するC#ライブラリを作成するのが好きです。このC#ライブラリwrapper libraryはCoraScriptスクリプト言語用と呼ばれますか?
ミン・トラン

そのスクリプト言語のコマンドラインインタープリターは、コンソールアプリケーションです。そのアプリケーションの実行中に、CoraScriptコマンドを受け取り、それらを実行して、そのコマンドの出力を返します(たとえば、Connect localhostCoraScriptコマンドは+connect,"coralib3.dll version 1,8,11"、コマンドが正常に実行されたことを示す文字列を返します)。
ミン・トラン

2

「ラッパー」の例はたくさんあり、この用語は同じ意味で使用されることもあります。以下は、頭に浮かぶいくつかの例です。

DLLラッパー

過去に、COMを理解しているが.NETを理解していない古いアプリケーションで.NETの高度な機能を使用するために、.NETDLLの周りにCOMラッパーを作成しました。

オブジェクトラッパー(Java)

Javaではjava.lang、8つのプリミティブ型のオブジェクトメソッドを提供するためにパッケージで提供されるクラスがあります。Javaのプリミティブラッパークラスはすべて不変です。したがって、Wrapperクラスは、Objectが必要な場合にプリミティブ値を表すために使用されます。



-1

コードにいくつかの機能を追加したいが、コードを変更できないとします。そこでラッパーが役立ちます。ラッパーを使用すると、元のコードを変更せずに出力を取得できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.