>発散していてどこにつけていいかわからないので新規投稿。
ここにまとめレス。
> たとえば、以下のページでは、
>
http://www.shiro.dreamhost.com/scheme/trans/reesoo-j.html
> オブジェクト指向言語の要件を箇条書きにしたうえで、
極論、この一覧の要件をひとつでも満たせば、あるいは、ここに無いけれど何か妥当っぽい特徴を持っていれば、そして、その言語がオブジェクト指向であると主張すれば、それはオブジェクト指向になってしまうのかもしれない。
この一覧には
> 全てはオブジェクトなり - 全ての値はオブジェクト。Smalltalkでは真だが、 Javaでは (int等のため) 真ではない。
とある。「オブジェクト」の定義にもブレがあるだろうが、これに従って解釈すると、
> int i;
> int j;
> これでマルチプルインスタンス、ってのはヒネクレ過ぎ?
これを Java のコードとして見るならば、i や j はインスタンスではあるがオブジェクトではないのだろう(i や j をオブジェクトと呼ぶときの「オブジェクト」と、「オブジェクト指向」の定義を語るときの「オブジェクト」は意味が違うのは明らかだしね)。
> カプセル化のない(今はあるんでしたっけ?)のPythonとか、
> メソッドとオブジェクトを実行時にくっつけるPerlとか、
> メソッドとオブジェクトが直接関連していないCLOSとか…
うーん…それらの言語については、というか、C++ / C# / Java あたりの C ファミリーしか私は知らないんですが。
ただ、前に述べたとおり、Win32 API のメッセージアーキテクチャはオブジェクト指向なので、「メソッドとデータの結合」は必須要件ではないんだろう。
> Simulaは、むしろC++に近い言語だという認識です。
コードを見た感じ、そうみたいですね。
どうも私は(偏見というか思いっきり間違いなのですが)Simula と Smalltalk を同一視してしまう。
Smalltalk はオブジェクト指向云々以前に関数型言語なので、C++ や Java とは同列で比較しにくいものがあるけれど。
> 全メンバが static なクラスってのを使います。
> 拡張性0ですがこれも立派なクラスだと思っております。
> 「自分にできることを自分自身が知っている」のがOO
確かに。
でも、(static メンバでもいいから)何らかのデータを持っていないと、それはクラスだけどオブジェクト指向とは言い難いような気がします。
「自分」ってのは「データ」のことだと思うから。