yanom blog

様々な技術について書きます

オブジェクト指向設計実践ガイドが良い

最近は、技術評論社から出版されているオブジェクト指向設計実践ガイドを寝る前に読んでいます。 実践ガイドと書いてあるだけに、オブジェクト指向の考え方ではこうするという具体的な話が分かりやすく書いてあります。
また、サンプルコードはRubyで書いてありますが、Rubyを知らない方でも分かる内容となっています。
まだ、4章の途中までしか読んでいませんが、メモがてらに記載します。
2020/07/13 8章まで読んだので追記しました。

目次

  • 第1章 オブジェクト指向設計
  • 第2章 単一責任のクラスを設計する
  • 第3章 依存関係を管理する
  • 第4章 柔軟なインターフェースをつくる
  • 第5章 ダックタイピングでコストを削減する
  • 第6章 継承によって振る舞いを獲得する
  • 第7章 モジュールでロールの振る舞いを共有する
  • 第8章 コンポジションでオブジェクトを組み合わせる
  • 第9章 費用対効果の高いテストを設計する

第1章 オブジェクト指向設計

第2章 単一責任のクラスを設計する

  • クラスを単一責任にする重要性、必要性をサンプルコードを交えて解説してあります。また、サンプルは自転車を題材に書かれています。
  • 一つことを専念するクラスを作ることによって、変更が容易になりメンテナンス性の高いソフトウェアを作ることができます。(当然それだけでは不十分ですが)

第3章 依存関係を管理する

  • この章では、オブジェクト間の依存関係を理解し、疎結合なコードの書き方を解説しています。
  • 依存関係を理解する。次のものをオブジェクトが知っているとき、依存関係がある。
    • 他のクラスの名前
    • self以外のどこかに送ろうとするメッセージ
    • メッセージが要求する引数
    • 引数の順番
  • 疎結合なコードを書く
    • 依存オブジェクトの注入(DI)
    • 引数の順番への依存を取り除く
  • 依存方向の管理

第4章 柔軟なインターフェースをつくる

  • ここでのインターフェースとはクラスが持つパブリック/プライベートなメソッドの事を意味しています。
  • パブリックインターフェースとは、クラスの主要な責任を明らかにする。変更の可能性が低い。十分にテストされている。といったもの。
  • プライベートインターフェースとは、実装の詳細に関わる。容易に変更される可能性がある。テストされていない可能性がある。といったもの。
  • また、インターフェースを見つけるのにシーケンス図を活用しようと書かれており、個人的になるほど。と思いました。必要なオブジェクトとメッセージの受け渡しを簡潔に図示することができるためです。

第5章 ダックタイピングでコストを削減する

  • ダックタイピングで共通の振る舞いを定義し、何をするかを露わにする。
  • 抽象に依存することで、より柔軟なコードを書く。

第6章 継承によって振る舞いを獲得する

  • いくつもの共通の振る舞いを持つものの、いくつかの面においては相違もある型では、継承が使えるかもしれない。
  • テンプレートメソッドパターンを使う。
  • フックメソッドを使って、superの送信をなくす。

第7章 モジュールでロールの振る舞いを共有する

  • 継承では解決できない問題について理解する。
  • 継承関係ではないが、共通の役割(ロール)がある場合には、モジュール化する。
    • 本誌では、Bicycle/Vehicle/Mechanicオブジェクトに対して、スケジュール可能であるというロールをモジュールを使って担わせています。

第8章 コンポジションでオブジェクトを組み合わせる

第9章 費用対効果の高いテストを設計する