継承
Inheritance
親となるプログラムや型の性質を引き継ぐこと。
親は抽象的概念で、子、孫と子孫の世代が増えるごとに具体化されていく。
動物→犬→柴犬、のようなもの。
継承の関係を「動物」に例えるのはとても悪い例として知られているが、そもそもこのような「継承関係」を持つ例が一般的な人々が知っているものにほとんど存在しない。
GUI の部品としての実例がとても合っているが、内部構造を理解していないと説明にならない。
子は親に対する、追加部分や、特殊条件の差分だけを書けば良い。(理論的には)
差分プログラミング
継承すべきか(できるか)どうかの簡単な判断方法
~の一種(a kind of ~)と表現できるかどうか。
表現できない場合は、そのクラスを利用しているだけで、そのクラスそのものではない。
継承がうまく行かない理由
継承関係が複雑で綺麗に継承できない。
多重継承、合いの子
綺麗に継承構造(直交性、完全性)を作ろうとすると、親が巨大化していく。
誰がいつ使うか分からないようなメソッド、プロパティが増えていく。
差分を綺麗に書けない。
あらかじめどういう差分を作ることになるのかを親の設計時点で予測しなければならないが、それは不可能である。
結局コピペして一部を書き換えるようなことになる。