uml快速入门(弹射起步)

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

这个语言由葛来迪·布区,伊瓦尔·雅各布森与詹姆士·兰宝于1994年至1995年间,在Rational Software公司中开发,于1996年,又进一步发展。UML集成了Booch,OMT和面向对象程序设计的概念,将这些方法融合为单一的,通用的,并且可以广泛使用的建模语言。UML打算成为可以对并发和分布式系统的标准建模语言。

UML并不是一个工业标准,但在Object Management Group的主持和资助下,UML正在逐渐成为工业标准。OMG之前曾经呼吁业界向其提供有关面向对象的理论及实现的方法,以便制作一个严谨的软件建模语言(Software Modeling Language)。有很多业界的领袖亦真诚地回应OMG,帮助它建立一个业界标准。维基百科

为什么要学 UML

  • 建模语言标准
  • 用 UML 来分析和设计每一个模式的结构

前置知识

  • 熟悉 Java 或类似 Java 的语言(C#,Dart,javascript)
  • 对设计模式有简单的了解

相关软件

powerDesigner
Rational Rose
Together
StarUML

UML 简介

诞生

维基百科UML

UML 结构

本文中的uml图全部由plantuml生成

视图(view)

  1. 用户视图 以用户的观点表示系统的目标,是所有视图的核心,该视图描述系统的需求
  2. 结构视图 静态行为,描述系统的静态元素,包,类,对象
  3. 行为视图 动态行为,系统的组成元素(对象)在系统运行时的交互关系
  4. 实现视图 逻辑元素的分布,物理文件以及他们之间的关系
  5. 环境视图 物理元素的分布,硬件设备以及它们之间的关系

图(Diagram)

  1. 用例图 对应用户视图
  2. 类图 对应结构视图
    用例图和类图是 UML 13 种图种使用频率最高的两种图
  3. 对象图
  4. 包图
  5. 组合结构图
  6. 状态图
  7. 活动图
  8. 顺序图 对应行为视图
  9. 通信图
  10. 定时图
  11. 交互概览图
  12. 组件图 对应实现视图
  13. 部署图 对应环境视图

模型元素
在 UML 中,模型元素包括事物以及事物之间的联系,事物是 UML 的重要组成部分,它代表任何可以定义的东西。

通用机制
UML 提供的通用机制为模型元素提供额外的注释,修饰和语义等,主要包括规格说明,修饰,公共分类和扩展机制四种。

UML 特点

  1. 工程化:UML 的引入可以使得软件工程与其他工程领域一样,根据需求创建模型,再通过模型来指导实施。这些模型可以指导软件开发的各个阶段,而且由于模型的创建工作在实施之前完成,所以,使用模型来验证需求可以让用户及早的发现问题,减少系统的开发风险,降低开发和维护成本 [1 ]刘伟.设计模式[ M]北京:清华大学出版社.2018(2019.7 重印):4-4
  2. 规范化:UML 通过一套标准的符号对系统进行建模,对于相同的符号的不同用户都有相同的理解
  3. 可视化:UML 提供一组图形符号对系统进行可视化建模,促进对问题的理解和交流。帮助设计者直观地发现设计中存在的问题。避免和减少设计缺陷的产生。
  4. 系统化:UML 提供了 5 大视图和 13 种图,从不同角度对一个软件进行系统化建模
  5. 智能化:正向工程和逆向工程

类图

在 UML 类图种,类一般由三部分组成。

  1. 类名 参考 java 命名规范,类名种首字母均大写
  2. 属性 UML 规定属性的表示方式为可见性 名称:类型 [= 默认值] 默认值可选

可见性 public(+),private(-),protected(#)
java 语言增加了一种包内可见性 package,在 UML 种用符号*表示,为保证数据的封装性,属性的可见性一般为 private,通过公有的 getter 和 setter 方法对外界使用

属性名参考 java 语言的命名规范,属性名第一个单词首字母一般小写,之后每个单词首字母大写

类的操作

操作是类的任意一个实例对象都可以使用的行为,操作是类的成员方法。 UML 规定操作的表示方式为 可见性 名称([参数列表])[:返回类型] 各项定义参考属性定义,参数个数任意,多个参数用逗号隔开。

类之间的关系

关联关系 用于表示一类对象与另一类对象之间有联系 如汽车和轮胎,班级和学生

  1. 双向关联 默认情况下,关联是双向的 如顾客购买商品并拥有商品
  2. 单向关联 类的关联关系也可以是单向的,如顾客拥有地址 dd
  3. 自关联 链表节点的成员又是节点对象
  4. 多重性关联 在 UML 种多重性关联关系可以直接在关联直线上增加一个数字表示与之对应的另一个类的对象个数

常见的多重性定义

表示方式 多重性说明
1..1 表示另一个类的一个对象只与一个该类对象有关系
0..* 表示另一个类的一个对象与零个或多个该类有关系
1..* 表示另一个类的一个对象与一个或多个该类对象有关系
0..1 表示另一个类的一个对象没有或只与一个该类对象有关系
m..n 表示另一个类的一个对象与最少 m、最多 n 个该类对象有关系

例如,一个界面可以零个或多个按钮,但是一个按钮只能属于一个界面

  1. 聚合关系 表示一个整体与部分的关系 通常在定义一个整体类后,再去分析这个整体类的组成结构,从而超出一些成员类,该整体类和成员类之间就形成了聚合关系。如一台计算机包含显示器,主机,键盘,鼠标等部分。在聚合关系中,成员类是整体类的一部分,即成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。 在 UML 中,聚合关系用带空心棱形的直线表示。 [2 ]刘伟.设计模式[ M]北京:清华大学出版社.2018(2019.7 重印):10-10

  1. 组合关系 组合关系也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期,一旦整体对象不存在部分对象也将不存在。

聚合关系表示整体与部分的关系比较弱,而组合关系比较强,聚合关系中代表部分事物的对象与代表整体事物的对象的生存期无关,删除整体对象并不表示部分对象被删除,从代码实现角度来看也略有区别,聚合关系通过对象注入的啊方式来实现,而组合关系通过则整体类的构造函数中实例化成员类来实现,但是他们的共同点是一个类的实例为另一个类的成员对象[3 ]刘伟.设计模式[ M]北京:清华大学出版社.2018(2019.7 重印):12-12

聚合关系和组合关系与普通的关联关系主要是语义上的区别。如表示客户类与产品类的关系就不能用聚合和组合,应为产品并不是客户的一部分,不存在整体与部分关系,只能用普通的关联关系。

依赖关系

特定事物的改变有可能回影响到使用该事物的其他事物,在需要表示一个事务使用另一个事物时使用依赖关系。大多数时候依赖关系体现在某个类的方法使用另一个类的对象作为参数。

泛化关系

泛化关系也就是继承关系,也称为”is-a-kind-of”关系,泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。

接口与实现关系

接口之间也可以又与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现关系。在这种关系中,类实现了接口,类中的操作实现了接口中所有声明的操作。

示例类图

顺序图

状态图