统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。
UML是面向对象设计的建模工具,独立于任何具体程序设计语言
1、UML与面向对象
结构化开发 | 面向对象开发 | |
---|---|---|
系统分析 | 数据流图 | UML |
系统设计 | 模块结构图 | UML |
UML仅仅是一种语言。它不是一种系统设计的方法,而是系统建模的标准
1.1、UML视图
- 用例视图
用例是系统中的一个功能单元
用例视图是其他视图的核心,从系统外部参与者的角度描述系统应该具有的功能
- 逻辑视图
设计人员和开发人员使用逻辑视图来描述用例视图提出的系统功能的实现,包括静态结构(类图、对象图)和动态协作关系(状态图、时序图、协作图、活动图)
- 并发视图
开发人员和系统集成人员考虑资源的有效利用、代码的并行执行和系统环境中的异步事件的处理而使用的图形,包括状态图、协作图、活动图
- 组件视图
组件是不同类型的代码模块,是构造应用的软件单元
组件视图是开发人员用于描述系统的实现模块以及它们之间的依赖关系的图
- 部署视图
开发人员、系统集成人员和测试人员使用的
用来显示系统的物理部署,描述了位于节点上的运行实例的部署情况
1.2、UML图
- 静态图
- 用例图
- 类图
- 对象图
- 组件图
- 部署图
- 包图 (UML2.0)
- 组成结构图 (UML2.0)
- 动态图
- 序列图
- 协作图
- 状态图
- 活动图
- 交互纵览图 (UML2.0)
- 计时图 (UML2.0)
1.3、建模步骤
- 建模是从总体到细节,逐步细化的过程;不要一开始就陷入细节中
示例
骰子游戏:软件模拟游戏者投掷两个骰子,如果总点数为7,则赢得游戏,否则为输
1、定义用例
用例是需求分析的一种工具,它是一些情况的描述
对系统总体上的描述
骰子游戏:
- 游戏者请求骰子
- 系统展示结果:如果骰子总点数是7,则赢,否则输
2、定义领域模型
识别问题中的概念
确定对象及对象间的关系
- 游戏者
- 骰子
- 骰子游戏
3、定义交互图
动态建模
分配对象职责:对象间交互关系
顺序图、用例图
4、定义设计类图
静态建模
设计类:属性、方法
1.4、名词解释
- UP
The Unified Software Development Process
统一过程:是一种流行的构造面向对象的迭代软件开发过程
- RUP
Rational Unified Process
Rational统一过程
2、用例图
2.1、组成元素
- 参考者
外部用户或外部实体在系统中扮演的角色
人、子系统、硬件设备、时间等…
- 用例
一组动作序列的描述
名称:动宾结构
如:售货、取货、修改资料、查询信息、删除订单…
- 关系
2.2、示例
3、类图、对象图和包图
3.1、类图
1、属性
可见性 名称 :类型 [ = 缺省值]
2、方法
可见性 名称(参数列表) [ : 返回类型]
3、类间关系
3.2、对象图
对象图中的建模元素有 对象 和 链
对象图实质上是类图的实例
- 对象:是类的实例
- 链:是类之间的关联实例
3.3、包图
可类比java中的包机制
包图只有依赖关系
4、活动图
- 活动图本质是上是一种流程图,但是活动图是 面向对象 的,而流程图是 面向过程 的
- 活动图用于表达系统动态特性的图
4.1、组成元素
动作和活动节点、开始和终止、控制流、判断节点、合并节点、泳道
- 判断节点
- 合并节点
- 泳道
是将活动中的具体活动按照负责进行该活动的对象进行分区,一条泳道中的所有活动由同一个对象来执行
除了以上的对线性流程进行分区以外,使用泳道表示法可以更清晰地表示并发
工时审批流程
员工填写工时,项目工时报项目经理审批后再报部门经理审批、非项目工时直接报部门经理审批
- 分叉节点与结合节点
4.2、实例
- 客户下单
5、顺序图/时序图
- 四个元素
- 对象 Object
- 生命线 Lifeline
- 消息 Message
- 激活 Activation
6、协作图
- 描述对象间的组织协作关系,它也可体现出系统用例的行为
- 协作图由参与者, 对象, 连接和消息等基本元素组成
7、状态图
- 状态图(statechart diagram)主要用来描述一个对象在其生存期间的动态行为,表现一个对象所经历的状态序列,引起状态转移的事件(event),以及因状态转移而伴随发生的动作(action)
- 一般可以状态机对一个对象 (这里的对象可以是类的实例, 用例的实例或整个系统的实例) 的生命周期建模
- 状态图是用于显示状态机的,重点在于描述状态之间的控制流
- 状态图与活动图的比较
- 描述重点不同
- 状态图描述的是 对象的状态及状态之间的转移
- 活动图描述的是 从活动到活动的控制流
- 使用场合不同
- 如果是为了显示一个对象在其生命周期内的行为, 则使用状态图较好
- 如果目的是分析用例,理解涉及多个用例的工作流程,或者使用多线程应用等, 则使用活动图较好
- 描述重点不同