オブジェクト指向実践ガイド 第6章〜継承によって振る舞いを変える〜

本日はTamarbの「オブジェクト指向実践ガイド 第6章〜継承によって振る舞いを変える〜」 の輪読会がありました!

この本は自分には難しく、説明文の中にJavaの概念も所々出てきたりし、自分で読んだだけでは理解ができておりませんでした。

しかし皆様の具体例や解説のおかげで1人で読むだけより理解が深まりました!

インターフェイスコンポジションという概念についても理解したいので後日また時間をとって調べてみようと思います。

 

①クラスによる継承を理解する

継承とは、メッセージの自動委譲の仕組みです。オブジェクトを階層構造に構成する手間はかかりますが、その代わりにメッセージ委譲は継承させるだけで可能になるというものです。

 

②継承を使うべき箇所を識別する

継承をたくさん使用していると、変更するのがとても大変になる為、絶対に継承させた方がいいという場合以外はコンポジションを使うことが推奨されます。

 

コンポジションとは、あるクラスの機能を持つクラスのことです。Javaで用いられる概念のようです。

別のクラスが持つ機能を、あるクラスにもたせたい時、継承を使わずにフィールドとしてそのクラスをもたせ、そのクラスのメソッドを呼び出すメソッドを実装します。

このようにすることであるクラスに他のクラスの機能を組み込むことができます。

 

 

③抽象を見つける

継承する場合は、まずは具象的なサブクラスを実装し、その後抽象的なスーパークラスを作るのが良い手順です。

スーパークラスはテンプレートメソッドパターンを使うことで、サブクラスに専門に特化するように促します。
テンプレートメソッドパターンを使う場合は親にもNotImplementedErrorを発生させるメソッドを用意します。

 

*テンプレートメソッドパターンとは、サブクラスによって変更したい部分はメソッドで包み隠しオーバーライドできるようにすることです。

 

 

スーパークラスとサブクラス間の結合度を管理する

フックメソッドを使うようにし、superは避けます。
スーパークラスのメソッドは全てのサブクラスで使われているべきです。