「オブジェクト指向設計実践ガイド」 第6章 継承によって振る舞いを獲得する

第6章 継承によって振る舞いを獲得する

よいアプリケーションの設計とは、再利用可能なコードによって構成されていること。このためにこれまでは

  • コンテキストを最小限にする
  • 明確なインターフェースを定義する -依存オブジェクトを外部から注入する

といったテクニックが紹介されてきた。これに加えて、Rubyに限らず多くのオブジェクト指向言語が持つ継承を利用することを考える。

継承とは

継承とは、「メッセージの自動委譲」である。サブクラスが理解できないメッセージをスーパークラスに転送すること。

継承を使うべきポイント

あるオブジェクトの属性を確認して、その属性に応じて送るメッセージを変えるようなコードがあったら、それは継承を使うべき。

サブクラスがスーパークラスのより特殊な形態になる場合、それは継承関係を使うにふさわしい。一方、単に共有したいコードがたくさんあるだけのときは継承を使うべきではない。(IS-Aの関係)

継承が効果を発揮するには、次の2つが成り立っている必要がある。

  1. モデル化したオブジェクトが汎化-特化の関係にあること
  2. 正しいコーディングテクニックを使っていること

すでにあるコードに階層構造を導入するときには、いまあるコードは「具象」としてとりあつかいそこから「抽象」を切り出していくほうがよいとされている。抽象的なものがサブクラスに残っていることより、具象的なものがスーパークラスに残っていることのほうが危険だからである。

コーディングテクニック

テンプレートメソッドパターンを使うことで、サブクラスを専門的な仕事だけに特化させることができる。

サブクラスが明示的にsuperを呼び出すということは、サブクラスがスーパークラスの実装を知っているということである。この依存をなくすために、スーパークラスのメソッド内でフックメッセージを使うことができる。