This is version . It is not the current version, and thus it cannot be edited.
[Back to current version]   [Restore this version]
★このページは書きかけです

どのメソッドをどのクラスに記述するのかの原則は2つだけ#

例えば
  1. Aクラス
  2. Bクラス
という2つのクラスがある場合、
  • 両方の属性を参照しながら処理するメソッドはどちらのクラスに実装すべきなのか?
というのがこの章でのテーマです。
メソッドはパラメータ(引数)を持つので、必要なオブジェクトをパラメータで渡すようにすればどのクラスのメソッドとしても実装できてしまいます。しかしそれでは、
  1. 第三者が保守する時に解りづらい
  2. 仕様変更に弱い
という状態になりがちです。
保守しづらくなる理由は規則性がないからです。そして仕様変更に弱いのは、クラス間でオブジェクトを不規則に渡してしまうと、変更の影響が思わぬクラスに出てしまうからです。

原則は2つしかありません。
  1. コンポジット集約のような上下関係がクラスにある場合、必要な属性の最上位に当たるクラスのメソッドとする。
  2. クラスの関係が対等または並列である場合、第3のクラスを作ってそのメソッドとする。(Mediatorパターンの利用)
順に見ていきましょう。

必要な属性の最上位に当たるクラスのメソッドとする#

この原則は簡単です。受注伝票で考えてみます。
受注伝票は、商品ごとの受注個数と商品単価を明細として持ちます。この時、
  • ある受注における受注総額を返すメソッド
をどのクラスに実装すべきかを検討してみます。
クラス図は次です。
order3.png 受注総額を求めるためには、
  1. 各明細ごとの受注額を計算する(受注個数 × 商品単価)
  2. 全明細の受注額を加算する
  3. 受注額を返す
という流れになります。
関係するクラスは、
  • 金額
  • 受注個数
  • 商品単価
  • 受注明細
  • 受注明細一覧
  • 受注伝票
と6つありますが、受注総額を返すメソッドはどのクラスで実装するべきでしょうか?
答えは簡単で、
  • 関連するクラスのうち最上位のクラス、つまり受注伝票クラス
です。シーケンス図を見て下さい。 order_amount.png

添付ファイルの追加

ログイン済のユーザのみが添付ファイルをアップロード出来ます。

添付ファイル一覧

Kind Attachment Name Size Version Date Modified Author Change note
png
inventory.png 5.2 kB 1 03-1-2012 00:06 ytp
png
inventory2.png 1.9 kB 1 03-1-2012 00:07 ytp
png
order_amount.png 20.0 kB 1 09-1-2012 22:22 ytp
png
order_classes10.png 8.8 kB 1 09-1-2012 22:22 ytp
png
order_classes11.png 17.8 kB 1 09-1-2012 22:22 ytp
png
order_methods.png 14.2 kB 2 31-12-2011 22:38 ytp
png
receipt.png 6.1 kB 1 02-1-2012 21:25 ytp
png
receipt2.png 1.8 kB 1 03-1-2012 00:07 ytp
png
receipt_inventory.png 3.3 kB 1 03-1-2012 00:53 ytp
png
receipt_inventory_seq.png 11.5 kB 1 03-1-2012 20:17 ytp
« This particular version was published on 30-8-2011 22:20 by ytp.