「継承は最終手段」という言葉をプログラマが知るべき97のことで見たような気がしていたのだが、どうもそんなこと言われてないようなので、考えたことをメモ

 注意事項としてインタフェースの継承ではなく、クラスの継承について書いているつもり。

 

 言わずもがなだが、JavaやC#といったプログラミング言語には継承という機能が用意されている。これを利用することで、あるクラスの機能を引き継いだクラスを作成することができる。

 しかし継承というものはプログラムを複雑にしてしまうので、使わざるを得ない状況にならない限り使うべきではない。

 

 継承によってプログラムが複雑になってしまう原因は以下が挙げられる

1. プログラミング中に親クラスのメンバがどうなっているかが把握しにくい

2. 親クラスのメンバのスコープが広い

3. 親クラス、小クラスのそれぞれの名前を見ても、それぞれのクラスが何の機能を担当しているかが分からない

 

 もし継承を使いたくなった場合は、継承を使わずにコンポジットパターンを用いるのが良い。

共有したい機能を抽出して新たなクラスを作成する方法だ。こちらのほうが、クラス名からクラスの持つ機能を推測できるため、プログラミングが楽になる。スコープも抽出されたクラス内で閉じている分、継承を用いるよりも一度に見る変数の量が少なくてすむ。