抽象論は苦手なので、このスレッドには書かないようにしようと思ってたの
ですが、堂々めぐりしているように見えるので。
> 「サブクラスの方が機能が上」という考え方だと、is-a の関係を考えた時
> に「機能が豊富なものは機能がショボいものの一種」ということになって変
> だよね。
変じゃないですよ?
Robert C. Martin が、Liskovの置換原則に関する有名な文書
http://www2.ocn.ne.jp/~yamagu/object/LSP-J.pdf
で述べた通り、継承の際に使う is-a の関係は、「オブジェクトが is-a で
あるか」ではなく、「オブジェクトの『振舞い』が is-a であるか」で判断
すべきです。
「機能が豊富なものは機能がショボいものの一種」というのは、この原則を
平易な言葉で言い替えたものに過ぎません。
オブジェクト指向設計の大原則です。
> 集合論(というか論理学のベン図)で考えれば、スーパークラスはサブクラ
> スよりも一段階抽象的なので、直接比較できないことはわかるよね。
これは、「オブジェクトが is-a であるか」を継承関係の設計の判断基準に
使うべきだと述べているように見えます。これは、第一近似として使いやすい
方法ではありますが、Robert C. Martin の文書で示されている通り、厳密に
考えると誤りであり、Liskovの置換原則の方を優先すべきです。