ツッコミ、リンク、Trackbackなどいろいろな反応をいただく。たださんishinaoさんMimoriさんで、考えたのが、「オブジェクト指向が難しいと思われる原因は、難しいというイメージそのもの」ではないかと。「オブジェクト指向」のもっとも重要な概念は通常のプログラミングにも登場している。"r");という呼び出しは「pathにあるファイルをオープンして、ファイルオブジェクトを得る」という処理そのものだ。別にオブジェクト指向は必要ない。CのFILE*にはfprintf()やfclose()などのいくつかの「メソッド」がある。「オブジェクト」という概念は存在していて、無意識のうちに使っているはずなのだ。このことは別に目新しいことでもなんでもない。K&Rにも「オブジェクト」という用語が使われている。多くの言語には「オブジェクト」でない「値」もある。Cの例を出すと、構造体はオブジェクトではない。代入によってコピーが発生するからだ。BASICの文字列もオブジェクトではない。すべての値がオブジェクトであるRubyのようなオブジェクト指向言語の方が覚えることは少ないはずだ。ほら、やっぱり「オブジェクト指向は難しくない」。「単なる値」という考え方の方になじんでおり、リファレンスの方は十分に理解されていないらしいのだ。世の中に「ポインタ解説本」が登場する理由でもある。ふたつの考えのうち、ひとつが消えて単純になったはずなのに、残ったのは苦手な方だったと。早いうちにLispやRubyやPythonなど、「すべての値がオブジェクト」型の言語を身に付けておくべきではないかと。逆よりも幸福になれそうだ。オブジェクト指向で2番目に重要な概念も通常のプログラミングに登場している。2番目に重要な概念とは「動的結合」あるいは「多態(ポリモルフィズム)」である。非オブジェクト指向言語にも引数のデータ型に応じて適宜処理を行ってくれる関数があるものもある。私が知っているのはLispだが、BASICなどもにあったような気がする。オブジェクト指向言語と呼ばれるものは、そのような手続きを自分で定義できるようになっただけだ。ほら、やっぱり「オブジェクト指向は難しくない」。「多態」を理解していれば「継承」も難しくないはずだ。現実世界にも結構ある関係だし。実際のプログラミングにどう使ったらよいのかわからないという点はあるかもしれない。「差分プログラミング」同様、オブジェクト指向解説書の罪と呼べるかもしれない。『オブジェクト指向スクリプト言語Ruby』では、私も同じ罪を犯しているけど。ドキュメントを探すのが面倒という点だ。あるオブジェクトのメソッドについて知りたい時、そのオブジェクトのクラスを調べそのクラスのドキュメントを読みなければスーパークラスを調べ見つかるまでObjectクラスまでさかのぼりまだなければincludeされているモジュールを順に探すという手順を踏まなければならない。なんらかの支援が必要だ*1。Eiffelにはshortとかflatとかいうツールがあり、前者はクラスの仕様だけを抽出し、後者はクラスの継承関係を展開してくれる。これでドキュメントを探し回る苦痛が軽減される。人間が自分で探すことを比べれば、はるかに楽だ。行ずつ読み込んで繰り返すイテレータ。指定した文字列になります。指定すると行区切りなしとみなします。(パラグラフモード)。