
「
HAS-A
」(〜を持つ)という関係は興味深い関係です。そ
れぞれのカモは、飛ぶ振る舞いと鳴く振る舞いを委譲するた
めの
FlyBehavior
と
QuackBehavior
を持ちます。
このように
2
つのクラスを統合する際は、コンポジション
(
composition
)を使用します。カモは振る舞いを継承する代
わりに、適切な振る舞いオブジェクトで構成(
compose
)さ
れることで振る舞いを取得します。
これは重要なテクニックです。実は、これが
3
番目の設計
原則なのです。
これまで見てきたように、コンポジションを使ってシステ
ムを作成すると、柔軟性がかなり向上します。一連のアル
ゴリズムを一連の独自クラス内にカプセル化できるだけで
なく、構成しているオブジェクトが正しい振る舞いインタ
フェースを実装している限り、実行時に振る舞いを変更する
こともできるのです。
コンポジションは多くのデザインパターンで使用されてい
ます。本書を通じてそのメリットとデメリットがよくわかる
でしょう。
師匠と弟子
師匠:オブジェクト指向
の手法について学んだこ
とを言うてみよ。
弟子:師匠、私はオブジェクト指向の手
法に期待できることは再利用性であるこ
とを学びました。
師匠:続けよ。
弟子:師匠、継承を通じてすべての優れ
たものを再利用できるため、開発時間を
大幅に削減できるでしょう。
師匠:開発完了の前後ではどちらのほう
がコードに多くの時間を費やすか?
弟子:開発後です、師匠。初期開発より
もソフトウェアの保守と変更のほうが常
に時間がかかります。
師匠 ...