OOスレ6 なぜオブジェクト指向は普及しないのか

このエントリーをはてなブックマークに追加
311仕様書無しさん
>>303
> SmallTalkでの整数演算"1 + 2"はオブジェクト"1"に"+"というメッセージを送って
> その引数は"2"という意味の記述だそうだけど、

こまかいことですが、1 + 2 は、1 への「+ 2」というメッセージの送信と解釈します
(メッセージは「+」ではなく「+ 2」、ということ)。ちなみにメッセージ「+ 2」のうち、
「+」がセレクタで「2」が引数です。つまり、メッセージはひとつのセレクタと
ゼロ個以上の引数からなる、ということになります。さらに便宜上セレクタは、
メッセージの送信の結果、コールされる(…ことが期待される)メソッド名と一致します。
したがって、1 + 2 では、1 の属する SmallInteger に定義された + という名前の
メソッドが引数として渡された 2 を伴ってコールされます。

> 「"+ 2"という情報を"1"に伝達する機能」はオブジェクトとして表現出来るのか?
Smalltalk はここいらへんがいい加減というか妙なところで現実的というかで、実装上は
たんなるメソッドの動的な呼び出しをしているだけで、実際にはメッセージは送って
いません(ただ例外として、メソッドが見つけられずそのコールに失敗したときに、メッセージに
含まれる前述の情報である「セレクタ」と「引数」をラップしたメッセージっぽいオブジェクトが
自動生成されることがありますが、これはメッセージングが意味するところとはほど遠い
ものなのでここでは無視していいでしょう)。

ではメッセージをちゃんとメッセージ(オブジェクト)として実装している言語はないか
というとそんなこともなくて、古くは、メッセージングのOOの影響を受けて作られた
ACTOR という言語(これは、メッセージングのOOから派生したアクター理論に基づいて
作られました)では、メッセージもちゃんとオブジェクト(ACTOR ではアクターと呼ぶ)で
表わされていましたし、最近の言語なら Io という言語で、同じくメッセージは
実体のあるオブジェクトとして内部的にも表現されている、という例があります。でも希有です。

繰り返しになりますが、こういうところは Smalltalk は建前ばかりで、中身はいいかげんです。