感想:オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方
Rubyで初めてのオブジェクト指向なら本書!
あなたのメイン言語がRubyで、オブジェクト指向を学んだ事がないなら、本書はオススメです。
本書は、「簡潔で見通しが良く、変更が容易な設計」と「アンチパターンと呼ばれる設計」との違いを教えてくれます。やや回りくどい文章で翻訳されていますが(恐らく原文も回りくどい)、本書の価値を落とすレベルではありません。
構成は、自転車に関するクラスに対して機能拡張を繰り返し、実装を適宜リファクタリングして、より良いオブジェクト指向が何かを教える流れです。機能拡張時に、私達がやりがちな安易な実装(アンチパターン)を多く示します。「アンチパターンの何が悪いか」や「未来の設計者に与える影響」を説明した後に最適解を示す形式なので、内容に共感しやすいです。
中級者へのメリットは、ベストプラクティスの言語化
本書は中級者にとってもメリットがあり、私達が曖昧に理解しているベストプラクティスを上手に言語化してくれています。例えば、私は本書を読むまで、「どのようにしてオブジェクト間の依存関係を認識するか」という方法論(コード確認の方針)を言語化できませんでした。そのため、今まではクラス図とコードを見て何となく複雑だから分離するか、と考える程度でした。
本書では、依存関係が強固な場合は複数のオブジェクトが1つのユニットと振る舞う、と書かれています。そのため、依存が強いオブジェクトへの修正が広範囲に影響します。この点を踏まえて、本書では、オブジェクト間の依存関係を調査する場合、オブジェクトが以下の4項目を知っているかどうかを確認すれば良いとしています。
- オブジェクトが、他のクラス名を知っているか
- オブジェクトが、self以外に送ろうとするメッセージ名を知っているか
- オブジェクトが、メッセージの要求する引数を知っているか
- オブジェクトが、上記の引数の順番を知っているか
上記の4項目に修正が入れば、それらに依存するオブジェクトに修正が及ぶのは、容易に想像できます。このように、私達が経験則で感じていた事柄を理由づけながら説明しているため、本書を読めば設計観点が強化されていくのが実感できます。また、設計時の方針も併記されています。例えば、依存関係に着目した場合、本書では「(クラス作成時に)自身より変更されないものに依存するようにする(依存方向の選択)」と方針を立てています。
もし、あなたが依存関係にとどまらず、単一責任、柔軟なインターフェース、費用対効果の高いテストという用語を具体的な言葉で説明できない場合は、本書の対象者になります。読めば設計力が上がること、間違いなしです。
他言語でオブジェクト指向を学習した人には不要かも
オブジェクト指向は、C++/Javaを始めとして、多くの言語で用いられる設計技法です(C言語ですら、概念を導入しています)。もう既に語り尽くされた感があり、古参エンジニアはオブジェクト指向に一家言があると思われます。そのため、本書で新たに学び直す必要性が薄いかも知れません。
オブジェクト指向は突き詰めれば、リファクタリングと密接な関係があります。例えば、以下の書籍の表題はリファクタリングですが、内容はオブジェクト指向のベストプラクティスに関してです。
感想:新装版 リファクタリング 既存のコードを安全に改善する
エンジニア歴が長い方は上記の書籍を読んでいる可能性が高く、そのような方が本記事でレビューした本(Rubyの本)を改めて読む必要があるかと言われれば、”No”です。本書(Rubyの本)の目次を見てピンとこなければ、無理して読む必要はないと思われます。
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。
3件のフィードバック
[…] Review:オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟… […]
[…] Review:オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟… […]
[…] 感想:オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟… […]