UML建模

1.从需求到业务用例图

OOA&D的第一步,就是了解用户需求,并将其转换为业务用例图。我们的 CMS系统需求非常简单,大致可做如下描述:这个系统主要用来发布新闻,管理员只需要一个,登录后可以在后台发布新闻。任何人可以浏览新闻,浏览者可以注 册成为系统会员,注册后可对新闻进行评论。管理员在后台可以对新闻、评论、注册会员进行管理,如修改、删除等。通过以上需求描述,我们画出如下的业务用例 图:

业务用例图

这里要注意三点:

1.业务用例是仅从系统业务角度关注的用例,而不是具体系统的用例。它描述的是“该实现什么业务”,而不是“系统该提供什么操作”。例如,在实际系统中,“登录”肯定要作为一个用例,但是这是软件系统中的操作,而用户所关注的业务是不包含“登录”的。

2.业务用例仅包含客户“感兴趣”的内容。

3.业务用例所有的用例名应该让客户能看懂,如果某个用例的名字客户看不懂什么意思,它也许就不适合作为业务用例。

2.从业务用例图到活动图

完成了业务用例图后,我们要为每一个业务用例绘制一幅活动图。活动图描述了这个业务用例中,用户可能会进行的操作序列。活动图有个很重要的使命:从业务用例分析出系统用例。例如,下面是“新闻管理”的活动图:

 

“新闻管理”活动图

可以看到,一个“新闻管理”这个业务用例,分解出N多系统操作。这里要特别注意这 些操作,其中很多“活动”都很可能是一个系统用例(当然,不是每个都是)。例如,由这个活动图可以看出,系统中至少要包含以下备选系统用例:登录、注销登 录、查看新闻列表、修改新闻、删除新闻。

这样,将每个业务用例都绘制出相应的活动图,再将其中的“活动”整合,就得出所有备选系统用例。

3.从活动图到系统用例图

找出所有的备选系统用例后,我们要对他们进行合并和筛选。合并就是将相同的用例合并成一个,筛选就是将不符合系统用例条件的备选用例去掉。

一个系统用例应该是实际使用系统的用户所进行的一个操作,例如,“查看新闻列表”就不能算一个系统用例,因为他只是某系统用例的一个序列项。最终我们得出的系统用例图如下:

系统用例图

4.从系统用例图到用例规约

得出系统用例图后,我们应该对每一个系统用例给出用例规约。关于用例规约,没有一个通用的格式,大家可以按照习惯的格式进行编写。对用例规约唯一的要求就是“清晰易懂”。

下面给出“登录”这个系统用例的一个规约:

系统用例规约

5.绘制业务领域类图

完成了上面几步,下面应该是绘制业务领域类图了。所谓业务领域类图要描述一下三点:

1.系统中有哪些实体。

2.这些实体能做什么操作。

3.实体间的关系。

业务领域类图

这里要特别强调:这里的实体不是Actor,而是Actor使用系统时使用的所调 用的实体,是处在系统边界之内的实体。例如,管理员就没有作为一个实体出现在这里,因为管理员处在系统边界之外,它所有的工作都可以通过调用这三个类的方 法完成。并且,这里的“User”实体也不是刚才用例图中注册会员这个Actor,而是作为一个系统内的业务实体,供Actor们使用的。例如,其中的 register功能是给注册会员这个Actor使用,而remove功能,则是给管理员这个Actor使用的。

理解以上这段话非常重要,我经常看到由于混淆了实体和Actor的关系而导致画出的领域类图不准确或职责分配不准确。这里没有给出每个实体的属性。其实,在领域分析阶段,实体的属性并不重要,重要的是找出实体的操作。

6.绘制实现类图

以上这几步,就是分析的过程。而下面的步骤就是设计了。

设计没有分析那么好描述,因为分析是“客户面”,它只关心系统本身的功能和业务,而不关心任何和计算机有关的东西。但是,设计和平台、语言、开发模型等内容关系紧密,因而很难找出一个一致的过程。但是,一般在设计过程中实现类图是要绘制的。

实现类图和领域类图不一样,它描述的是真正系统的静态结构,是和最后的代码完全一 致的。因此,它和平台关系密切,必须准确给出系统中的实体类、控制类、界面类、接口等元素以及其中的关系。因此,实现类图是很复杂的,而且是平台技术有关 的。所以,这里不可能给出一个准确的实现类图,为了描述,给出一个简化了的实现类图,当然,它是不准确的,而只是从形式上给出实现类图的样子。

假设这个系统整体使用三层架构。那么,用户模块体系的实现类图大体是这样子(不准确):

实现类图

7.绘制序列图

有了静态结构,我们还要给出动态结构,这样,才能看清系统间的类是如何交互的,从而有效帮助程序员进行编码工作。

 

用户登录时序图

上图给出的是用户登录的序列图。首先注册会员作为Actor,调用 LoginService的loginIn()方法启动序列,然后序列按图示步骤执行。其中LoginService作为业务组件,首先调用数据访问组件 的check()方法,确定用户是否存在,如果存在,则返回给Actor欢迎信息,如果失败,返回错误提示给Actor。

Actor进行注销操作时,调用loginOut()方法确定输入密码是否是此用户的密码,退出系统,从而完成业务功能。

要注意,序列图在实际中是很多的,几乎每个类方法都配有相应的序列图。

8.后面的步骤

在完成了上面的过程后,就可以进行编码、调试、测试等工作了。

总结

本文简要给出了使用UML进行OOA&D的过程。当然,由于示例较小,所 以给出的相关内容可能不是很准确。而且软件分析设计本来就不是一个固定模式的过程,随着系统的不同整个过程会有变化。本文只是想起到一个抛砖引玉的作用, 大致描述UML的使用流程。至于实际的分析设计,还需要深入的学习和实践的积累。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值