技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

オブジェクト指向言語で良く言われる「委譲」とは

javaC#といったオブジェクト指向言語のプログラミングの話をしている時に、「委譲」という言葉が出てくる時があります。
「委譲」には色々な意味があるのですが、このようなケースでは「具体的な処理が実装されている他のクラスのメソッドを呼び出す」という意味で取れば概ね間違いありません。
(ちなみに、この意味での「委譲」は、正しくは「転送」と呼ばれるそうです)
 
javaのコードで言うと以下のようなコードになります。
 
【サンプルコード】
・Transferred.java
private String message = "procedure transferred!"

public void procedure() {
    System.out.println(message);
}
 
・Transferring.java
public class Transferring {
    private Transferred transferred = new Transferred();

    public void procedure() {
        transferred.procedure();
    }
}
 
・TransferMain.java
public class TransferMain {

    public static void main(String[ ] args){
        Transferring transferring = new Transferring();
        transferring.procedure();
    }

}
 
【実行結果】
procedure transferred!
 
-------------------
 
会話をしていて「あれ、委譲ってなんだっけ」となる場合が(自分に限らず)あるので、備忘のために書いてみました。
委譲はデザインパターンでも多様されているので、言葉の意味だけでなく、手法としても覚えておいた方が良いでしょう。
(「継承」でも似たようなことはできるのですが、「委譲」だと複数のクラスのメソッドを一度に扱えるメリットがあります)