目录

  • UML概述
  • UML图分类
  • 类图和时序图
  • 类图
  • 类图概述
  • 类图的结构
  • 类图中的关系
  • 时序图
  • 时序图概述
  • 组成元素
  • 示例图


UML概述

  1. 统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言。
  2. UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。
  3. UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。

UML图分类

UML2.0一共包括13种图形(大致分成静态图和动态图两类):活动图,类图,通信图(对应UML1.x的协作图),组件图,复合结构图(UML2.0新增),部署图, 交互概览图(UML2.0新增),对象图,包图,时序图,状态图,定时图(UML2.0新增),用例图

  • 类图:描述系统中类的静态结构。
  • 对象图:系统中的多个对象在某一时刻的状态。
  • 包图:对构成系统的模型元素进行分组整理的图
  • 组件图:一种特殊的UML图来描述系统的静态实现视图
  • 部署图:定义系统中软硬件的物理体系结构
  • 复合结构图:表示类或者构建内部结构的图
  • 用例图:从用户角度描述系统功能。
  • 状态图:是描述状态到状态控制流,常用于动态特性建模
  • 活动图:描述了业务实现用例的工作流程
  • 时序图:对象之间的动态合作关系,强调对象发送消息的顺序,同时显示对象之间的交互
  • 协作图:描述对象之间的协助关系
  • 定时图:定时图采用一种带数字刻度的时间轴来精确地描述消息的顺序
  • 交互概览图:用活动图来表示多个交互之间的控制关系的图
    详细分类参考下图:

类图和时序图

在java的设计模式分析中,常用到两种图:类图和时序图。所以我们主要学习类图和时序图。

类图

类图概述

  1. UML的静态机制中类图是一个重点,它不但是设计人员关心的核心,更是实现人员关注的核心。建模工具也主要根据类图来产生代码。类图在UML的9个图中占据了一个相当重要的地位。
  2. James Rumbaugh对类的定义是:类是具有相似结构、行为和关系的一组对象的描述符。类是面向对象系统中最重要的构造块。
  3. 类图显示了一组类、接口、协作以及他们之间的关系。类加上他们之间的关系就构成了类图,类图中还可以包含接口、包等元素,也可以包括对象、链等实例。
  4. 接口在类图中通过版型来表示<>
  5. java实现时间序列 java时序图_java


类图的结构

java实现时间序列 java时序图_java实现时间序列_02

类图中的关系

在UML类图中,常见的有以下几种关系: 泛化(Generalization),依赖(Dependency), 实现(Realization)关联(Association)聚合(Aggregation)组合(Composition)

1. 泛化(Generalization)

【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。

例如:老虎是动物的一种,即有老虎的特性也有动物的共性。

【箭头指向】:带三角箭头的实线,箭头指向父类

java实现时间序列 java时序图_java进阶_03


2. 实现(Realization)

【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现.

【箭头指向】:带三角箭头的虚线,箭头指向接口

java实现时间序列 java时序图_java_04


3. 关联(Association)

【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,

丈夫与妻子关联可以是双向的,也可以是单向的。

双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量

【箭头及指向】:带普通箭头的实心线,指向被拥有者

java实现时间序列 java时序图_java进阶_05


4. 依赖(Dependency)

【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,

所以要尽量不使用双向的互相依赖.

【代码表现】:局部变量、方法的参数或者对静态方法的调用

【箭头及指向】:带箭头的虚线,指向被使用者

java实现时间序列 java时序图_uml_06


5. 聚合(Aggregation)

【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。

如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。

聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系

【代码体现】:成员变量

【箭头及指向】:带空心菱形的实心线,菱形指向整体

java实现时间序列 java时序图_uml_07

5. 组合(Composition)

【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。组合关系是关联关系的一种,是比聚合关系还要强的关系,

它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期

【代码体现】:成员变量

【箭头及指向】:带实心菱形的实线,菱形指向整体

java实现时间序列 java时序图_java实现时间序列_08

各种关系的强弱顺序:

泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

下面这张UML图,比较形象地展示了各种类图关系:

java实现时间序列 java时序图_java_09

时序图

时序图概述

  1. 时序图(Sequence Diagram),亦称为序列图、循序图或顺序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
  2. 时序图是一个二维图,横轴表示对象,纵轴表示时间,消息在各对象之间横向传递,依照时间顺序纵向排列。
  3. 展示对象之间交互的顺序。将交互行为建模为消息传递,通过描述消息是如何在对象间发送和接收的来动态展示对象之间的交互。
  4. 相对于其他UML图,时序图更强调交互的时间顺序,可以直观的描述并发进程。

组成元素

1. 角色(Actor)
系统角色,可以是人、机器、其他系统、子系统;在时序图中用java实现时间序列 java时序图_java进阶_10表示。

2. 对象(Object)

  • 对象的三种命名方式
    第一种方式包括对象名和类名,例如:直播课时:课时 ,在时序图中,用“对象:类”表示;
    第二种方式只显示类名,即表示它是一个匿名对象,例如: :课程;在时序图中,用“:类”表示;
    第三种方式只显示对象名不显示类名,例如:讲师;在时序图中,用“对象”表示。

  • 命名方式的选择
    三种命名方式均可,哪种最容易让阅读该时序图的人理解,就选择哪种。

  • 对象的排列顺序
    对象的左右顺序并不重要,但是为了作图清晰整洁,通常应遵循以下两个原则:把交互频繁的对象尽可能的靠拢;把初始化整个交互活动的对象放置在最左端。

3. 生命线(Lifeline)
在时序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间。

4. 控制焦点(Focus of Control)
又称为激活期,表示时间段的符号,在这个时间段内对象将执行相应的操作。它可以被理解成C语言语义中一对花括号{ }中的内容;用小矩形表示。

5. 消息(Message)
消息一般分为同步消息(Synchronous Message),异步消息(Asynchronous Message)和返回消息(Return Message)。

  • 消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义;
  • 消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。
  • 返回消息表示从过程调用返回。

6. 自关联消息
表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。

7. 组合片段(Combined Fragment)

组合片段用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。组合片段共有13种,名称及含义如下:

java实现时间序列 java时序图_java_11


java实现时间序列 java时序图_java_12


常用组合片段举例:用来指明在两个或更多的消息序列之间的互斥的选择,相当于经典的if…else…

(1)抉择(Alt)

java实现时间序列 java时序图_java_13


抉择在任何场合下只发生一个序列。 可以在每个片段中设置一个临界来指示该片段可以运行的条件。else 的临界指示其他任何临界都不为 True 时应运行的片段。如果所有临界都为 False 并且没有 else,则不执行任何片段。

(2)选项(Opt)

包含一个可能发生或不发生的序列;

java实现时间序列 java时序图_uml_14

(3)循环(Loop)

片段重复一定次数,可以在临界中指示片段重复的条件。

java实现时间序列 java时序图_uml_15


(4)并行(Par)

java实现时间序列 java时序图_java_16

示例图

java实现时间序列 java时序图_类图_17

参考链接:http://www.uml.org.cn/oobject/201610282.asp

htmlhttps://docs.staruml.io/working-with-diagrams/sequence-diagram