【UML】统一建模语言
如果是准备学习设计模式的同学,可以只了解类图相关的知识
而如果是在准备软件设计师考试的同学,或许会对你有点帮助
正在施工......
参考博客:https://blog.csdn.net/unique_perfect/article/details/104989118
UML 统一建模语言
统一建模语言(UML,Unified Modeling Language)是面向对象软件的标准化建模语言。UML因其简单、统一的特点,而且能表达软件设计中的动态和静态信息,目前已成为可视化建模语言的工业标准。在软件无线电系统的开发过程中,统一建模语言可以在整个设计周期中使用,帮助设计者缩短设计时间,减少改进的成本,使软硬件分割最优。
UML 中的三个基本模块:事务,关系,图。
UML 分类
类就像是工厂中的流水线,而对象就是流水线上制作出的产品。
UML 静态结构图
静态结构图就是基于类用于描述这条流水线的。
| 图名 | 作用 |
|---|---|
| 类图 | 表示分析设计领域的静态结构 |
| 对象图 | 表示系统中的多个对象在某一时刻的状态 |
| 包图 | 对UML的模型元素进行分组整理,还可以表示多个包之间的关系 |
| 构建图 | 表示构成软件的各个可重复再利用的部件的内部结构以及部件之间的相互关系 |
| 结合结构图 | 表示具有复杂内部结构的类或者构件的内部结构 |
| 部署图 | 表示系统执行时的硬件构成以及硬件节点之间的关系 |
UML 动态行为图
动态行为图基于对象用于描述这条流水线上的产品的交互、行为等。
| 图名 | 作用 |
|---|---|
| 用例图 | 表示从系统外部看到的系统所提供给用户可以使用的功能 |
| 活动图 | 表示某个业务的具体处理流程 |
| 状态图 | 表示某个对象在其生命周期内,各个状态之间的迁移变化及引起状体迁移的触发事件之间的关系 |
下面这三种图都属于(交互图)
| 图名 | 作用 |
|---|---|
| 顺序图 | 按照时间顺序从上到下来表示生命线之间的信息交互,可结合用例图表示某个用例的场景。 |
| 通信图 | 以参与交互的生命线之间的连接为着眼点表示生命线之间的信息交互。交互概念图:用活动图的形式表示多个交互之间的控制关系。 |
| 时序图 | 表示多个生命线的状态变化和时间之间的关系。 |
用例图
用例图是9种UML图中比较重要的图之一,它是由软件需求分析到最终实现的第一步,描述人们希望如何使用一个系统,最常用来描述系统以及子系统。
用例图的组成
| 事务 | 描述 | 图例 |
|---|---|---|
| 参与者(Actor) | 与应用程序或系统进行交互的用户、组织或外部系统。 | ![]() |
| 用例(UseCase) | 用例就是外部可见的系统功能,对系统提供的服务进行描述。 | ![]() |
| 子系统(Subsystem) | 用来展示系统的一部分功能,这部分功能联系紧密。 | ![]() |
用例图所包含的的关系
用例图中涉及的关系有:关联、泛化、包含、扩展。

a. 关联(Association)
表示参与者与用例之间的通信,任何一方都可发送或接受消息。
【箭头指向】:无箭头,将参与者与用例相连接,指向消息接收方

b. 泛化(Inheritance)
就是通常理解的继承关系。在实际应用中很少使用泛化关系,子用例中的特殊行为都可以作为父用例中的备选流存在。
【箭头指向】:指向父用例

c. 包含(Include)
提取公共交互,提高复用
【箭头指向】:指向分解出来的功能用例

d. 扩展(Extend)
“冻结”基用例以保持稳定,并且动态扩展基用例功能
【箭头指向】:指向基础用例

例子比如这是一个用户管理的用例图

类图
类图是描述系统中的类,以及各个类之间的关系的静态视图。是面向对象系统建模中最常用和最重要的图,是定义其他图的基础。
类图示例
一个Employee类,它包含private属性age,protected属性name,public属性email,package属性gender,public方法work()。

- +、-、#、~ 表示属性及方法可见性
- public 用 + 表示
- private 用 - 表示
- protected 用 # 表示
- package 用 ~ 表示
接口的UML图示

在UML类图中,常见的有以下几种关系
| 关系 | 指向 | 例子 | 图示 |
|---|---|---|---|
| 泛化 | 从子类指向父类,或者子接口指向父接口。 | 类和子类的关系。比如学生类可以继承人类。 | ![]() |
| 实现 | 箭头指向成员变量类。 | 两个类之间的关联,也可以是一个类和自身的关联。比如班级类和学生类,学生类作为成员变量存在于班级类中。 | ![]() |
| 关联 | 箭头指向成员变量类。 | 两个类之间的关联,也可以是一个类和自身的关联。比如班级类和学生类,学生类作为成员变量存在于班级类中。 | ![]() |
| 依赖 | 箭头指向入参类 | 一个类A使用到了另一个类B,但是这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A。比如班级类和学生类,班级类作为学生类的方法入参。 | ![]() |
| 聚合 | 菱形部分指向整体,箭头指向个体 | 整体和部分的关系。比如大雁和雁群之间的关系,两者不是生命周期不同。 | ![]() |
| 组合 | 菱形部分指向整体 | 整体和部分关系、整体部分不可分离、比聚合更强。比如大雁和大雁翅膀的关系,两者是同生共死的。 | ![]() |
类图示例

对象图、包图
对象图的组成
对象图中的建模元素有对象和链
对象之间的关系,被称为链。
对象是类的实例,链是关联的实例
对象的基本特征可以归纳为对象的属性和行为两类,对象名必须小写

包图
可类比java中的包机制
包图只有依赖关系
当一个包将另一个包导入时,该包里的元素能够使用被导入包里的元
素,而不必在使用时通过包名指定其中的元素。
例如,当使用某个包中的类时,如果未将包导入,则需要使用包名加
类名的形式引用指定的类。在导入关系中,被导入的包称为目标包。
要在UML中显示导入关系,需要画一条从包连接到目标包的依赖性箭
头,再加上字符import,如图所示。
A包导入B包,则可以直接使用B包中的类。如果没有的话,则是B.类表示

活动图
活动图本质是上是一种流程图,但是活动图是面向对象的,而流程图是面
向过程的。

活动图与流程图的区别
| 区别 | 流程图 | 活动图 |
|---|---|---|
| 描述 | 着重描述处理过程(顺序分支循环)流程图做不到 | 描述的则是对象活动的顺序关系所遵循的规则。 |
| 思想 | 面向过程 | 面向对象 |
| 方向 | 有着严格的处理顺序和处理时间关系(不能表示并发活动的情形) | 着重表现的是系统的行为,而非处理过程。(能够表示并发活动的情形) |
活动图实例
网吧会员系统

顺序图(跟协作图,也叫做通信图等价)
顺序图主要有:对象、生命线、消息和激活。用来建模以时间顺序安排的对象交互,并且把用例行为分配给类。

- 小人:动作的发起人
- 矩形/小圆圈:对象
- 实线箭头:调用
- 虚线箭头:返回
- 柱状:对象的生命周期,柱状不能断,在同一流程当中不能断。
- 回折线:当前对象中的方法执行过程中调用自己当前类中的方法
顺序图和协作图的异同
- 相同点
- 顺序图和协作图都可以表示对象间的交互关系,但它们的侧重点不同。
- 都能体现出系统用例的行为。
| 异同点 | 顺序图 | 协作图 |
|---|---|---|
| 对象间通信方式 | 用消息的几何排列关系来表达对象间交互消息的先后时间顺序。 | 用建模对象(或角色)间的通信关系。 |
| 描述对象 | 按时间顺序描述对象的消息交换过程 | 它描述对象间的组织协作关系 |
协作图
与顺序图等价
时序图
时序图侧重于描述时间对系统交互的影响,因此时序图的一个重要的特
征是加入了时间元素。 时序图上的时间由左到右横跨页面。
状态图
一般不去描述参与者类对象的状态。要描述的是系统内部的
核心对象的状态。
活动图与状态图
活动图描述的是用例的行为,而状态图描述的是对象。
活动图可以包含多个对象。而状态图只可以包含一个对象。
构造实现方式图
包括有组件图跟部署图
组件图
组件图显示软件组件的组织以及组件之间的依赖关系,包
括源代码组件、二进制代码组件以及可执行组件。
包括组件、接口、依赖关系
组件图实例

组件与类的比较
相同点
- 两者都有名称;
- 都可以实现一组接口;
- 都可以参与依赖关系;
- 都可以被嵌套;
- 都可以有实例;
- 都可以有参数和交互;
不同点
- 类描述了软件设计的逻辑组织和意图
- 而组件则描述软件设计的物理实现(即:每个组件体现了系统设计中特定类的实现)
部署图
组件图用来建模软件组件,而部署图用来对部署系统时涉及到的硬件进行建模。
节点表示一种硬件。组件表示逻辑元素的物理包装,即类的物理包装,而节点表示组件的物理配置。
节点的种类:处理器跟设备。
处理器是能够执行软件、具有计算能力的节点。
设备是没有计算能力的节点,通常情况下都是通过其接口为外部提供某种服务
部署图实例

【UML】统一建模语言的更多相关文章
- 技术人应该学习的行话--UML统一建模语言
新生代码农如何在硝烟弥漫的商业丛林中生存和崛起? 洞见,让一部分先遇见未来. 最近公司技术部在组织架构师培训,有幸参与.导师老刘特别推荐了UML语言的学习.回想多年来,自己习惯做一些流程图,框图或者所 ...
- 设计模式学习总结(一)——设计原则与UML统一建模语言
一.概要 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性. 设计 ...
- 1. UML统一建模语言
(1)UML概述: 建模: 对现实系统进行适当的过滤, 用适当的表现规则描述出简洁的模型. 建模是一种深入解决问题的方法. UML: UML(United Modeling Language, 统一建 ...
- UML统一建模语言
概述 统一建模语言(UML)是一种图形化的语言,用于软件密集系统要素的可视化.制定规范.构建对象和编写文档.UML提供了一种标准的方式来描述系统的设计图,既包括概念方面,例如业务过程和系统功能,也包括 ...
- 2017.12.23 第二章 统一建模语言UML概述
第二章 统一建模语言UML概述 (1)为什么要建模 模型是某个事物的抽象,其目的是在构建这个事物之前先来理解它,因为模型忽略了那些非本质的细节,这样有利于更好的理解和表示事物: 在软件系统开发之前首先 ...
- UML标准建模语言与应用实例
一.基本信息 标题:UML标准建模语言与应用实例 时间:2012 出版源:科技创新导报 领域分类:UML标准建模语言 面向对象 系统分析与设计 二.研究背景 问题定义:UML建模语言用图形来表现典型的 ...
- 统一建模语言UML---类图
什么是统一建模语言,来看看百科中的介绍统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明.可视化和编制文档的一种标准语言,是非专利的第三代建模 ...
- 统一建模语言UML
目录 1. UML定义 2. UML结构 2.1 视图(View) 2.2 图(Diagram) 2.3 模型元素(Model element) 2.4 通用机制(General mechanism) ...
- UML2.0统一建模语言
Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规 ...
随机推荐
- Luogu[YNOI2019]排序(DP,线段树)
要最优?就要一步到位,不能做"马后炮",走"回头路",因此将序列映射到一个假定最优序列,发现移动原序列等价于删除原序列元素,以便生成最大不下降子序列.可线段树维 ...
- 在DispatcherServlet.class中的,获取方法值中获取到的都是arg值
原先java虚拟机中在编译是不带着方法的形参的名称,但是在jdk8中是可以带了 只需要在Settings中设置以下: -parameters 再把out文件中的production文件删到在查询bui ...
- PerfView专题 (第十二篇):对 C# 下的 SDK 类库进行监控(大结局)
一:背景 本篇是我们系列文章的最后一篇,前面的文章中大多是在 CLR Runtime 以及 OS 层面进行监控来发现各种可疑的程序问题,除了这两个层面,其实我们还可以对 SDK 中一些类进行洞察,比如 ...
- 最小生成树(prime+kruskal)
1.prime算法 prime算法类似于bfs,就是判断每次连接的点中距离最短的,加入到树中,具体如下: prime算法要求一开始随便选择一个点作为起点,因为最小生成树包括所有点,所以起点随机即可(一 ...
- 深度学习库 SynapseML for .NET 发布0.1 版本
2021年11月 微软开源一款简单的.多语言的.大规模并行的机器学习库 SynapseML(以前称为 MMLSpark),以帮助开发人员简化机器学习管道的创建.具体参见[1]微软深度学习库 Synap ...
- JAVA中让Swagger产出更加符合我们诉求的描述文档,按需决定显示或者隐藏指定内容
大家好,又见面啦. 在前一篇文档<JAVA中自定义扩展Swagger的能力,自动生成参数取值含义说明,提升开发效率>中,我们探讨了如何通过自定义注解的方式扩展swagger的能力让Swag ...
- 【Vue学习笔记】—— vuex的语法 { }
学习笔记 作者:o_Ming vuex Vuex ++ state ++ (用于存储全局数据) 组件访问 state 中的全局数据的方式1: this.$store.state.全局数据 组件访问 s ...
- [Python]-pdb模块-单步调试
使用pdb模块辅助python调试. import pdb 断点模式 在需要调试的语句前设置断点,加入这行代码: pdb.set_trace() 程序运行到这就会进入断点调试模式. 输入 作用 n 运 ...
- Activiti 7 源码学习
1. 启动分析 源码是 7.1.0.M6 首先从 ProcessEngineAutoConfiguration 开始 ProcessEngineAutoConfiguration 是activiti ...
- 搭建Elasitc stack集群需要注意的日志问题
文章转载自:https://blog.csdn.net/u013613428/article/details/84943577 {{uploading-image-736853.png(uploadi ...








