一文带你入门UML!

发布于:2022-11-09 ⋅ 阅读:(11) ⋅ 点赞:(0) ⋅ 评论:(0)

导读

1:什么是UML?
2:UML图的基本介绍
3:UML类图的精讲
4:UML状态图精讲
5:总结
6:参考资料
7:画图工具

什么是UML?

简单介绍

官方定义:UML - Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,用于帮助软件开发人员进行思考和记录思路的结果

UML是对软件密集型系统中的制品进行可视化、详述、构造和文档化的语言。制品{Artifact}是指软件开发过程中产生的各种各样的产物,如模型、源代码、测试用例等。

简单来说,UML是一门语言,在统一的标准规则下,用于给对象建模,可应用于软件开发过程中的不同场景,如需求分析,组件开发,用例测试等等。

UML的历史

面向对象软件工程的概念由Booch提出,Booch也是面向对象方法最早的倡导者之一。Booch 1993表示法比较适用于系统的设计和构造。

Rumbaugh等人提出了面向对象的建模技术(OMT)方法,采用面向对象的概念,并引入各种独立于语言的表示符。用对象模型、动态模型、功能模型和用例模型共同完成对整个系统的建模,所定义的概念和符号可用于软件开发的全过程,软件开发人员不必在不同阶段进行概念和符号的转换。OMT-2适用于分析和描述数据为中心的信息系统。

1994年Jacobson提出了OOSE方法,其最大特点是面向用例,并在用例的描述中引入了外部角色的概念。OOSE适合支持商业工程和需求分析。

1996年10月,UML建模语言获得了700多个公司支持,到1996年年底,UML已稳占面向对象技术市场的85%,成为可视化建模语言事实上的工业标准。

1997年年底,OMG组织(Object Management Group,对象管理组织)采纳UML 1.1作为基于面向对象技术的标准建模语言,目前最新版本为UML 2.0,UML发展史如下图所示。

在这里插入图片描述

UML的构成

UML构成主要分成三大块:UML的基本构造块、UML的规则、UML的公共机制

UML的基本构造块

UML的基本构造块包括事物、关系和图。

  1. 事物是构成模型图的基本符号,表示一些面向对象的基本概念,分为结构事物、行为事物、分组事物和注记事物。
  2. UML中类与类、类与接口以及接口与接口之间的关系总共有四种:依赖、关联、泛化和实现。
  3. UML中包括九种图分为五大类:用例图、静态图、行为图、交互图、实现图

其中事物与关系,构成了图

UML的规则

我们不能简单地把UML的构造块随机的摆放在一起,结构良好的模型应该在语义上自我一致,并且与所有的相关模型协调一致。UML有自己的语法和语义规则,分别是命名规则、范围、可见性、完整性和执行。

UML的公共机制

UML的公共机制分别是规格说明、修饰、通用划分以及扩展机制。

  1. UML不只是一种图形语言,实际上它的图形表示法的每一部分背后都有规格说明。规格说明提供了对构造块的语法和语义上的文字叙述,uml的图形表示法用来对系统提供可视化,规格说明用来描述系统的细节。uml的规格说明提供了一个语义底版,包含了系统各模型的所有部分,并且各部分之间相互联系,保持一致。
  2. UML表示法中每一个元素都有一个基本符号,可以把各种修饰细节加到这个符号上。
  3. 通用划分分为类/对象二分法和接口/实现二分法。类是一个抽象,对象是这个抽象的一个具体形式;接口声明了一个契约,而实现则表示了对该契约的具体实施,实现负责如实地实现接口的完整语义。
  4. 扩展机制是对UML图示符号的扩展,包括构造型(stereotype)、标注型(tagged value)和约束(constraint)。

UML中的视图

用例图

  • 用例图

静态图

  • 类图
  • 对象图
  • 包图

行为图

  • 状态图
  • 交互图
  • 活动图

实现图

  • 构件图
  • 部署图

UML的特点

  • 统一的标准
  • 可视化、表现能力强
  • 独立于过程,UML不依赖于特定的软件开发过程。
  • 面向对象。UML是支持面向对象软件开发的建模语言。
  • 概念明确,建模表示法简洁,图形结构清晰,容易掌握和使用。

为什么要学习UML?

UML建模可以达到以下目的:

  • 使用模型可以更好地理解问题
  • 使用模型可以加强人员之间的沟通
  • 使用模型可以更早地发现错误或疏漏的地方
  • 使用模型可以获得设计结果
  • 模型为最后的代码提供依据

UML图的基本介绍

用例图

用例图描述系统外部的活动者(角色)与系统提供的用例之间的某种联系。它着重从系统外部活动者的角度来描述系统需要提供哪些功能,并且指明了这些功能的执行者是谁。
在这里插入图片描述

静态图

静态图包括类图、对象图和包图。

类图

类图主要用来描述系统中各种类之间的静态结构。类与类之间的各种联系以及类的属性和行为都可以在类图中描述。

在这里插入图片描述

对象图

对象图是类图的一种变形,是对类图的实例化,即系统在某一时期或者某个特定时刻可能存在的具体对象实例以及它们之间的具体关系。
在这里插入图片描述

包图

包图是包和包之间的关系构成,是维护和控制系统总体结构的重要建模工具,用于描述系统的分层结构。

在这里插入图片描述

行为图

行为图包括状态图、交互图、活动图

状态图

状态图是对类的一种补充描述,展示类对象所具有的所有可能的状态以及某些事件发生时其状态的迁移情况。

在这里插入图片描述

交互图

交互图是描述对象之间的关系以及对象之间的信息传递的图。通常描述一个用例的行为,显示该用例中所涉及的对象之间的消息传递。 交互图可以帮助分析人员对战检查每个用例中描述的用户需求,如这些需求是否已经落实到能够完成这些功能的类中去实现,提醒分析人员去补充遗漏的类或方法。

序列图(时序图)、协作图(通信图)、交互概览图统称交互图。 序列图着重描述对象按照时间顺序的消息交换,协作图着重描述系统成分如何协同工作。

时序图

在这里插入图片描述

协作图

在这里插入图片描述

活动图

活动图本质上是一种流程图,它描述活动的序列,即系统从一个活动到另一个活动的控制流。
在这里插入图片描述

实现图

实现图包括构件图与部署图

构件图

构件图(component diagram)也叫组件图,它一般用来描述系统各个构件之间的依赖关系。
在这里插入图片描述

部署图

部署图描述的是系统运行时的结构,展示了系统的硬件配置、硬件部署,以及其软件如何部署到网络结构中(属于静态视图)。
在这里插入图片描述

UML类图精讲

类图是面向对象建模的主要组成部分,是静态图的典型代表,也是唯一一个能直接将模型转换成面对对象的编程代码的图形。

类图的基础属性

类的名字及其类型表示

在这里插入图片描述

类图由一个矩形表示,分为上中下三个部分,其中最上面的部分用来写类名。

通过斜体名字来表示抽象类
在这里插入图片描述

通过增加interface注释来表示接口类
在这里插入图片描述

属性及其类型,权限表示

在这里插入图片描述

属性写在类图中部

属性的写法: (权限)(属性名) : (属性类型)

其中权限有四种,分别为:

  • “-” private 私有属性,仅可本类使用
  • “+” public 共有属性
  • “#” protected 受保护属性 可在派生类(子类)中使用
  • “~” package 缺省属性 在本包内可使用

最后,下划线表示static

方法声明及其参数表示

在这里插入图片描述

方法写在类图的下方

方法的写法: (权限)(方法名)[(参数名)] : [返回值类型]

方法的权限与static表示方法与属性一致

类图间的关系

依赖

在这里插入图片描述

依赖表示:由依赖方(类B)连线被依赖方(类A),连接线为虚线,终点为箭头状,指向被依赖方(类A)

依赖含义:只要类中用到了对方。即一个类的实现需要另外一个类的协助,如果没有对方,就无法通过编译,就可以表示为依赖关系。其他五种关系都是依赖关系的特例

生活实例:小明想写一篇文章,需要纸笔。此时纸和笔便是小明依赖的对象。没有纸笔,小明就无法写文章。

代码体现:

  • 类中用到了另一个类
public class A {
    public B b = null;
}

public class B {
}
  • 类中用到了另一个类的成员属性
public class A {
    public String id = B.id;
}

public class B {
    public final static String id = "001";
}

泛化

在这里插入图片描述

泛化表示:由子类(类B)连线父类(类A),连接线为实线,终点为空心三角形,指向父类(类A)

泛化含义:泛化关系实际上就是继承关系,他是依赖关系的特例 , 如果 A 类继承了 B 类,我们就说 A 和 B 存在泛化关系

生活实例: 我们知道很多世界上有很多动物,而动物并不具体表示哪一种类型的动物,而是所有类型动物的一个抽象称呼。其中猫属于动物,它拥有动物所拥有的一切属性和方法。比如名字,体重,会动等等。这时我们就可以说猫是继承自动物。猫与动物之间存在泛化关系。

代码体现:

public class Animal {
    private String name;
    private int weight;
    public void eat();
}

public class Cat extends Animal {
    public void miao();
}

实现

在这里插入图片描述

实现表示:由实现类(类B)连线接口类(类A),连接线为虚线,终点为空心三角形,指向接口类(类A)

实现含义:实现关系实际上就是 A 类实现 B 接口,就表示A类和B类具有实现关系,也是依赖关系的特例

代码体现:

public interface Animal {
    public void eat(String food);
}

public class Cat implements Animal {
    public void eat(String food) {
        System.out.println("eating " + food);
    }
}

关联

在这里插入图片描述

关联表示:由类A连线类B,连接线为实线,终点为点/箭头,表示单向关联/双向关联,连接线上可以标注数字,以用来表示类A与类B间的数量关系。

关联含义:实际上就是类与类之间的联系,体现的是业务逻辑的关系 ,是依赖关系的特例。

生活实例:

  • 物理学家想要计算小球从十米的高空中自由落体的加速度时,需要运用到物理规则。因此物理学家和物理规则是关联关系,但因为物理规则不需要物理学家去做实验才会产生,而是本就在那,因此物理规则不需要关联物理学家。物理学家和物理规则是一种单向关联关系。
  • 我们进入到商场app里面,每个人有一个购物车,我们和购物车是一对一的关系。而一个购物车可以存放多个订单,那么购物车和订单之间就是一对多的关系。

代码体现:略

聚合

在这里插入图片描述

聚合表示:由部分类(类B)连线整体类(类A),连接线为实线,终点为空心菱形,连接线上可以标注数字,以用来表示类A与类B间的数量关系。

聚合含义:聚合关系表示的是整体和部分的关系,整体与部分可以分开聚合关系是关联关系的特例,所以他具有关联的导航性与多重性,是强的关联关系,关联和聚合在语法上无法区分,必须考察具体的逻辑关系

生活实例:一支大雁队伍由许多只大雁组成,大雁可以从大雁队伍中离开独立存在,并且大雁队伍也依然存在,这就表示大雁与大雁队伍是聚合关系。

代码体现:

//聚合关系
public class Computer {

    private Mouse mouse;

    private Monitor monitor;

    public void setMouse(Mouse mouse) {
        this.mouse = mouse;
    }

    public void setMonitor(Monitor monitor) {
        this.monitor = monitor;
    }
}

class Mouse{ } 

class Monitor{ }

组合

在这里插入图片描述

组合表示:由部分类(类B)连线整体类(类A),连接线为实线,终点为实心菱形,连接线上可以标注数字,以用来表示类A与类B间的数量关系。

组合含义:组合关系表述的也是整体与部分的关系,但是整体与部分不可以分开 ,同样,组合关系是关联关系的特例,必须考察具体的逻辑关系而定,语法层面是无法区分的

生活实例:汽车由车身,发动机,轮胎等组成。汽车无法在失去发动机的情况下存在,那么就表示汽车和发动机是组合关系。

代码体现:

/** 人和头的关系 */
public class Person {
    private Head head = new Head(); //组合关系
}

class Head{ }

测试一下

在这里插入图片描述

以上,我们就将UML类图的基本画法全部讲完,此时的你再看到这UML类图实例,是否熟悉了很多呢。

UML状态图精讲

状态图又称状态机图,用于描述一个对象在其生命周期中的各种状态及状态的转换。

状态图的常用元素

初始状态

在这里插入图片描述

元素表示:用实心的圆点表示

元素介绍:状态图用初始状态(Initial State)表示对象创建时的状态,每一个状态图都要有且 只有一个初始状态

终止状态

在这里插入图片描述

元素表示:用一个实心圆外加一个圆圈表示

元素介绍:每一个状态图可能有多个终止状态或者没有(Final State)

中间态

在这里插入图片描述

元素表示:这是一个简单的状态表示,用圆形矩形表示状态框,中间写上状态名字

元素介绍:指在对象的生命周期中的某个条件或者状况

在这里插入图片描述

元素表示:这是一个完整的状态表示,用圆形矩形表示状态框,分为上中下三部分。最上面写状态名字,中间写状态变量,最下面写行为。

元素介绍:指在对象的生命周期中的某个条件或者状况,在此期间对象将满足某些条件、执行某些活动或等待某些事件。

转移

在这里插入图片描述

元素表示:从一个状态到另一个状态之间的连线称为转移,又名迁移,连线为实线,终点为箭头。可在转移上添加转移事件,表示源状态触发转移事件后会进行转移。若不加转移事件,则表示在源状态的内部活动执行完毕后自动触发。

元素介绍:表示状态间的转换

测试一下

在这里插入图片描述

这是一副注册登录和发送消息的状态图,此时的你再看这幅图是否理解了许多呢。

提示:以上只是状态图常用的元素介绍,已足以应用于我们的日常。但其中还存在许多额外的图形表示,如历史状态,内部状态,复合状态等等,限于篇幅就不一一介绍,有兴趣可以自行寻找资料学习。

总结

UML身为一门语言,并不只是简单画图。或者说画图只是它最简单的部分。以上的教程是为了让读者能够初步入门UML,对UML的大体概念有稍微的了解。同时我还在静态图和动态图中选择了两类大家作为程序员用的最多,最典型的代表图进行精讲,以方便未来大家进行拓展,自学时有较为清晰的思维路径。

UML只是一个工具,想学好UML最重要的并不是去学习,研究它的规则,记住它的图示。而是在相应的需求场景中,深入了解该场景需求,拥有清晰认知,最终才能通过UML输出对应的图文内容。切勿本末倒置。

参考资料

画图工具

本文使用的是在线画图网站ProcessOn

常用的UML画图工具有

  • ProcessOn
  • Visio
  • Rational Rose
  • PowerDesign
  • Enterprise Architect

以上,客官都看到这啦,点个赞再走吧~