统一建模语言 UML Unified Modeling Language 一种分析设计语言
特点:
- 工程化:使得软件工程可以与其他领域一样,根据需求创建模型,再通过模型指导实施,指导开发的各个阶段。模型可以验证需求,让用户及早发现问题,减少开发风险,降低开发维护成本。
- 规范化:一套标准符号,高效沟通交流。
- 可视化:图形符号,促进理解交流,直观发现问题,避免和减少设计缺陷产生。
- 系统化:视图和图从不同角度对同一个软件系统化建模,各有所长,相互补充,一起构造出系统完整蓝图。
- 文档化。同时可以产生系统设计文档,清楚系统目标。需要修改时,可以找到 UML 文档,降低维护成本,提高修改效率,开发人员通过 UML 图形文档资料尽快熟悉项目并投入开发工作。
- 智能化。大部分 UML 建模工具(Rose, Together, PowerDesigner 等)提供正向和逆向工程,将 UML 模转代码或转回去。
UML 的五种视图 view:
- 用户视图:以用户的观点表示系统的目标,所有视图的核心,描述系统的需求。
- 结构视图:表示系统静态行为,描述系统静态元素,如包、类、对象,以及它们之间的关系
- 行为视图:表示系统动态行为,描述系统组成元素(如对象)在系统运行时的交互关系。
- 实现视图:系统的逻辑元素分布,描述系统物理文件及其之间的关系。
- 环境视图:系统的物理元素分布,描述系统硬件设备及其之间的关系。
UML 2.0 提供了 13 种图 diagram,与五种视图对应。
用例图、类图是使用频率最高的两种图。
-
用例图 use case diagram / 用况图。对应用户视图
使用用例来表示系统的功能需求,表示多个外部执行者与系统用例之间以及用例与用例之间的关系
与用例说明文档 use case specification 是常用的需求建模工具,也称为用例建模
-
类图 class diagram。对应结构视图
使用类来描述系统的静态结构,包含类和它们之间的关系,描述系统内所声明的类,但没有描述运行时类的行为。
-
对象图 object diagram。UML 2.0 新增,对应结构视图
类图某一时刻的一个实例,表示类的对象实例之间的关系
-
包图 package diagram。UML 2.0 新增,对应结构视图
描述包与包之间的关系。包是一种把元素组织到一起的通用机制,如多个类组织成一个包
-
组合结构图 composite structure diagram。UML 2.0 新增,对应结构视图
将每一个类放到一个整体,从类的内部结构审视一个类。用于表示一个类的内部结构,描述一些包含复杂成员或内部类的类结构
-
状态图 state diagram,对应行为视图
描述一个特定对象的所有可能的状态及其引起状态转移的事件。包括一系列对象的状态及状态之间的转换
-
活动图 activity diagram,对应行为视图
表示系统中各活动的次序,应用非常广泛,既可以描述用例的工作流程,也可以描述类中某个方法的操作行为
-
顺序图 sequence diagram / 时序图 / 序列图,对应行为视图
用于表示对象之间的交互,重点表示对象之间发送消息的时间顺序
-
通信图 communication diagram。UML 1.X 称协作图,对应行为视图
展示了一组对象、这些对象间的连接以及它们之间收发的信息
与顺序图是同构图,包含相同信息,但表达方式不同,可以相互转换
-
定时图 timing diagram。UML 2.0 新增图,对应行为视图
采用一种带数字刻度的时间轴精确地描述消息的顺序,而不是像顺序图那样只指定消息消息的相对顺序,还允许可视化地表示每条生命线的状态变化,当需要对实时事件进行定义时可以很好满足要求
-
交互概览图 interaction overview diagram。UML 2.0 新增图,对应行为视图
交互图和活动图混合物,可以理解为细化的活动图,其中的活动都通过一些小型的顺序图表示;可以理解为利用标明控制流的活动图分结果的顺序图
-
组件图 component diagram / 构件图。对应实现视图
描述每个功能所在的组件位置以及它们之间的关系
-
部署图 deployment diagram / 实施图。对应环境视图
描述软件中各个组件驻留的硬件位置以及这些硬件之间的交互关系
顺序图、通信图、定时图、交互概览图统称交互图 interactive diagram,是表示各对象如何依据某种行为进行写作的模型,通常可以使用一个交互图表示和说明一个用例的行为
model element。包括事物以及事物之间的联系。事物代表任何可以定义的东西。
每一个模型元素都有与之相对应的图形元素(如类、对象、消息、组件、节点等),以及它们之间的关系(如关联、泛化、依赖等)。
同一个模型元素可以在不同的 UML 图使用,保持相同的含义和相同的符号。
general mechanism。
为模型元素提供额外的注释、修饰和语义。主要包括规格说明、修饰、公共分类、扩展机制四种。允许用户对 UML 进行扩展,以便一个特定的方法、过程、组织或用户来使用。
使用频率最高的 UML 图之一。
类 class 封装了数据和行为,是具有相同属性、操作、关系的对象集合的总称。运行时实例化成对象 Object。对象是类的实例 instance。
类使用具有类名称、属性、操作分隔的长方形表示。
-
类名。每一个单词首字母大写。
-
属性 attributes。类的性质。
可见性 名称:类型 [= 默认值]
-
操作 operations。
可见性 名称([参数列表])[:返回类型]
其中:
- 名称:属性或方法的第一个单词首字母小写、之后各单词首字母大写
- 可见性:
- 公有 public +
- 私有 private -
- 保护 protected #
- 包内可见性 package *
- 类型:基本数据类型或自定义类型。
Java 内部类:
association。最常用关系。结构化关系。
实线表示。单向关联带箭头。->
形状。
表示一类对象与另一类对象有联系。
关联关系可以角色名,动词或名词(名词可为实例对象名)。可以不写。
-
双向关联。默认。可以有两个角色名。
-
单向关联。只有一个角色名。
指向被关联的类(被指向的类不与指向它的类关联)
-
自关联。
-
多重性关联。
重数性关联关系 multiplicity。一个类的对象与另一个类的对象的连接的个数。
1..1
0..1
一对一 (0表示可以不与之关联或最多关联一个)0..*
1..*
一对多(0表示多可以是零个到多个;1则必须至少1个)m..n
多对多。与最少m个最多n个有关系,其中m<=n
-
聚合关系 aggregation
整体与部分的关系。带空心菱形的直线。整体指向部分。
整体与部分不存在生命周期制约关系。弱关系。
一般通过对象注入实现。
-
组合关系 composition
实心菱形直线。整体指向部分。
整体与部分同一个生存期。整体消亡部分一起同生共死。强关系。
一般通过构造函数实例化成员类。
dependency。
带箭头的虚线箭头,指向被依赖。
特定事物的改变可能会影响到使用该事物的其他事物。一个事务使用其他事物,一般是作为参数。
在分析阶段忽略这些依赖:调用另一个类的静态方法、定义另一个类的局部变量等。
generalization。继承。is a kind of。
空心三角形箭头实现。子类/派生类指向父类/基类/超类。
在泛化中,子类不需要描述父类已有的属性和方法。
realization。
空心三角形箭头+虚线。实现类指向接口。
注意接口的图形符号与类不同,左上角带一个接口符号 o-
。
接口没有属性,所有操作都是抽象的,一般只有声明没有实现。
comment。类图或其他 UML 图形都可以用。对图中符号/元素进行附加说明,详细说明某一方法的功能或实现。
Java C/S 注册
最常用系统动态建模工具,使用频率最高的交互图。
表示对象动态交互,图形化描述消息传递时间顺序。
- 需求分析阶段。描述用例对象交互,可以用自然语言。
- 系统设计阶段。一般用专业技术语言命名。
组成:
-
执行者 actor。小人符号。有些交互过程不需要。
-
生命线 lifeline。纵向虚线。
-
对象 object。与类的不同在于名称有下划线。
-
激活 activation。过程的执行,包括等待过程执行的时间。激活部分替代生命线,长条矩形表示。
-
消息 message。对象间单路通信。有标记的箭头,发送者指向接收者。从上到下时间顺序排序。
- 有的消息对应于激活一个对象,为调用消息 call message。
- 否则,是发送消息 send message。
- 一个消息发给自身是自身消息 self call message。
-
交互片段 interaction fragment。大方框,左上角标准操作类型。
- alt。多条路径,为真执行。
- opt。任选。条件为真执行。
- par。并行。每一片段并发执行。
- loop。循环,多次执行该片段。
登录。
statechart diagram
描述特定对象所有可能状态及其引起状态转移的事件。
只能描述一个类。多个不同类对象要活动图。
-
状态 state / 中间状态。圆角矩形框。上格是状态名,下格是处于该状态时可以进行的活动 action。
-
初始状态 inital state / 初态。黑色实心圆圈。只有一个
-
结束状态 final state / 终止状态 / 终态。实心圆外加圆圈。可以有多个。
-
转移 transition。一个状态到另一个的连线和箭头,指向转移后的新状态。
文字说明引发状态变化的条件。若是特定条件转移,称为守护条件 guard condition。发生事件时的处理称为动作 action。
可以带有标注,语法为
事件名 [条件] / 动作名
。三部分都可以省略。 -
子状态 / 复合状态。
信用卡。