2017-12-07 9 views
0

私たちはGOFデザインパターンを研究しており、委任の最初の2つの段落ではブロックされています。表示された段落に記述されているコードがどのようなものかはわかりません。 Delegation from GOFGOF委任コードの例を書くことができますか?

+2

私の答えはalredyあなたの質問に答えていない場合は、あなたたちは問題を抱えている場所を説明できるならば、それは私たちのために役立つだろう同意する。あなたの実装はどうなると思いますか、あなたの友人は何を考えていますか? – Gordon

+0

これはパターンに関するもので、コードを記述していません。さまざまな方法や言語で実装できる戦略について説明します。コードについて質問するのではなく、実装に関する具体的な質問がある方が良いでしょう。 – Doleron

答えて

1

私は理解し、これが困難に主なものは、この一節ですね:

しかし、継承して、継承された操作は常にthisメンバーC++での変数とself内を介して受信オブジェクトを参照することができますスモールトーク。委任で同じ効果を達成するために、受信者は委任された操作が受信者を参照するように自身を委任者に渡します。

Quoting Wikipedia(強調鉱山):委任で

は、オブジェクトが第二オブジェクト(代理人)に委任することにより、要求を処理します。デリゲートはヘルパーオブジェクトで、ですが、元のコンテキストはです。言語レベルでの委任のサポートでは、委任内のselfがデリゲート(受信オブジェクト)ではなく元の(送信)オブジェクトを参照することによって暗黙的に行われます。それは実際にselfまたはthisまたはcurrentまたはcallerだかどうか

は言語固有のものです。これは、委任をサポートする言語では、次のことがうまくいくことを意味します

Window 
    int width: 640 
    int height: 480 
    Rectangle rectangle: new Rectangle() 
    int Area(): rectangle.Area() 

Rectangle 
    int Area(): self.width * self.height 

Window window: new Window() 
print window.Area() 

デリゲートは、Windowインスタンスのコンテキスト内でエリアを実行しているため、コードが長方形であるが、これは、640×480の結果を印刷します。つまり、ウィンドウの幅と高さをselfまで使用します。この自動コンテキストの受け渡しをサポートしていない言語で

、あなたの代わりにデリゲートに発信者を渡す必要があります:

Window 
    int width: 640 
    int height: 480 
    Rectangle rectangle: new Rectangle() 
    int Area(): rectangle.Area(this) 

Rectangle 
    int Area(context): context.width * context.height 

Window window: new Window() 
print window.Area() 

我々は(this経由)デリゲートにウィンドウのインスタンスを渡しているArea()を呼び出すとき。そして、デリゲートはwidthとheightのメンバーにアクセスして、明示的に渡された引数を使って計算を行います。

上記の疑似言語は、型や可視性などについては想定していません。このようなWindowsインスタンスを渡してメンバーにアクセスすることができます。使用言語によっては、走行距離が異なる場合があります。

したがって、委任は実際にバインディングコンテキストに関するものであり、単なるメソッド呼び出しの転送ではありません。コンテキストで評価送信オブジェクトは、単に受信側オブジェクトに対応するメンバを使用しています「委任」は、多くの場合、転送の明確な概念を参照するために緩く使用されていることを

注、:Wikipediaのページを一人の最後の時間を引用元のオブジェクトではなく受信するオブジェクトの名前です。

0

パターンに関しては、クラス図はそれを非常によく示しています。ウィンドウと矩形の2つのクラスです。

実際の本をまだ手に入れていないのであれば、おそらくこの図を説明する前の章のいずれかを読む価値があります。あるいは、私は間違っていて、それはその本にはありませんが、その後、これらのダイアグラムが何であるか、あるいはそれらをどのように扱うかを説明する追加のOOAD/OOPブックを手に入れます。

もしこれが今のところばかげているような場合:GoFもこれが価値あるものだと私は思っていますが、これは「継承を超えた集約」を意味するもので、それ自体が共鳴する価値があります。もしあなたのすべてが "私たち"がまだいないなら、それはどうですか?異なる書式のコード/コンセプトを取り上げ、具体的な例を挙げて説明します。

にも参照してください:

関連する問題