継承は is-a、委譲は has-a または uses-a

「継承は is-a の関係」というのはオブジェクト指向の基本ですが、最近は何でも安易に継承を使ってしまうことが多かった自分を戒めてくれたのがこちらの本。

アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣

アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣


本書の「32 取り決めを守ってコードを置き換える」(p.129〜)に次のようにあり、継承か委譲か判断の指針になります。

  • 新しいクラスが既存のクラスと置き換え可能で、かつ両者の関係がis-a (である)の場合は、継承を使う。
  • 既存のクラスを新しいクラスで使いたいだけで、両者の関係がhas-a (持つ)またはuses-a (使う)の場合は、委譲を使う。


また、自分が継承を使ってしまう理由についても

「委譲だとメソッド呼び出しを転送する小さなメソッドを大量に書かないといけなくなる」という意見もあるだろう。確かに継承であればそんな手間はいらない。基底クラスのpublicメソッドをそのまま派生クラスでも使えるからだ。

と見事に言い当てられ、それについては

しかし、だからといってそんな理由で継承を使うのは間違いだ。

とバッサリと切られています。


継承の誤用を避けること、多くの場合では委譲を使ったほうが適切で柔軟であることが学べました。


アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣』は、これ以外にもたくさんの気づきを与えてくれる良書でした。

タイトルの「アジャイル」というキーワードに拘らず、ソフトウェア開発に関わる全ての人にオススメの1冊。