Island Life

< CVS管理してるもの以外のデータは以前は... | 劇的な人生:The Peekaboo Paradox... >

2006/01/28

プログラミングパラダイム及び言語の進化ってのは、 複雑すぎでそのままでは人間の頭に入りきらない問題をいかにして 頭に入りきる大きさに収めるかという試みに他ならない。構造化も抽象化も カプセル化も、そのための道具だ。

オブジェクト指向の出自は現実の世界のモデル化にあったはずだが、 ある時、それが「簡易抽象データ型+簡易名前空間+簡易クロージャ」として 使えることに誰かが気づいた (誰が最初に気づいたかは知らないけれど 広めたのはStroustrupだろう)。これらの概念はそれぞれが、 モジュラリティの高いプログラミングに使える道具であり、 問題の複雑さを整理するのに役立った。で、後者の方が広まってしまった。

オブジェクト指向がわかりにくいとされる理由の一端は、 このような経緯にあるのだろう。 小飼さんが「『オブジェクト指向』は『構造化』の進化系ではなく、 元来直交して扱える概念」という時、それは出自に遡ってとらえている。 一方、プログラミングパラダイムの方から見ると、構造化の後でたまたま 「使える」概念として出てきたのがオブジェクト指向だったわけで、 Matzさんの「実際には、オブジェクト指向プログラミングは、 構造化プログラミングの『次』と 認識されるべきものだと思う」というのは そっちの立場なんだと思う。

後者が広まったのはC++のせいもあるが、旧来のプログラミングに 慣れていた人々が現実のモデル化というのを具体的にイメージするには、 Smalltalkのような環境が無いと難しかった、ということもあるのではなかろうか。 私自身は、アセンブラでちょっと面倒なプログラムを書いてて スパゲティになってしまった時に、伝え聞いていた「データと手続きを 一緒にして、オブジェクト間のメッセージパッシングでプログラムを記述する」 という手法を試してみたらびっくりするほどすっきり書けて、 ああこれが巷でいうオブジェクト指向というやつなのかと納得した 覚えがある。つまり方法論から入ったわけだ。C++どころかCもろくすっぽ 知らなかった頃だ。もしCを使い込んでいてC++に触れて、 構造体の延長として抽象型もどき、名前空間もどき、クロージャもどきを 手に入れればこりゃ便利だと思っただろう。

上で「簡易」とか「もどき」とか言っているのは、初期のC++が提示した それらは結局本来の概念の代用、もしくは一次近似に過ぎなかったからだ。 それ自体は悪いことではない。 それも一種のモデル化(それも、結構使えるモデル化)だから。 ただ、言語の限界を押し広げるように使ってゆくといつか近似はほつれてきて、 不満が出てくる傾向はある。テンプレートを導入したり名前空間を別に入れたり、 あるいは無名クラスやデリゲートやらと言っているのは、 ほつれを何とかしようとして近似の度合を二次、三次と上げているようなものである。

Tag: Programming