継承は最後の武器だ

と、2年前偉い人が言っています*1

ところで「継承すると二つのクラスにis-aの関係が否応なしに成立してしまう」というのも、言語の欠陥の一つだと思います。これが言語の欠陥であると言うのは、そうならない言語が存在しているということで、例えばOCamlではバイナリメソッドがあると、クラスを継承してもサブタイプになる*2とは限らないわけです。

いい加減、サブタイプの関係と継承を結びつけて考えるのも、勘弁して欲しいと思います。正直なところ。サブタイプなんてstructuralに考えればいいやん。


http://d.hatena.ne.jp/lethevert/20051002

まあ、なんにしても、私の結論は、オブジェクト指向には、「インターフェース」と「クロージャ」さえあれば、「継承」は要らないということなんですが。(さらに関係ないし)

私の乏しい体験から言えば、VB6にはインタフェースのimplementsはありますが実装の継承がありません。これでプログラミングしようとすると、全てにいちいち委譲のコードを書く必要があるため、死にそうになります。なので、継承(とかmix-in)はあったほうが良いとは思うのです。

じゃあ、インタフェースとクロージャがあるけど、継承が無い言語だとどうなるのか、というと、、、気になるところです。