UML

UML概念

UML是Unified Model Language的缩写,中文是统一建模语言,是由一整套图表组成的标准化建模语言。

UML分类:

  • 结构图分为类图、轮廓图、组件图、组合结构图、对象图、部署图、包图。
  • 行为图又分活动图、用例图、状态机图和交互图。
  • 交互图又分为序列图、时序图、通讯图、交互概览图。
image-20201024201343588

UML各类图

1. 类图

  • 【概念】 类图是一切面向对象方法的核心建模工具。类图描述了系统中对象的类型以及它们之间存在的各种静态关系。
  • 【目的】用来表示类、接口以及它们之间的静态结构和关系。
  1. 泛化
  • 【泛化关系】是一种继承关系,表示子类继承父类的所有特征和行为。
  • 【箭头指向】带三角箭头的实线,箭头指向父类。

image-20201024201716514

  1. 实现
  • 【实现关系】是一种类与接口的关系,表示类是接口所有特征和行为的实现。
  • 【箭头指向】带三角箭头的虚线,箭头指向接口

image-20201024201755548

  1. 关联
  • 【关联关系】是一种拥有关系,它使得一个类知道另一个类的属性和方法
  • 【代码体现】成员变量
  • 【箭头指向】带普通箭头的实线,由拥有者出发,指向被拥有者。双向的关联可以有两个箭头,或者没有箭头。单向的关联有一个箭头。

关联的几种实例:

  1. 0..1:可以有0或1个实例
  2. 0..*:对实例数没有规定
  3. 1:只能有1个实例
  4. 1..*:至少1个实例

tip:两个类间可以由不同角色标识存在的多个关联

image-20201025192709681


image-20201024201819861

自己买的车,想什么时候开就开。但是车是车,人是人,没有整体与部分的关系。

  1. 聚合
  • 【聚合关系】是一种整体与部分的关系。且部分可以离开整体而单独存在。聚合关系是关联关系的一种是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
  • 【代码体现】成员变量
  • 【箭头指向】带空心菱形的实线,空心菱形指向整体。

image-20201024202046020

电脑有键盘才能输入信息,电脑是整体,键盘是部分,键盘也可以离开电脑,单纯的拿去敲。所以是聚合。

  1. 组合
  • 【组合关系】是一种整体与部分的关系。但部分不能离开整体而单独存在,组合关系是关联关系的一种,是比聚合关系还要强的关系。
  • 【代码体现】成员变量
  • 【箭头指向】带实心菱形的实线,实心菱形指向整体。

image-20201024202652563

鸟是整体,翅膀是部分。鸟死了,翅膀也就不能飞了。所以是组合。

image-20201024202816386

一个公司拥有多个部门,公司和部门之间是组合关系,公司破产了,部门就不复存在了。部门和员工是聚合关系,部门被裁掉,员工就换下家了

  1. 依赖
  • 【依赖关系】是一种使用关系,即一个类的实现需要另一个类的协助。
  • 【箭头指向】带普通箭头的虚线,由使用者出发,指向被使用者。

image-20201024202947444

老司机只管开车,车是谁的不重要,给什么车开什么车。

2. 对象图

  • 【概念】对象图是类图的一个实例,是系统在某个时间点的详细状态的快照。
  • 【目的】用来表示两个或者多个对象之间在某一时刻之间的关系。

image-20201024205006239

某时间点bat这个公司有一个研发部,一个销售部,两个部门只有一个人iisheng

3. 用例图

  • 【概念】用例图是指由参与者、用例,边界以及它们之间的关系构成的用于描述系统功能的视图。
  • 【目的】用来描述整个系统的功能。

image-20201024205223259

用例图中包含以下三种关系:

  • 包含关系使用符号《include》,想要查看订单列表,前提是需要先登录。
  • 扩展关系使用符号《extend》,基于查询订单列表的功能,可以增加一个导出数据的功能
  • 泛化关系,子用例继承父用例所有结构、行为和关系。

4. 序列图

  • 【概念】序列图根据时间序列展示对象如何进行协作。它展示了在用例的特定场景中,对象如何与其他对象交互。
  • 【目的】通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。

image-20201024205552968

图中展示的是支付宝条码支付场景的序列图。其中,loop是循环,alt是选择。

5. 通讯图

  • 【概念】描述了收发消息的对象的组织关系,强调对象之间的合作关系而不是时间顺序。
  • 【目的】用来显示不同对象的关系。

image-20201024205803312

图中展示了一个线上书店的通讯图,方框和小人表示生命线,不同生命线之间可以传递消息,消息前面的数字可以表达序列顺序。

6. 交互概览图

  • 【概念】交互概览图与活动图类似,但是它的节点都是交互图。
  • 【目的】提供了控制流的概述。

image-20201024211256976

图中表示一个调度系统的交互概览图,跟活动图很像。其中sd的框代表具体的交互流程,ref框代表使用交互。

7. 时序图

  • 【概念】时序图被用来显示随时间变化,一个或多个元素的值或状态的更改。也显示时控事件之间的交互和管理它们的时间和期限约束。
  • 【目的】用来表示元素状态或者值随时间的变化而变化的视图。

image-20201024211514237

图中展示了老年痴呆病人随着时间的变化病情的变化。

8. 状态图

  • 【概念】状态图对一个单独对象的行为建模,指明对象在它的整个生命周期里,响应不同事件时,执行相关事件的顺序。
  • 【目的】用来表示指定对象,在整个生命周期,响应不同事件的不同状态。

状态图中转换的五要素

  1. 原状态
  2. 目标状态
  3. 触发事件
  4. 监护条件:布尔表达式,决定是否激活
  5. 动作:转换激活时的动作

image-20201024211610023

图中描述了,门在其生命周期内所经历的状态。

9. 活动图

  • 【概念】描述了具体业务用例的实现流程。
  • 【目的】用来表示用例实现的工作流程。

image-20201024211902500

图中简单描述了,从开始到登录到查看订单列表,或者登录失败直接结束。

10. 结构图 / 组件图

  • 【概念】描绘了系统中组件提供的、需要的接口、端口等,以及它们之间的关系。
  • 【目的】用来展示各个组件之间的依赖关系。

image-20201024212110463

订单系统组件依赖于客户资源库和库存系统组件。中间的虚线箭头表示依赖关系。另外两个符号,表示组件连接器,一个提供接口,一个需要接口。

11. 组合结构图

  • 【概念】描述了一个”组合结构”的内部结构,以及他们之间的关系。这个”组合结构”可以是系统的一部分,或者一个整体。
  • 【目的】用来表示系统中逻辑上的”组合结构”。

image-20201024212223750

图中描述了Car是由车轴连接着的两个前面轮子、两个后面轮子,和引擎组合的。

12. 部署图

  • 【概念】描述了系统内部的软件如何分布在不同的节点上。
  • 【目的】用来表示软件和硬件的映射关系。

image-20201024212347530

图中简单的表示,不同机器上面部署的不同软件。

13. 包图

  • 【概念】描绘了系统在包层面上的结构设计。
  • 【目的】用来表示包和包之间的依赖关系。

image-20201024212502812

  • 《Use》关系表示使用依赖,Web Shopping依赖Payment
  • 《Merge》关系表示合并,Web Shopping合并了Shopping Cart就拥有了Shopping Cart的功能
  • 《Access》关系表示私有引入,比如代码中的指定包名类名
  • 《Import》关系表示公共引入,比如Java中的import之后,就可以直接使用import包中的类了

14. 轮廓图

  • 【概念】轮廓图提供了一种通用的扩展机制,用于为特定域和平台定制UML模型。
  • 【目的】用于在特定领域中构建UML模型。

image-20201024212902942

图中我们定义了一个简易的EJB的概要图。Bean是从Component扩展来的。Entity Bean和Session Bean继承了Bean。EJB拥有Remote和Home接口,和JAR包。