俺がOOPを嫌う理由
忘れがちだが、ここの目的はちゃんと思考を文書化するということだった。
OOPが嫌いな理由を書いておこう。
データとメソッドが密結合するのが許せない
データの定義とメソッドの一覧が一緒になっている理由はあまりない。
まあ、これは、まとまっているほうが見やすいか、ばらばらになっているほうが疎結合にできるか、という問題なので、どちらがよいとは言えないが…
個人的には、「言語としては疎結合」「IDEが見やすくしてくれる」のが美しいように思えるので、言語レベルではデータとメソッドがくっつかないほうがよいと思う。
抽象の極限はOOではない
C++のGeneric programmingや、HaskellのライブラリがOOではないことを考えると、OOでは究極の抽象化はできないように思うのだよな。
まあ、これについては、「それR○byでもできるよ」とかがあるので、気をつけないといけないが、そこらへんは、「OO」という単語の定義があいまいなのと関係してくるか。
OOの長所とOOの目指すところに一貫性が無い。
以上を踏まえたうえでも、OOにも長所はある
- 広く知られている
- 書籍が多い
- デザインパターンなど、パターンがまとめられて、名前が付けられている
これらについては、「体系的な教育」、まあ、つまり、昨日までトラックの運転していた人が、今日からプログラム書けるようにする、という意味が強いと思う。
ここで、実際に「体系的な教育」を目指していればいいのだが、たとえばRubyの作者とかは、「初心者救済はあまり必要ない」(ちょっと言葉が違うかも)とか言ってるくらいなので、どうかと思う。
なお、ここで、初心者とは、「1年ぐらいプログラミングを勉強しているのですが、さっぱり理解できません」というかんじの人を指しており、「Ruby初心者だったけど3日で理解できたよ」という人のことではない。