菜鸟的UML笔记
概述
UML可以对包括润间系统在内的多种系统进行建模。选择UML来进行建模有方便沟通和支持广泛的好处,并且可以用来做软件的功能验证。
什么是模型
模型反应现实,却不可能与现实完全一致,需要忽略不相关的元素,强调本质的细节,所谓的“本质”则取决于建模的具体目的。
模型的目的和目标人群:根据目标人群的不同,采用不同的细度,不同的语言(IT术语还是某行业的专业术语)等等。具体到网站建设,目标人群是团队成员,语言障碍不是问题。
业务过程和业务系统
过程的定义、业务过程的定义以及业务系统的定义(www.wfmc.org)。书上讲解的是对业务系统和IT系统分别使用UML建模,但是在网站建设中,业务系统和IT系统是等同的。
视图
所谓视图,是对同一个系统的不同角度的观察。例如外部视图是指客户、用户或者其它第三方合作伙伴等看到的系统,他们只关心系统能够提供的服务或者能够为他们创造的价值,而并不关心系统内部的工作原理,那么这时候就应该使用外部视图。
而内部视图则包含员工、工作道具、业务过程以及IT系统。
具体到网站建设团队,内外视图的区分意义不大。而且通常情况下,网站的设计者、开发者本身也是网站的用户。
除了内部和外部视图,还有:
结构视图:类图。
行为视图:状态图。
用例图
用例:一个操作。例如用户在网站的注册就是一个操作。
参与者:参与者可能是用户、公司或者其它IT系统。具体到网站的话,参与者大多是指用户。
用例图可以展示参与者与用例,以及他们之间的关系。但是用例图并不描述工序的细节,同时隐藏了备选场景。例如注册或者登录在用例图中将会体现为一个用例,而不会描述用户如何用表单提交数据,程序又如何与数据库通信,同时也会隐藏注册/登录失败的情况。
用例图的要素

- 参与者:用一个小人表示。例如上图中的“用户甲”。
- 用例:用一个椭圆圈上用例名称表示。例如“小组”。
- 关联:一条连接参与者与用例的线。表示某个参与者可以使用某项功能,例如“未注册用户”所关联的用例要比“用户甲”关联的用例少很多。
- 包含关系:可能有某个用例是其它几个用例的组成部分,可以将这个用例拿出来与其它用例构成包含关系。
- 主题:整个用例图的内容的标题。例如上图中的douban.com。
构建用例图的步骤
- 确定参与者
- 确定用例
- 连接用例与参与者
- 对参与者进行描述,文档化(不体现在UML内)。
- 业务用例文档化,可以使用文档、活动图或者顺序图。
- 确定用例包含关系。
- 验证用例图。
活动图
描述参与者与业务系统的交互,描述工序的细节。对于顺序、分支和并行时间的描述特别有效。
活动图的要素

- 活动:整个图代表一个活动。
- 操作:上图中的身份验证等等都属于操作。
- 调用另一个活动的操作。身份验证上有一个类似“巾”的符号,表示这个操作又另画了一个活动图,本操作调用那个活动。
- 接收一个事件的操作。例如“点击‘在读’”就是等待一个事件的操作。
- 接收一个时间事件的操作。
- 发送信号的操作,将信号发送给另一个接收事件的操作。
- 边(控制流):其实就是连接线。
- 决策点:选择分支。
- 汇合点:多个分支汇合为一个分支的地方。
- 分叉:并行分支。
- 结合:并行分支重新汇合到一起。
- 起始点:一个实心圆。
- 活动终点:圆圈套个实心圆。
- 控制流终点:圆圈套个X。
- 活动分隔:根据实体、地理等因素的不同,讲活动图划分为两个部分。
构建活动图的步骤
书上的步骤比较详细,不过我觉得构建活动图就是对用例图中一个用例的细化,因该不需要程序化。
类图——结构视图
:
类图的要素
- 类:例如User。
- 属性:例如userName。
- 泛化:admin和VIP都继承与User。
- 关联:类之间的关系。
- 多重性:关联的数量关系。例如User与书之间的关系。
- 聚合:一个类由另外一个类组成的关系。
其它图
顺序图、用例顺序图:按照时间顺序展示交互链。这两种图,我觉得比较适合支付宝等购物型网站以及智联等招聘网站,一个完整的购买或者简历的填写需要很多个交互步骤。而一般的网站,甚至是豆瓣这种很2.0的网站,交互也大都是一次点击,一个表单就解决问题了,个人认为使用顺序图的意义不大。
状态图——行为视图:表示出一个对象的生命周期,及其在各个状态之间的切换。感觉对大多数网站都不太适合,还是适合购物网站。比如说订单,会有很多的状态。如果把豆瓣的一本书列出来几个状态,画个状态图,好像太牵强了。
通信图:一个查询事件会波及多少个,哪些个对象呢?
补充
用例顺序图及其要素:

- 注释:If、For。
- 对界面原型的引用
- 参与者
- 查询事件:<<Q>>查询
- 转换事件:<<M>>更改数据库
- 交互引用:ref
- IT系统
状态图:

- 初始状态:实心圆
- 状态
- 转换:
- 内部转换:<<M>>更改数据库/,之后不会改变状态。
- 转换事件:<<M>>更改数据库/,后改变状态。
- 活动:Event/Action
- 监护条件:[条件]
- 终态
参考教材:《UML2.0实战——项目开发指南》
