UML

本文最后更新于 2024年6月7日 下午


提到UML就不得不让人想到这幅图,UML就如图中所绘一样是这三个老哥思维精华所汇。

image.png

UML的优势

  1. 过去数十种面向对象的建模语言各自为战,而UML消除了一些潜在的差异,一统江湖
  2. 通过统一语义和符号表示,提高了面向对象
  3. 使项目建立在一个成熟的标准建模语言之上
  4. 便于沟通和交流,统一的理解

UML组成

  1. 构建块
  2. 公共机制
  3. 架构

构建块

  1. 事物
  2. 关系

UML中的关系

  • 关联
    image.png

  • 依赖
    image.png

  • 泛化(子类与父类之间的关系,注意箭头指向父类)
    image.png

  • 实现(实现接口)
    image.png

  • 聚合(…组成…/…包含… ,指向整体,整体消失部分可以单独存在)
    image.png

  • 复合(与聚合不同,若整体消失则部分没有存在的意义)
    image.png

UML中的图

  • 静态模型:类图、对象图、部署图、构件图
  • 动态模型:顺序图、协作图、活动图、状态图、用例图

用例图

用例图是从系统外部,从用户的角度描述系统的功能集,常用于需求分析阶段。参与者是与系统交互的人或事物。

主要图示:

image.png

需要注意的是“include”和“extend”的区别:
在我个人的理解上,“include”指的是必须包含的内容,比如:取款必须输入密码。而“extend“则是指不一定发生,是一个可选的部分,比如:取款后不一定需要打印凭证,这是可选的。

类图

  • 从上到下分为三部分,分别是类名、属性和操作。类名是必须有的
  • 类如果有属性,则每一个属性都必须有一个名字,另外还可以有其它的描述信息,如可见性、数据类型、缺省值等
  • 类如果有操作,则每一个操作也都有一个名字,其它可选的信息包括可见性、参数的名字、参数类型、参数缺省值和操作的返回值的类型等

image.png

  1. 接口
    image.png

  2. 抽象类与模板类

  • 抽象类:不能被实例化的类,一般至少包含一个抽象操作
  • 模板类:一种参数化的类,在编译时把模版参数绑定到不同的数据类型,从而产生不同的类

image.png

需要注意的是,类图中的依赖关系,描述的是类A调用了另一个类B中的方法,或者类A中的某个局部变量、传参、返回类型为类型B。这是最弱的一种关系。

对象图

对象图使用的图形和关系和类图很像,不同之处在于:

  1. 类图描述的是抽象的类,而对象图是实例化的对象,是具体的
  2. 对象图中对象名下方有一条直线
  3. 对象图只有两栏:对象名和属性,也就是说没有操作栏

顺序图

顺序图描述的是对象之间的动态交互关系,着重表现对象间消息传递的时间顺序。顺序图中主要符号有:参与者、对象、对象的生命线、消息。参与者是小人的标记,对象用矩形框表示(矩形框中写有名称,格式为:“对象名:类名”,且名字下面有下划线。)

image.png

消息主要有以下几种,用到最多的就是简单消息了。
image.png

协作图:

协作图是顺序图的一种变体,因此可以和顺序图相互转化。顺序图着重强调对象消息传递在时间上的顺序,而协作图强调的是对象间的交互关系。对象的表示方式同顺序图。

image.png

协作图中需要注意的就是消息流上的标签。

标签的格式为:
[前缀/] [守卫条件] 序列表达式: [返回值 :=] 消息名

读取消息标签时从后向前读,返回值最后有”:=“,序列表达式最后跟着”:“,前缀后跟着“/”。

状态图

状态图描述一个特定对象所有可能的状态,以及引起状态转移的事件,状态图包含一系列状态、事件以及转移。

image.png

活动图

活动图描述的是系统业务在没有外部事件触发下的执行过程,类似于流程图。存在外部触发时使用状态图更容易描述。

活动图的主要对象如下:

image.png

注意:每个泳道划分出的是系统中的不同的对象

image.png

构件图

构件图是静态建模,它可以用来显示程序代码如何分解成模块或组件。一般来说,组件就是一个实际文件。

  • 构件图的描述方式:
    image.png

构件图不同于类图与对象图的是系统中各物理部件之间的服务的依赖提供关系。而不是对象图中对象之间的关系。

  • 例如:

部署图

部署图,图如其名是用来描述部署时的状态的,也就是说他是用来描述软件实现完成后在硬件上的部署环境的。通过部署图,系统的相关人员可以知道软件应该安装在具体的那个硬件之上。

  • 部署图中的主要对象:

image.png

部署图中也存在构件,但构件必须存在于节点中,不能单独存在。

部署图表现构件实例;构件图表现构件类型的定义。

  • 部署图中的关系

image.png

需要注意的是用实线表示的关系是有区别的:节点内表示服务提供关系(实现),节点间表示的是通信关系(关联)。


UML
https://siegelion.cn/2020/05/28/UML/
作者
siegelion
发布于
2020年5月28日
许可协议