石橋秀仁です.

At Thu, 27 May 1999 18:47:31 +0900
  matz / netlab.co.jp (Yukihiro Matsumoto) wrote:

> |そうですね. CRCのようなロールプレイイング(各人が各オブジェクトの
> |役割を演じる)をすることで, 「オブジェクトがメッセージを交換しつつ
> |仕事が進む」というイメージがつかめると思います. ただし,
(省略)
> このロールプレイイングってのはすごく良いと思います.気を付け
> なくてはいけないのは,オブジェクトというのは「もの」そのもの
> というよりも,「もの+黒子」であることです.
> 
> バナナはひとりでに皮をむかないけど,バナナオブジェクトは「皮
> をむけ」メッセージを理解するでしょう,ということ.

そうなんですよね. 入門者向けの本とかで, りんご(apple)の属性は
「色」, 「重さ」などで, 機能は「食べる(eat)」, とか書いてあるんです.

で, 「りんごが食べる(apple eats)」ってなんじゃ〜って思いました.

現実世界で能動的役割を果たさない「もの」に, むりやり機能/メソッドを
与えるというのもムチャクチャな話だと思います. この例では, 「ひと」,
「りんご」があって, 「"ひと" "eats" "りんご"」という(OO用語での)
関連を使った分析が自然だと思うのです.

もちろんソフトウェアの要求(requirements)によって, 分析の精度も
かわってくるので, まつもとさんの例がダメだというわけではないです.
現実の分析/設計としてはありえますから.

# 分かりやすい違いは, 再利用性に現れますね.
# でも再利用の計画が無い場合の設計ならそれでもいいと.

ですが, 初心者に対しては概念(concept; 分析時のクラス)だけの
説明がいいのではないかと. つまり, 設計(ソフトウェアとして
実現する手段)を無視した分析がいいと思うのです.

そして, 設計を無視した「分析」の成果物に対して, ソフトウェアで
実現するための「設計」をおこなうと. OO開発プロセスの特徴は
スパイラルモデルですが, ここでは分析と設計と実装はぶった切って
しまおうと.

# じゃあウォーターフローモデルじゃん(笑)という突っ込みはナシ(^^;

---
Hideto Ishibashi <http://vip.cis.kurume-nct.ac.jp/%7Es34204/>