コンテンツにスキップ

委譲

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Copi-o (会話 | 投稿記録) による 2011年6月10日 (金) 20:55個人設定で未設定ならUTC)時点の版 (clean up, replaced: 行なう → 行う (3) using AWB)であり、現在の版とは大きく異なる場合があります。

委譲 (delegation) とはオブジェクト指向プログラミングにおいて、あるオブジェクトの操作を一部他のオブジェクトに代替させる手法のこと。

委譲を行うオブジェクトは委譲先オブジェクトへの参照を持ち、必要に応じてその参照を切り替える事で動作にバリエーションを持たせる事ができる。一種の実装遅延、プラグイン機構である。一例としては、オブジェクトの編集を行う時、編集の前処理、後処理を本処理と独立させ委譲先に任せる事で、オブジェクト本体の変更を最小限にとどめ局所性を向上させる、などがある。

操作の代替という観点では他に代理 (Proxy) と呼ばれる手法があるが、この場合は代理側のオブジェクトが実体への参照を保持する事で操作のフィルタを行う概念であり、実装の分離を目的とする委譲とは異なる。

委譲を引き受けるオブジェクトはどのような操作を実装しなければならないか知っている必要があるため、インタフェースと併用される場合が多い。


C++の例

#include <iostream>

class A {
    public:
        void foo() {
            std::cout << "A::foo() is called." << std::endl;
        }
};

class B {
    public:
        void bar() {
            a.foo();
        }
    private:
        A a;
};

Javaの例

class A {
    public void foo() {
        System.out.println("A.foo() is called.");
    }
}

class B {
    private A a = new A();
    public void bar() {
        a.foo();
    }
}

関連項目