[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 11674] Re: 今月号の JavaWORLD 誌にボーリングのスコア 計算プログラム



高橋(徹)です。

   ""TAKAHASHI, Tomohiro" <t_takahashi@xxxxxxxxxxxxxx>"さんは書きまし
た:

>   今月号のJavaWORLD誌を見ていましたら、昨日「アジャイルソフトウェア
> 開発の奥義」で読んだ「ボーリングのスコア計算プログラム」の設計に関
> する記事が掲載されていました。
昨日発売の2005年2月号では設計まで、来月発売の3月号で実装を取り上げる
そうです。いわゆるオブジェクト指向設計の王道のようなアプローチでスコア
計算プログラムを設計しており、以下のようなクラス図が設計の最終形として
出されています。
+------+      +------+	   +---------+
| Game |◇----|Frame |<|---|LastFrame|
+------+      +------+	   +---------+
                 |
           +-----+----+	 
       	   |FrameState|  
	   +----------+
		△ 
                 |
       +---------+-----------+--------------------+
       | 		     |       		  |
+------+------+	+------------+---------+ +--------+---------+
|FrameNewState|	|FrameProccessingState | |FrameFinishedState|
+-------------+	+----------------------+ +------------------+
						 △
						  | 
				    +-------------+--+
				    |		     |
 			   +--------+-------+ +------+--------+
       	       	       	   |FrameStrikeState| |FrameSpareState|	
 			   +----------------+ +---------------+

各フレームをやはりクラスとして抽出し、フレームをステートパターンを
使って種類分けしています。それとは別に最終フレームを表現するクラス
も導入されています。(番兵のパターン?)

なお、次号の実装は、このクラス構成からまた変化しているそうです。

>   筆者が素直に考えた場合の設計例が書かれていたり、参考になるのではないでしょ
うか?

設計は正解のない作業なので、同じ問題をいろいろな観点で設計されたものを
並べて見ることができるとよいです。
TDD(テスト駆動設計)とは随分違う設計となっており、おもしろいです。

なお、読書会時に議論になった、未投了のフレームにおいてスコアを算出して
も、このモデルなら正しい結果を出せると思われます。
# どちらが良い設計かという議論ではありません。TDDの場合、未投了の
# フレームで正しい結果を出すことを機能(テスト項目=ユーザストーリー)
# として要求していれば、そのように設計・実装されるので・・・。


TAKAHASHI, Toru