面向对象分析与设计——一个简单模拟掷色子游戏的实现(一)

面向对象分析与设计

今天终于迎来了开学以来真正的软件工程师核心课程:OOAD,Object-Oriented Analysis and Design。老师讲的一如既往的专业,我也听的不亦乐乎。在课堂中,老师用一个投掷色子的小游戏引入了面向对象分析的概念,并引领我们对该案例进行了分析。下课后,我意犹未尽,于是按照上课时老师教的方法进行了分析与设计,并用java实现了基本功能。现在将分析过程和代码附上,打包后的jar包在附件里供大家下载,希望高手不吝赐教。


对于该案例我们一般按下面步骤进行:

1、 定义用例

2、 建立一个域模型

3、 构建交互图

4、 开发设计类图


现在开始分析:

首先考虑这个问题的描述:这是一种掷色子的游戏,一次掷两个色子,如果两个色子的点数之和为7即判定赢,否则为输。

在这个case(案例)里,一共有几个对象(可以理解为实体)?

很显然,有两个:色子、赌徒。

于是我们可以开始定义Use Case(用例)。

那么,到底什么是Use Case呢?在UML的文档中,Use Case的定义是:在不展现一个系统或子系统内部结构的情况下,对系统或子系统的某个连贯的功能单元的定义和描述。说白了就是系统功能(一部分)的描述。当然这个功能必须是逻辑上完整的。比如吃饭,睡觉等等很清楚明白 do what。

在本案例中,只有一个用例掷色子(玩该游戏)。即可描述如下:


Use Case: Play a Dice Game

• Primary Actor: Player

• Description: The player picks up and rolls the dice. If the dice total seven, they win, otherwise they lose.


一般情况下用例除了文字描述外最好加上一副短小精悍的图,即用UML来描述的图,这样无论是否有行业背景的人一看就会一目了然。即用例图,如下所示:

[img]http://dl.iteye.com/upload/attachment/354666/7f579115-786d-3375-8692-9bff8d6ec192.jpg[/img]
接下来我们来建立域模型

我们通过对问题的分解,来确定事物和概念,以及它们的属性和关系。得到一个问题域模型。我们得到下面的关系图:
[img]http://dl.iteye.com/upload/attachment/354668/7991be81-3caa-309e-9794-a170592ab444.jpg[/img]

第三步,我们通过对对象关系图的分析得到对象之间互动关系的模型,然后就可以得到对象之间的消息传递图(communication diagram)。
[img]http://dl.iteye.com/upload/attachment/354670/cee6c11f-6d7f-3681-8583-f707ee1977bb.jpg[/img]

另一种交互图是序列图,它说明这些对象之间的消息传递得到的序列的事件,如下所示:

[img]http://dl.iteye.com/upload/attachment/354672/a6ba1050-1c43-38e1-a644-e1a883784e33.jpg[/img]

以上两种图一般统称为交互图(interaction diagrams)。

通过以上的分析,最后,我们就可以得到一个软件结构模型中的类模型的解决方案的详细结构。如下图示,毫无疑问,剩下的就成coding了!


现在一个完整的UML建模过程就完成了,由于本人也是初学,所以除了第一幅图是鄙人用JUDE-COMMUNITY画的外,其他的均取自老师课件。希望有UML方面的朋友或者专家给予本人指导。

你可能感兴趣的:(软件工程)