配套课程:中国大学MOOC 华东师范大学 面向对象设计与分析
UML概念模型
最重要的五种图:用例图,类图,顺序图,活动图,状态图

四种关系:关联关系,实现关系,依赖关系,继承关系
常见图例


用例图
- 用例模型是软件开发分析客户业务流程的过程,不一定完全是面向对象分析的结果
- 参与者:代表系统之外并和系统进行交互的一类事物(人、物、其他软件子系统等)
- 图形表示:

- 对每一类参与者要有简短描述
- 用例:系统为响应参与者引发的一个事件而执行的一系列动作,这些处理应该为参与者提供一种有价值的结果
- 用例图
- 边界
- 参与者
- 用例
- 关系
- 用例图中的关系
- 参与者与用例:关联
- 参与者与参与者:泛化(实线+空心箭头)
- 用例之间:泛化,含(《include》),扩展(《extend》)

- 仅有用例图还不够,还需要详尽的文字描述
- 主事件流:一切正常时的动作序列
- 异常/可选事件流:主事件流的每一步都可能出现异常,此处描述异常情况处理
- Example:


活动图
活动图描述了在一个过程中,顺序的/并行的活动及其之间的关系
(与用例模型互为补充,主要用于需求分析阶段)
- 描述一项任务执行过程汇总所完成的任务
- 描述对象内部的工作,显示如何执行一组相关的动作,以及这些动作如何影响他们周围的对象
- 应用于商业过程、工作流(业务过程)、复杂算法的建模
- 活动图的组成:活动节点、动作、流、对象值、注解和约束等
活动图建模元素

活动的开始、结束、对象:

活动节点:一个活动是一个过程中进行的非原子的执行单元,活动执行延伸为动作的执行
分支:一个分支可以有一个进入流和多个离去流
每个离去流上必须设置一个监护条件:条件放在方括号里,条件不能重叠,可以有else分支
两个控制路径可以重新合并,无需监控条件
- 分岔表示一个单独控制流分成多个并发控制流
- 汇合表示多个并发控制流的同步发生,一个汇合可以有多个进入转移和一个输出转移
- 同步棒是一条水平或竖直的粗线条
泳道:将一个活动图的活动分组,每一组表示一个特定类别、人或部门,负责完成组内的活动,每一组被称为一个泳道(用一条垂直实线将他们分开)每个活动严格属于一个泳道,转移和同步帮可以跨越泳道。

类图
类图是一种静态视图
类图中的UML元素
- 类之间的关系
- 依赖关系:

- 关联关系:

-
- 关联的修饰
- 名称、角色、多重性、聚合/组合
- 关联类
- 连接
- 继承|泛化关系:

-
- 一般与具体
- 实现关系:

-
- 类与接口

- 类的图形表示
- 用四部分表示,是分为三个分隔区的长方形:

- 名称naming
- 属性attribute
- 操作operation
- 职责responsibility
- 在显示的时候只有名称部分是必须的,其他部分可以隐藏

- 类元素命名
- 类名首字母大写
- 操作名,属性名驼峰法则
- 关联关系的修饰
- 名称及其方向
- 角色
- 多重性

- 聚合/组合:表示部分与整体的关联关系
- 聚合:整体有管理部分的特有职责;用端点带有空菱形的线段表示,空菱形与整体类连接
- 组合:整体拥有部分的生命;用端点带有实菱形的线段表示,实菱形与整体类连接

顺序图
用例模型和活动图明确了用户的“需求”,类图给出了解决问题的静态方案。而顺序图可以动态验证类模型的可行性。
- 交互:对象之间为实现某一功能而必须实施的协作过程、动态行为,称为交互
- 消息:对象间协作与交流表现为一个对象以某种方式启动另一个对象的活动,在UML定义为消息
- 同步消息:

- 异步消息:

- 交互图:交互过程表现出来,就是交互图(顺序和通信都是)
- 顺序图:
- 基本建模元素:对象、生命期、控制焦点、消息(方法调用)、消息序号

- 结构化控制
- 可选执行(opt)
- 条件执行(alt)
- 并行执行(par)
- 循环(迭代)执行(loop)

PS:关于操作,先在类中定义操作,然后在顺序图中为对象选择操作。
通信图
和顺序图本质上是一样的
顺序图 强调随着时间推移,各对象是如何交互的
通信图 强调对象之间的结构关系

通信图的构成:对象,连接,在此连接上传递的消息
- 顺序图和通信图的区别
- 通信图显示对象之间的交流,通过在连接上附带着序号的消息
- 顺序图显示消息的往返,有对象生命线,控制焦点
状态图
状态的组成部分
- 名称
- 进入/退出动作
- 内部迁移
- 子状态
- 延迟事件

事件:在时间上和空间上占有一定位置的有意义的事情的描述
- 状态机语境下,一个事件就是一个激励的发生,它能够触发一个状态迁移
UML对4种事件进行建模
- 参量变化 change event
- 信号 signal(异步)
- 调用 call(同步)
- 时间事件 time event
迁移:在状态A发生事件并满足一定条件,转到状态B
由五部分组成:
- 源状态
- 事件触发器
- 触发条件
- 效应(迁移动作)
- 目标状态
特殊的迁移:自身(从A到A),内部(在A内部行为)
状态图建模元素
- 状态
- 一般状态:圆角矩形
- 初始状态:实心圆
- 结束状态:“牛眼”
- 事件
- 触发事件名[触发条件]/迁移动作
- 迁移
- 叉形箭头实线

状态图建模相关

面向对象分析
系统设计中的关键问题
- 应该如何为对象类分配职责?
- 对象之间应该如何协作?
- 什么样的类应该做什么样的事情?
- 某些针对设计问题的、反复验证的解决方案,可以被表示成为最佳实践的原则、启示或者模式,如何借鉴、创新?
面向对象开发需要掌握:为软件对象分配职责。
OOA面向对象分析:发现并描述问题领域里的对象或者概念。
OOD面向对象设计:定义软件对象、以及它们之间如何协作完成功能。
OOAD最基本的过程 定义用例 定义领域模型 定义交互图 定义设计类图
主要有两种分析方法:
- 面向功能分析:抽象层面用的多
- 面向对象分析:模块层面用的多——识别对象,组织对象,定义对象之间关系,定义对象的操作,定义对象内部细节
- 概念模型,名词法
- 分析模型
- CRC法,类/职责/协作
概念模型
表示了问题领域的概念及其关系,也称为领域模型。UML表示为没有定义操作的类图,能够显示概念,概念间关系,概念的属性。

领域是用户的角度,系统是开发人员的角度。
概念模型==领域模型
概念类==领域概念
如何寻找、定义领域内的概念类?
- 名称法:利用已有,查找概念类列表,从问题描述中寻找名词,名词短语,进行分析
- 分析模型法:实体类,边界类(IO),控制类(控制状态的实例)
- CRC法
CRC方法标识概念类
- 一种发现概念类并分配职责的途径
- 从“领域类、用例”到“设计类“
CRC索引卡片

- 非正式的、不是很细节的
- 采用小组”头脑风暴“的形式提出概念
- CRC的目标不是提供完整的设计
- CRC产生的结果需要进一步精化