「オブジェクト指向神話」という言葉があるらしい。 こことか、 こことかで見受けられる。
要するに「オブジェクト指向は万能ではない」 または「適材適所」という話なので、一般論としては異論はない。 私がいくらオブジェクト指向プログラミングの長年のファンだからといって、 「万能」だとか「魔法の薬」、「銀の弾丸」のようになんでも解決すると主張するつもりはない。
だが、実際にこれらのブログエントリにおいて 「オブジェクト指向に向いていない」とされているのはなんなのだろうか。
読み進めているとこういう記述にぶち当たる
OOAやOODを重視し、クラス設計を行なう人が、まともに「動くプログラム」すら書けないことが現実的には多々ある。...(中略)...そもそも現実世界をソースコードにモデリングすることなど出来ないし、そもそもモデリングすることにどのくらい意味があるのだろうかと考えるようになった。
[オブジェクト指向神話より引用]
ふむ、「モデリング」ね。いつから「オブジェクト指向=モデリング」になったのだろうか。 この辺が「神話」なのかな。 この日記に引用されているように、ナップザック問題を解くのに、ナップザックやら缶詰やらのクラスを作るだけでは、問題は解決しないだろう。 しかし、逆にプログラム中でナップザックやら缶詰やらを表現する「なにか」を用意しなければ、 問題を解決することはできないだろう。オブジェクト指向はその部分を支援するものであり、 それ以上ではない。
よって、これは「オブジェクト指向の問題」ではない。
では、これが「神話」と呼ばれるということは、 「オブジェクト指向で問題解決」というイメージがいまだに存在しているということなんだろう、たぶん。
実際には、オブジェクト指向プログラミングは、構造化プログラミングの「次」と 認識されるべきものだと思う(OOAやOODのことは知らんけど)。
プログラムの開発に構造化プログラミング(乱暴な言い方をするなら、gotoを使わない、データ構造を意識する、など)を導入することと、問題の解決を混同する人はいないだろう。構造化しようとしまいとプログラムが必要なことには変わりないのだ。
オブジェクト指向プログラミングもそれと同じレベルである。 (インテリジェントな)データを用意し、それを中心にプログラムを構成する。 あくまでもプログラムの構成方法だということを認識すれば、 どんな構成をするかでわかりやすさや保守しやすさ、あるいは開発効率に影響が出るにしても、 できないことができるようになるわけではないということを認識するのはそんなに苦ではないのではないか。
正直なところ、20世紀によく見かけた「オブジェクト指向幻想」はもうそろそろ収まっているのではないかと 認識していたのだが、まだ「オブジェクト指向神話」なんて表現を目にする現状では あらためて強調しておいた方が良いのかもしれない。
そして、21世紀の今、わざわざ構造化プログラミング重要と叫ぶ必要がないのと同じように 近い将来、わざわざオブジェクト指向プログラミングがどうこうと言わなくても 当たり前になるのだと思う。一部の特殊な状況を除いて。
もうとっくになっててほしかったんだけど。
言語デザイナーはもうそのことに気づいている。 だいぶ前から新しく登場する言語は(一部の例外を除いて)みんなオブジェクト指向言語だ。 この「常識」がすみずみにまで到達するのに何年掛かるだろうか。
「オブジェクト指向神話」神話 http://www.rubyist.net/~matz/20060120.html#p01 「オブジェクト指向は万能ではない」という(当たり前の)事が言われて久しいですが、いまだに「オブジェクト指向は万能ではない」→「オブジェクト指向否定」という議論が通ってしまうこと..
「オブジェクト指向神話」神話 Matzにっき(2006-01-20) あえて私見...
http://www.rubyist.net/~matz/20060120.html#p01 マッチポンプと言う奴ですな. 最初に「オブジェクト指向とはモデリングだ!モデリングを極めることがオブジェクト指向を極めることだ!」((これが,捏造された『オブジェクト指向神話』.))と言っておいて,あとから「オ..
構造化プログラミングのことが話題にならないのは構造化プログラミングの次=オブジェクト指向がでてきたからではないでしょうか。
オブジェクト指向は構造化プログラミングが(暗黙の)前提(というか基礎というか常識というか)になっているのでしょう。
オブジェクト指向の次(って何)が出てきてその中でオブジェクトが常識になる、ということはないでしょうか。
しかし一番の原因はオブジェクト指向は関数とか単純なデータ型とかの概念からすると理解しにくいものだからだと思います。
(私は構造化プログラミングのなんたるかもよくしらないなんちゃってプログラマです)
実はまつもとさんも微妙に危険な領域を歩いてるような気がします。「あえて乱暴に言うならgotoを使わない」という、ここなんですが。
かつてgoto文論争が不毛に終わったのは、分かってる人は乱暴に言ってるだけなんだけど、分かってない人がそれをバカ正直にとった所から始まったんじゃないでしょうか?前回のJava論争もそうなんですが、「実は構造化プログラミングすらよく理解されていない」という可能性の方が気になります。
オブジェクト指向神話が終焉を迎えたとして、その先には「モデリング神話」やら「XML神話」やらが積み重なるような。
神話が繰り返し発生するのは仕方がないでしょう。避けようがありません。
楽な救いを見いだしたいのは人間の本能のようなものですし、それを煽りたてるマーケティング用語は次から次へと発生するでしょう。
「オブジェクト指向」の不幸はその定義があいまいだったこともありますが、純粋な技術タームとして生まれたのに、マーケティング用語として使われてしまったことにあるように思います。「構造化プログラミング」はやや不毛なgoto論争はありましたが、そういうマーケティングに使われなかっただけマシ立ったのではないかと思います。
もうそろそろ「オブジェクト指向」というタームにマーケティング的価値はなくなったと思うので、「構造化プログラミング」程度のポジションに戻してやってもよい頃ではないでしょうか。
「本物のプログラマは Pascal を使わない」という言葉は、
ある種の呪いのように長く効果があります/したね。
「分割して統治する」ことを説明しやすい警句があるとよいのですが。