継承は最後の武器だ
と、2年前偉い人が言っています*1。
ところで「継承すると二つのクラスにis-aの関係が否応なしに成立してしまう」というのも、言語の欠陥の一つだと思います。これが言語の欠陥であると言うのは、そうならない言語が存在しているということで、例えばOCamlではバイナリメソッドがあると、クラスを継承してもサブタイプになる*2とは限らないわけです。
いい加減、サブタイプの関係と継承を結びつけて考えるのも、勘弁して欲しいと思います。正直なところ。サブタイプなんてstructuralに考えればいいやん。
http://d.hatena.ne.jp/lethevert/20051002
まあ、なんにしても、私の結論は、オブジェクト指向には、「インターフェース」と「クロージャ」さえあれば、「継承」は要らないということなんですが。(さらに関係ないし)
私の乏しい体験から言えば、VB6にはインタフェースのimplementsはありますが実装の継承がありません。これでプログラミングしようとすると、全てにいちいち委譲のコードを書く必要があるため、死にそうになります。なので、継承(とかmix-in)はあったほうが良いとは思うのです。
じゃあ、インタフェースとクロージャがあるけど、継承が無い言語だとどうなるのか、というと、、、気になるところです。
*1:http://www.rubyist.net/~matz/20030806.html#p01
*2:is-a関係が成り立つ