OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

委譲って何ですか?

  • 暇なときにでも
  • 質問No.180683
  • 閲覧数805
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 73% (14/19)

最近、Webを見ていて「安易な継承を使うよりも委譲を使うほうが良い」
見たいな事が書いてあったのですが、
「委譲」とは具体的にどのようなものでしょうか?
「継承」との違いは?

ご存知のかた、教えてください。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

「委譲」とは、他のオブジェクトに処理(責任)を譲ることをいいます。
多分、ソースを見比べると雰囲気が分かります。

クラス C のメソッド print() を、頭に「★」を付加するように拡張する例です。

class C {
public:
void print(char* str) { cout << str << endl; }
};

//継承で機能拡張
class C1 : public C {
public:
void print(char* str) {
cout << "★";
C::print(str);
}
};

//委譲で機能拡張
class C2 {
private:
C* c_;
public:
C2() { c_ = new C(); }
void print(char* str) {
cout << "★";
c_->print(str);
}
}
お礼コメント
yosizo

お礼率 73% (14/19)

大変解かり易い例をあげていただき、ありがとうございます。
なるほど、特別な機能という訳ではないのですね。(^^;

・・・ただ、やってることは理解できたのですが、
なぜ継承よりも委譲の方が良いとされるのでしょうか?
やはり、ソースの見通しが良いとかそういう理由なのでしょうか。

追加の質問で申し訳ありません。
投稿日時 - 2001-12-08 01:08:16
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.2

委譲…譲り渡すこと 禅譲…徳のあるもの、有能な者に位を譲ること 禅譲?? 『安易な継承(世襲)でなく『禅譲』を使うほうが良い…』なら意味がわかりますが。 具体的にはどんな分野・場面で使われていたのでしょうか?(もしかして本物のプログラム用語なのでしたら、一笑にふしてください。←まったくの素人なので勘違いかもしれんです。) ...続きを読む
委譲…譲り渡すこと
禅譲…徳のあるもの、有能な者に位を譲ること

禅譲??
『安易な継承(世襲)でなく『禅譲』を使うほうが良い…』なら意味がわかりますが。

具体的にはどんな分野・場面で使われていたのでしょうか?(もしかして本物のプログラム用語なのでしたら、一笑にふしてください。←まったくの素人なので勘違いかもしれんです。)
お礼コメント
yosizo

お礼率 73% (14/19)

すみません、「委譲」は本物のプログラム用語です。
オブジェクト指向の分野で耳にしたもので質問しました。
投稿日時 - 2001-12-08 01:10:33


  • 回答No.3
レベル14

ベストアンサー率 50% (1122/2211)

> なぜ継承よりも委譲の方が良いとされるのでしょうか? オブジェクト指向というのは、要求される「機能」を実装してゆくのではなく、対象と している問題領域を *素直に* モデル化することで、それが要求される機能の変更に 対して強い(変更箇所が局所化されている)のが利点だ、というのは本で読んだとおりです。 その「素直なモデル化」に関係することです。 派生というのは、is-a の関係 ...続きを読む
> なぜ継承よりも委譲の方が良いとされるのでしょうか?

オブジェクト指向というのは、要求される「機能」を実装してゆくのではなく、対象と
している問題領域を *素直に* モデル化することで、それが要求される機能の変更に
対して強い(変更箇所が局所化されている)のが利点だ、というのは本で読んだとおりです。

その「素直なモデル化」に関係することです。

派生というのは、is-a の関係にある関連です。

継承元→継承先と見ると、それは「具体化」になっているべきで、逆に、継承先→継承元と
見ると、「抽象化」になっているべきです。概念として包含関係になっているように。

例えば、動物→哺乳類→猿、というふうに概念が具体的になってゆきます。

猿から派生させるとしたら、猿を更に具体化するような、ゴリラだとかチンパンジーは
OK なんですけど、求める振る舞い(機能と言っても良い)が、殆ど同じだからといって
猿から犬を派生させちゃいけないんです。

これは「安直な派生」とみなされます。

ただ、現実問題として、同じ振る舞いをあちこちに記述するのは、オブジェクト指向が
求めるものからいっても、ふさわしいことではないですから、そういった場合の解決
方法として「委譲」の方が良いのではないか、ということです。

さっきの犬の話に戻ると、具体化のレベルを合せる意味では、犬は哺乳類から派生させる
べきで、実装を共有させるために、幾つかのメソッドを猿に委譲する方が、オブジェクト
としては素直なモデルです。


安直な派生のもうひとつのケースとして、多重継承があります。

新しい機能を実装するクラスを考えたときに、あの機能も流用したい、この機能も
流用したい、だから、いろんなクラスから多重継承してしまう、というケース。

これも「機能の実装」の側面で考えているわけですから、派生は概念の具体化だ、と
言うことに反します。

機能を流用したければ、そのオブジェクトを抱えておいて、必要な機能だけを委譲して
使う方が良い、と言われます。

# ん~、あまり上手な説明ではないですね (^^;
# 補足は遠慮無くどうぞ。できる範囲で頑張ります。
お礼コメント
yosizo

お礼率 73% (14/19)

御礼が遅くなって申し訳ないです。
大変丁寧な解説をしていただき、ありがとうございました。
投稿日時 - 2001-12-11 18:43:04
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ