[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