Matzさんがこう言うのは以外な気がする。

Matzにっき(2006-01-20)
実際には、オブジェクト指向プログラミングは、構造化プログラミングの「次」と 認識されるべきものだと思う(OOAやOODのことは知らんけど)。

というのも、「オブジェクト指向」は「構造化」の進化系ではなく、元来直交して扱える概念だからだ。

実際smalltalkやhypertalk、そしてsqueakといったプログラミング環境では、オブジェクトはフィールドとかボタンとかといった、「もろに目に見える」「実存」であり、それ故まだものごとを抽象化して捉えることの出来ない子供でも始められるようになっている。

実はすでに適切に設計され、目に見えるようになったオブジェクトが用意されている環境においては、むしろオブジェクト指向というのは構造化の「次」ではなく「前」に来るパラダイムなのではないか?

にも関わらず、オブジェクト指向が「大人の」プログラミングにおいては構造化の「次」と認識されるのは何故だろうか?

オブジェクト指向プログラミングもそれと同じレベルである。 (インテリジェントな)データを用意し、それを中心にプログラムを構成する。 あくまでもプログラムの構成方法だということを認識すれば、 どんな構成をするかでわかりやすさや保守しやすさ、あるいは開発効率に影響が出るにしても、 できないことができるようになるわけではないということを認識するのはそんなに苦ではないのではないか。

ここにヒントがある。オブジェクトというのは、「使う」のは簡単でも、「作る」のは大変なのだ。実はそこがオブジェクト指向プログラミングの醍醐味でもあるのだが、ものごとをどう抽象化し、何を同じクラスにまとめ、何を継承させ何を合成させるのかといったレベルにおいては、設計者のセンスが問われる。そしてその過程において、構造化プログラムの知見は大いに役に立つ。

やねうらお−よっちゃんイカを買いに行ったついでに家を買う男 - オブジェクト指向神話
それは半分は当たっているのだけれど、半分は外れていた。OOAやOODを重視し、クラス設計を行なう人が、まともに「動くプログラム」すら書けないことが現実的には多々ある。「動くプログラム」が書けないのでは当然お金はもらえない。そういった業界の不思議に直面して考えが変わった。そもそも現実世界をソースコードにモデリングすることなど出来ないし、そもそもモデリングすることにどのくらい意味があるのだろうかと考えるようになった。

例えば数値を扱うクラスというのは、適切に設計するのがなかなか大変なものの一つだ。整数オブジェクトと浮動小数点オブジェクトの関係は?division by zeroの例外はどう扱う?無限精度(bignum)はどう盛り込む?この辺は大変なところでもあり、そして一番面白いところでもある。matzさんもrubyの実装で大いに苦労されそして楽しまれたことと思う。

しかし、一旦適切に設計されたオブジェクトを使うのは本当に楽だ。rubyに至っては普通の「数値」としてもきちんと使えて、オブジェクト指向のオの字もない人でも自然に使えるようになっている。使うは易し、作るは難しというのがオブジェクトなのかも知れない。

一つ言えるのは、オブジェクトは使ってなんぼ、ということである。だから「クラス設計を行なう人が、まともに「動くプログラム」すら書けない」というのが私には信じられない。CPANのモジュールは過半がOOPだが、クラス定義しているモジュールだけではなく、その説明書(POD)とテストプログラムの添付が事実上必須となっている。「自分で作ったドッグフードを食え」という格言がこの業界にはあるが、ことオブジェクトに関してはこの格言が強く「味わえる」ように思う。

オブジェクトに始まり、構造化を経てオブジェクトに戻る。この過程はプログラマーの発展経路としては極めて健全だと思われる。しかし最初の「オブジェクトに始まり」を見落としてしまうのはなぜなのだろう?我々のほとんどがまだ歩けなかった幼少の頃を忘れてしまうのと同じことなのだろうか?

Dan the Subjectively Object-Oriented Man