memo.log

技術情報の雑なメモ

『オブジェクト指向設計実践ガイド』第4章メモ

第4章のメモ。 第4章はクラス間のメッセージに焦点を当てた設計方法。とてもおもしろく、勉強になったのだが、サンプルコードがほしいところだった。読みながら図4-5 ~ 4-7 をコードにおこしてみたのだが、こんなイメージかしら?

# 図 4-5
class Trip
  @bycycles
  mechanic

  # 旅行が開始されるために、使われる自転車がすべて整備されていることを確実にする
  def prepare_trip
    @bycycles.each do |bike|
      mechanic.clean_bycle(bike) # 自転車を洗浄する
      mechanic.pump_tires(bike) # 空気を入れる
      mechanic.lube_chain(bike) # チェーンに油を差す
      mechanic.check_brakes(byte) # ブレーキをチェックする
    end
  end
end

# 図4-6
class Trip
  @bycycles
  mechanic

  # 旅行が開始されるために、使われる自転車がすべて整備されていることを確実にする
  def prepare_trip
    @bycycles.each do |bike|
      mechanic.prepare_bicycle(bike)
    end
  end
end

# 図4-7
class Trip
  @bycycles
  mechanic

  # 旅行の準備が必要なことに自転車が必要なことすら知らなくて良い
  def prepare_trip
    mechanic.prepare_trip(self)
  end
end

クラスに基づく設計から、メッセージに基づく設計への移行が、設計者としてのキャリアの転機となります。

.

メニューを使えば、厨房が「どのように」料理をつくるかは一切感知させずに、「何を」望むかをお客さんに頼ませることができます。[...]自身の書くクラスはそれぞれが厨房のようなものです。

.

旅行が準備されなければいけないという知識は、間違いなく、そして正当に、Tripの責任の領域です。しかし、「自転車」が必要だという事実は、おそらくMechanicの領域に属します。

.

Tripは単にprepare_trip を送るためのオブジェクトを保持しているだけです。このメッセージの受け手を信頼し、適切に振る舞ってくれることを期待しています。この考えをさらに広げてみましょう。Tripはそのようなオブジェクトを配列内にいくつもおいて、それぞれにprepare_trip メッセージを送ることもできそうです。このとき、Tripは準備してくれるオブジェクトが何をしようとも、そのオブジェクトを信頼しています。準備をしてくれるオブジェクトがやることだからです。