オブジェクト指向のメモ

オブジェクト指向入門」みたいな記事でありがちな、CとC++の比較。C++ではクラスを定義する予約語があるのに対し、Cにはない。なので、C++オブジェクト指向プログラミング言語だけど、Cはそうではない。
ここで言語の法律家みたいな人たちが出てきて、間違いを正すよう要求する。「Cでもオブジェクト指向プログラミングはできる。それにむかしのC++は、いちどCに変換してからコンパイルしてたんだ。そんなことも知らないのか。」みたいな。
でも、Cでオブジェクト指向プログラミングができることくらい、記事を書くような人たちは知ってると思う。「入門記事で書く内容ではない」と判断しただけだろう。もっとも、指摘する人たちの気持ちもよくわかるけど。
では、オブジェクト指向プログラミング言語とそうでない言語との違いは何か。たぶん、「オブジェクト指向プログラミングをするための規則が言語で定められているか、またはプログラマが自分自身に課しているか」、すなわち「オブジェクト指向プログラミングをしやすくするための機能が言語にあるかないか」ではないかと思う。
ところで、オブジェクト指向というと必ず出てくる(と思う)のが「クラス」。クラスがないとオブジェクト指向じゃないみたいな感じさえするけど、決してそうじゃない。例えばクラスがないオブジェクト指向プログラミング言語だってあるし*1
でも、オブジェクト指向な開発方法論(といっていいのかはわからないけど)にクラスがないものってあるんだろうか。某社のRUPに詳しそうな人に聞いてみたら、「RUPは言語には依存しませんが、クラスは必須です。ほかのもたぶん同じでしょう。」とのことだった。
オブジェクト指向だと現実をシミュレートしやすいらしい。でも現実はクラスをもとにオブジェクトがあるわけじゃないと思う。クラスをもとにオブジェクトがつくられるんではなく、オブジェクトを文字どおり分類するためにクラスを考えているだけだ。C++Javaなどは現実の像なんかではない。
…なーんてことを某Webページを見ながら考えてしまいました。深い意味はありません。

*1:JavaScriptもその1つだけど、将来的には…。