オブジェクト指向設計実践ガイドを読みました

こんにちは、ミツバです。 今回は、以下の本を読みました。 ここでは、学びのあった部分を軽く触れておきます。

gihyo.jp

単一責任のクラスを作る

後述するコンポジションと近そうな話ですが、バイクがパーツの計算を持っているより、パーツをクラスとして切り出して管理した方がバイクはパーツのことをあまり知らなくて済むので楽だったりします。

デメテルの法則

直接関係のある隣のオブジェクトまでしかメッセージを送らない手法。 仮に二つ以上隣のものとメッセージを送り合っていると、その分密結合になってしまい、メンテが大変だったりします。

継承、モジュール、コンポジションでの柔軟な設計

それぞれis-a, behaves-like-a, has-a関係に利用できます。

それぞれの特徴

  • 継承は、抽象的なものを一つ考え、それの派生物を作成できます。
    • 本書では、自転車とロードバイクなど派生物を表現するのに利用されていました。
  • モジュールは、ロール(物)として別の扱いのものに共通の振舞いを与えることができます。
    • 本書では、スケジューリングが必要なものに振舞いを与えるために利用されていました。
  • コンポジションは、あるロールが持っている物を表現できます。
    • 本書では、自転車のパーツを表現するために利用されていました。

どういう時に利用するか

継承

基本的には、型による条件分岐が発生した時などはその分岐を消すことが可能です。本書では、バイクとロードバイクで処理を切り換えるみたいなことをしようとした時に、継承を用いて振舞いをクラスごとに実装することでその条件分岐を消せます。

モジュール

既存のクラスに振舞いを追加でき、後からでも柔軟に導入、変更が可能です。

コンポジション

has-aの場合は、基本利用したら良さそうですね。

まとめ

最初はRubyに慣れず読むのを断念してしまっていましたが、少し慣れた状態で読むことで理解度も上がり楽しく読めしました。 Rubyを利用して開発している人は、少し慣れた段階で読むのが良いかもです。 ぜひ。