
師匠と弟子
師匠:最後に会ってからしばらく時間が経ったな。継承について深
く考えたか?
弟子:はい、師匠。継承は強力ですが、必ずしも最も柔軟な設計や
保守性のある設計につながるわけではないことを学びました。
師匠:よろしい、いくらか進歩したな。それでは、継承を使用しない場合、どのよう
に再利用を実現するか言うてみよ。
弟子:師匠、私はコンポジションと委譲を使って実行時に振る舞いを「継承」する方
法があることを学びました。
師匠:続けよ。
弟子:サブクラス化で振る舞いを継承すると、その振る舞いはコンパイル時に静的に
設定されます。さらに、すべてのサブクラスが同じ振る舞いを継承しなければいけま
せん。しかし、コンポジションを使ってオブジェクトの振る舞いを拡張すると、振る
舞いの拡張を実行時に動的に行うことができます。
師匠:よくできたな。コンポジションの威力を理解し始めたようだな。
弟子:はい、コンポジションを使うと、スーパークラスの設計者が思いつかないよう
な責務を含む、複数の新しい責務をオブジェクトに追加できます。また、コードをい
じる必要がありません!
師匠:コードの保守に関するコンポジションの効果については何を学んだか?
弟子:えー、それこそ私が目指していたことです。動的にオブジェクトを構成するこ
とで、既存コードを変更するのではなく新しいコードを書いて新機能を追加できま
す。既存コードを変更しないので、既存コードにバグを発生させたり予期せぬ副作用
を引き起こしたりする可能性がかなり減少します。
師匠:よくできたな。今日のところは十分だ。この話題についてさらに理解を深める ...