俺がOOPを嫌う理由

忘れがちだが、ここの目的はちゃんと思考を文書化するということだった。
OOPが嫌いな理由を書いておこう。

OOPという用語の定義が人によって違う

さあ早く独自のOO論をブログエントリに上げる作業に戻るんだ!

そもそも、OOという単語がいろんな要素を含みすぎてるというのに問題がある

データとメソッドが密結合するのが許せない

データの定義とメソッドの一覧が一緒になっている理由はあまりない。

まあ、これは、まとまっているほうが見やすいか、ばらばらになっているほうが疎結合にできるか、という問題なので、どちらがよいとは言えないが…
個人的には、「言語としては疎結合」「IDEが見やすくしてくれる」のが美しいように思えるので、言語レベルではデータとメソッドがくっつかないほうがよいと思う。

抽象の極限はOOではない

C++のGeneric programmingや、HaskellのライブラリがOOではないことを考えると、OOでは究極の抽象化はできないように思うのだよな。
まあ、これについては、「それR○byでもできるよ」とかがあるので、気をつけないといけないが、そこらへんは、「OO」という単語の定義があいまいなのと関係してくるか。

OOの長所とOOの目指すところに一貫性が無い。

以上を踏まえたうえでも、OOにも長所はある

  • 広く知られている
  • 書籍が多い
  • デザインパターンなど、パターンがまとめられて、名前が付けられている

これらについては、「体系的な教育」、まあ、つまり、昨日までトラックの運転していた人が、今日からプログラム書けるようにする、という意味が強いと思う。

ここで、実際に「体系的な教育」を目指していればいいのだが、たとえばRubyの作者とかは、「初心者救済はあまり必要ない」(ちょっと言葉が違うかも)とか言ってるくらいなので、どうかと思う。


なお、ここで、初心者とは、「1年ぐらいプログラミングを勉強しているのですが、さっぱり理解できません」というかんじの人を指しており、「Ruby初心者だったけど3日で理解できたよ」という人のことではない。