"Practical Object-Oriented Design in Ruby"という本をご存知ですか?
http://www.poodr.com/
未邦訳ですが、自分はこれを夜な夜な読むことで、初めて"オブジェクト指向プログラミング"とは何か、勉強するスタートポイントに立てた気がしました。
ちなみに "POODR" と略すらしいです。
追々、本を読んで学んだことを順序立てて構成していきます。
最初は、本の中で最も強調されていたことから紹介させてください。
OOPとは、オブジェクトが相互にメッセージを送ることである
なぜなら、プログラムは、以下の二つの無関係、もしくは矛盾する要求に応えなければいけないから。
- プログラムが、今後の(現時点では決して分からない)変更に耐えうる仕様になっていること
- その段階で利用者がもっとも使いたい形で提供されていること
OOP is all about "Objects sending messages each other"
cuz, optimization for program to adapt unexpected changes differs from optimization for a user to use that service at the most desirable context "at that time".
つまり、
- 利用者が使いたい文脈に沿って、
- 壊れにくい再利用しやすい形でつくられたオブジェクトが相互に動くのが、
- オブジェクト指向で取り組むべき設計。
この前提で、オブジェクトが持つ構造(クラス、メソッド、アトリビュート)などが紹介されています。
本の中では、まずはクラス構造という静的なものが理解しやすいということで紹介が始まりますが、
繰り返し章を重ねて語られる中で、こういった動的な振る舞いでの再説明がなされています。
ちなみに..
POODRの著者である __Sandi Metz__さんは、"Sandi Metz Rule"として、あなたのコードをオブジェクト指向へと「矯正」する方法を紹介しています。
http://tech.a-listers.jp/2013/05/20/sandi-metz/
これを実際に実践した thoughtbot社(FactoryGirl Gemの開発元です)は、「ルールを取り入れる実験は成功だった」として、自分たちのベストプラクティスドキュメントに取り入れたということです。