キメラを分かつ

id:sumimさんは、以下のようにコメントしている。

今のオブジェクト指向が、どんなに少なく見積もっても2つの異なるパラダイムの奇妙な(それぞれの提案者が望まないかたちでの)キメラな状態でまかり通っていること、それが学習の障害になっていること、「オブジェクト指向」を限界を知ったうえで効果的に運用するには、これら2つがそれぞれどんなものかやその前提とするところを“個別”に正しく知っておく必要があるのではないか

確認すると、ここでいう「2つ」とは

  1. メッセージ指向”
  2. “抽象データ型のスーパーセット”(クラス指向)
である。

私見を付け加えると、この両者が「キメラ」でありえるのは、両者が異なるレベルの概念であったためである(前者は哲学・世界観レベルであり、後者は設計・実装レベルである)。

両者は別物であるが、決して直交しない。オブジェクト指向(1)の実現方法として、(2)の実装が存在する*1のは、矛盾を生じていない*2
そして、同時に、それ以外の実現方法――静的型のない Smalltalk、クラスに従属するメソッドを持たない CLOS、あるいは SELF や Io のようなクラスさえない*3――もあるということさえ、理解すればいい。
これが私の見解。

*1:むろん、Smalltalk に端を発する(1)の世界観を全うしているかは、別。

*2:問題は、あたかも(1)と(2)が同一であるかのように考え、そのためのこじつけをしようとすること。先述の信州大学のサイトも、メッセージ送信のメタファと抽象データ型に端を発するオブジェクト指向が、まるで同一であるかのような書き方をしている。抽象データ型の話をしていて、いきなり「メッセージ」なんて概念がヒョコッと顔を出す。これって、おかしいと思うのが普通。

*3:本当は、trait というクラスみたいな機構もあるようで。