UML
# 一、UML 事物
# 二、UML 关系
- 依赖 (Dependency) 关系:依赖关系表示一个事物 (独立事物) 对另一个事物 (依赖事物) 的语义有依赖关系,当独立事物发生变化时,依赖事物的语义可能会受到影响。依赖关系在图示中一般用带箭头的虚线表示,箭头指向被依赖的事物。
- 带箭头的虚线指向被使用者。
- 关联 (Association) 关系:使一个类知道另一个类的属性和方法,表示它们之间有关联和相互作用。关联关系可以是双向的或单向的,并且可以具有角色 (Role)、导航和重复度 (Multiplicity) 等属性。关联关系在图示中一般用实线表示。
- 带箭头的实线指向被拥有者,如果是双向关联就实现无箭头
- 泛化 (Generalization) 关系:泛化关系表示一个事物 (子事物) 继承另一个事物 (父事物) 的属性和行为。子事物可以通过继承获得父事物的特性,并且可以添加新的特性或修改继承的特性。泛化关系在图示中一般用带空心箭头的实线表示,箭头指向父事物。
- 带三角形箭头的实线指向父类
- 实现 (Realization) 关系:实现关系表示一个事物 (类元) 实现了一个接口或者符合一个协议。在图示中,实现关系一般用带空心箭头的虚线表示。
- 带三角形箭头的虚线指向接口
聚集 (Aggregation):在聚合关系中,整体对象拥有并包含了部分对象,但是部分对象可以在不同的整体对象之间共享。这意味着部分对象可以出现在多个整体对象中,并且可以被多个整体对象共同引用。与此同时,部分对象的生命周期可以独立于整体对象而存在,这意味着整体对象的创建或销毁不会直接影响部分对象的存在。此外,聚合关系中的部分对象也可以脱离整体对象而单独存在。也就是说,当整体对象被销毁时,部分对象仍然可以保持独立存在。
- 带空心菱形的实线指向整体
组合关系是一种较为强的 "拥有" 关系,整体对象完全控制着其中的部分对象,包括它们的生命周期。如果整体对象被销毁,那么其中的部分对象也会随之被销毁。组合关系特别强调整体对象对部分对象的控制权。
- 带实心菱形的实线指向整体
关联是一种特殊的依赖
聚合是一种特殊的关联
组合也是一种特殊的聚合
# 三、关联的多重度
在 UML 中,关联的多重度指的是关联关系中的对象实例之间的数量限制或者范围。
关联关系描述了对象之间的连接,而多重度则进一步限定了这种连接的数量。通过指定多重度,可以表达对象实例之间的数量关系,如一对一、一对多、多对一或多对多。
多重度可以通过使用数字、通配符或具体的范围来表示。常见的多重度符号和示例包括:
- "1":表示恰好有一个实例。
- "0..1":表示零个或一个实例(可选关联)。
- "0..*":表示零个或多个实例(非确定关联)。
- "1..*":表示至少一个或多个实例。
- "2..5":表示 2 到 5 个实例。
# 四、类图
类图(Class Diagram)展现了一组对象、接口、协作和它们之间的关系。
符号:
+
: public 公有的
-
: private 私有的
##
: protected 受保护的
~
: package 包的
类图用于对系统的静态设计视图建模。通常以下述 3 种方式之一使用类图:
- 对系统的词汇建模。
- 对简单的协作建模。
- 对逻辑数据库模式建模。
# 五、对象图
对象图展现了某一时刻一组对象以及它们之间的关系,描述了在类图中所建立的事物的实例的静态快照。
对象图给出系统的静态设计视图或静态进程视图。
# 六、用例图
用例图展现了一组用例、参与者以及它们之间的关系。
一个用例执行的时候,可能会发生一些特殊的情况或可选的情况,这种情况就是这个用例的扩展用例。
参与者:参与者是与系统交互的外部实体。可能是使用者,也可能是与系统交互的外部系统、基础设备等。
用例:用例是从用户角度描述系统的行为,它将系统的一个功能描述成一系列的事件,这些事件最终对操作者产生有价值的观测结果。用例是一个类,它代表一类功能而不是使用该功能的某一具体实例。
之间的关系:
- 包含关系 (
<<include>>
)(用例之间):一个用例包含另一个用例 - 扩展关系 (
<<extend>>
)(用例之间):一个用例执行的时候,可能会发生一些特殊的情况或可选的情况,这种情况就是这个用例的扩展用例 - 关联关系(参与者和用例之间)
- 泛化关系(用例与用例以及参与者与参与者之间)
- 包含关系 (
用例图用于对系统的静态用例视图进行建模。可用以下两种方式来使用用例图:
- 对系统的语境建模。
- 对系统的需求建模。
# 七、序列图(交互图)
- 交互图用于对系统的动态方面进行建模。一张交互图表现的是一个交互,由一组对象和它们之间的关系组成。包含它们之间可能传递的消息。
- 交互图一般包括对象、链和消息。
序列图(顺序图、时序图) :序列图是场景的图形化表示,描述了对象之间的时间顺序。
序列图用于展示系统中一个用例和多个对象的行为。
序列图有两个不同于通信图的特征:
序列图有对象生命线
序列图有控制焦点
# 八、通讯图(交互图)
通信图(协作图):通信图强调收发消息的对象的结构组织,在早期的版本中也被称作协作图。
通信图展现了对象之间的消息流及其顺序。
通信图有两个不同于序列图的特性:
- 通信图有路径
- 通信图有顺序号
# 九、状态图
状态图展现了一个状态机,它由状态、转换、事件和活动组成。
状态图展现了对象的状态转换及事件顺序
可以用状态图对系统的动态方面建模。当对系统、类或用例的动态方面建模时,通常是对反应型对象建模。
定义的状态主要有:初态(即初始状态)、终态(即最终状态)和中间状态。
三种标准事件:entry、exit、do
entry:入口动作,进入状态立即执行
exit:出口动作,退出状态立即执行
do:内部活动,占有限时间,并可以中断的工作
事件是在某个特定时刻发生的事情,它是对引起系统做动作或(和)从一个状态转换到另一个状态的外界事件的抽象。
转换包括两个状态(源状态,目标状态)
事件,监护条件,动作
事件触发转换(迁移)
活动(动作)可以在状态(迁移)内执行,也可以在状态转换时执行。
监护条件是一个布尔表达式。
# 十、活动图
活动图是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。
活动图一般包括活动状态和动作状态、转换和对象。
通常有两种使用活动图的方式:
- 对工作流建模。
- 对操作建模。
# 十一、构件图
- 构件图展现了一组构件之间的组织和依赖。
- 构件图专注于系统的静态实现试图。
# 十二、部署图
- 部署图是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(制品)的配置。
- 部署图展现了系统的软件和硬件之间的关系,在实施阶段使用。
# 十三、UML 图分类
- 静态建模:类图、对象图、用例图
- 动态建模:序列图(顺序图、时序图)、通信图(协作图)、状态图、活动图
- 物理建模:构件图(组件图)、部署图
- 交互图:序列图(顺序图、时序图)、通信图(协作图)
# 十四、杂项
UML 中接口可用于声明对象类所需要的服务
部署组件之间的依赖关系类似于包依赖