【UML】统一建模语言 UML 基础
【UML】统一建模语言UML 基础
文章目录
- 一、概述
- 1.1 - 什么是建模
- 1.2 建模的原则
- 1.3 软件建模的实现过程
- 二、 UML
- 2.1 UML中10种图
- 三、用例图
- 3.1 用例之间的关系 —— 泛化关系
- 3.2 用例之间的关系 —— 包含关系
- 3.3 用例之间的关系 —— 扩展关系
- 四、类图
- 4.1 类的表示方法
- 4.2 类之间的关系 —— 泛化关系
- 4.3 类之间的关系 —— 实现关系
- 4.4 类之间的关系 —— 依赖关系
- 4.5 类之间的关系 —— 关联关系
- 4.6 关联关系的名称
- 4.7 关联关系的角色
- 4.8 关联关系的多重性
- 4.9 类之间的关系 —— 关联 - 聚合
- 4.10 类之间的关系 —— 关联 - 组合
一、概述
1.1 - 什么是建模
统一建模语言
开发之前 规划 骨架规划好,然后
什么是建模,
软件设计:把软件开发想清楚的过程
软件工程:对软件开发全过程进行建模和管理
互联网开发模式,敏捷开发。
比如12个功能,只做一个核心功能,投放市场看用户反馈,早早与用户需求完全靠拢,极限编程。
模型:对问题的书面上的无歧义文字或图形的描述。简而言之,模型是对现实的简化。通过模型,人们可以了解所研究事物的本质。
模型是对现实实际问题的简化,比如地图。
1.2 建模的原则
1)选择建立什么样的模型对如何发现和解决问题具有重要的影响。正确的模型有助于提高开发者的洞察力。
盖狗窝 和 盖高楼不一样,盖高楼需要考虑避雷,电梯规划等等的。
2)每个模型可以有多种表达方式。使用者的身份和使用的原因是评判模型好坏的关键
3)最好的模型总是能够切合实际。模型是现实的简化,必须保证简化过程不会掩盖任何重要的细节。
1.3 软件建模的实现过程
软件建模的作用是把来源于现实世界的问题转化为计算机可以理解和实现的问题。
现实世界 —映射—> 计算机世界
软件建模的实现过程是从需求入手,用墨香表达分析设计过程,最终将模型映射程软件实现。
需求 --> 模型 --> 编码
二、 UML
- UML(United Modeling Language, 统一建模语言): 是一种基于面向对象可视化建模语言。
- UML采用了一组形象化的图形(如类图)符号作为建模语言,使用这些符号可以形象地描述系统地各个方面
- UML通过建立图形之间的各种关系(如类与类之间的关系)来描述模型。
2.1 UML中10种图
- 类图
- 对象图
- 包图
- 组件图
- 部署图
- 用例图
- 时序图
- 协作图
- 状态图
- 活动图
三、用例图
1 - 用例图(Use Case Diagram): 也称为用户模型图,是从软件需求分析到最终实现的第一步,它是从客户的角度来描述系统功能。
2 - 用例图包含 3 个基本组件:
参与者(Actor): 与系统打交道的人或其他系统即使用系统的人或事物。在 UML 种参与者用人形图标表示
用例(Use Case): 代表系统的某项完整功能。在 UML 种使用一个椭圆来表示
关系: 定义用例之间的关系 —— 泛化关系、扩展关系、包含关系

3.1 用例之间的关系 —— 泛化关系
泛化关系:表示同一业务的目的(父用例)的不同技术实现(各个子用例)。在UML中,用例泛化用一个三角箭头从子用例指向父用例。以下是某购物网站为用户提供不同的支付方式

3.2 用例之间的关系 —— 包含关系
一个用例可以包含其他用例具有的行为,并把它包含的用例行为作为自身行为的一部分。在 UML 中包含关系用虚线箭头加 "<<include>>",箭头执行被包含的用例。

3.3 用例之间的关系 —— 扩展关系
如果在完成某个功能的时候偶尔会执行另外一个功能,则用扩展关系表示,在UML中扩展关系用虚线箭头加<<extend>>, 箭头指向被扩展的用例。

四、类图
类图是面向对象系统建模中最常用的图,是定义其他图的基础。
类图主要是用来显示系统中的类,接口以及它们之间的关系。
类图包含的主要元素有类、接口和关系。其中关系有泛化关系、关联关系、依赖关系和实现关系。在类途中也可以包含注释和约束
4.1 类的表示方法
- 类是类图的主要组件,由三部分组成:类名、属性和方法。在UML中,类用矩形来表示,顶端部分存放类的名称,中间部分存放类的属性,属性的类型及值,底部部分存放类的方法,方法的参数和返回。
- 在UML中可以根据实际情况由选择的隐藏属性部分或方法部分或者两者都隐藏。
- 在UML中,公有类型由
+表示,私有类型用-表示,保护类型用#表示,UML的工具开发上可以使用自己定义的符号表示不同的可见性
4.2 类之间的关系 —— 泛化关系
- 在UML中,泛化关系用来表示类与类,接口与接口之间的继承关系,泛化关系有时也称为“is a kind of” 关系
- 在UML中泛化关系用一条实线空心箭头由子类指向父类

4.3 类之间的关系 —— 实现关系
在UML中,实现关系用来表示类与接口之间,实现关系用一条虚线空心箭头由子类指向父类。

4.4 类之间的关系 —— 依赖关系
对于两个相对独立的系统,当一个系统负责构造另一个系统的实例,或者依赖另一个系统的服务时,这两个系统之间体现为依赖关系。例如生产零件的机器和零件,机器负责构造零件对象,充电电池和充电器,充电电池通过充电器来充电。自行车Bicycle和打气筒Pump,自行车通过打气筒来充气

class Bicycle
{
public:void run();
};
// 如果说 Person类 有一个成员方法,将Bicycle当作一个形参来传递,并且Person没有 Bicycle成员
// 就说Person类依赖于 Bicycle
class Person
{
public:void goToWork(Bicycle* bcl){bcl->run();}
};
4.5 类之间的关系 —— 关联关系
对于两个相对独立的系统,当一个系统的实例与另一个系统的一些特定实例存在固定的对应关系时,这两个系统之间为关联关系。例如客户和订单,每个订单对应特定的客户,每一个客户对应一些特定的订单;公司和员工,每一个公司对应一些特定的员工,每个员工对应一特定的公司;自行车和主人,每辆自行车属于特定的主人,每个主任有特定的自行车。而充电电池和充电器之间就不存在固定的对应关系,同样自行车和打气筒之间也不存在固定的对应关系。

// 如果说 Person2 类 有一个成员方法,用到了另外一个 Bicycle类,并且还拥有Bicycle的成员
// 就说Person2 关联 Bicycle
class Person2
{
public:void goToWork(){bicycle->run();}
private:Bicycle bicycle;
};
关联关系比依赖关系更紧密一些
4.6 关联关系的名称
关联关系可以有一个名称,用于描述该关系的性质。此关联名称应该是动词短语,因为它表明源对象正在目标对象上执行动作。

4.7 关联关系的角色
当一个类处于关联的某一端时,该类就在这个关系中扮演一个特定的角色。具体来说,角色就是关联关系中一个类对另一个类所表现的职责。角色名称是名词或名词短语。

4.8 关联关系的多重性
指有多少对象可以参与该关联,多重性可以用来表达一个取值范围,特定值,无限定的范围

一个人拥有 1-n台自行车 一个自行车只能被1个人拥有
4.9 类之间的关系 —— 关联 - 聚合
- 聚合关系是关联关系的一种,是更强的关联关系。
- 聚合和整体和部分之间的关系,例如汽车由引擎、轮胎以及其他零件组成。
- 聚合关系也是通过成员变量来实现的。但是关联关系所设计的两个类处在同一个层次上,而聚合关系,两个类处于不同的层次上,一个代表整体,一个代表部分。

4.10 类之间的关系 —— 关联 - 组合
- UML类图关系中组合关系是关联关系的一种,是比聚合还要强的关系。
- 代表整体对象负责代表部分对象的生命周期

相关文章:
【UML】统一建模语言 UML 基础
【UML】统一建模语言UML 基础 文章目录 一、概述1.1 - 什么是建模1.2 建模的原则1.3 软件建模的实现过程 二、 UML2.1 UML中10种图 三、用例图3.1 用例之间的关系 —— 泛化关系3.2 用例之间的关系 —— 包含关系3.3 用例之间的关系 —— 扩展关系 四、类图4.1 类的表示方法4.2…...
AWS S3深度解析:十大核心应用场景与高可用架构设计实践
摘要:作为全球领先的对象存储服务,Amazon S3凭借其高扩展性、持久性和安全性,已成为企业云原生架构的核心组件。本文将深入探讨S3的典型技术场景,并揭秘其背后的架构设计逻辑。 一、AWS S3核心技术特性解析 Amazon Simple Storag…...
如何用Python 3自动打开exe程序
诸神缄默不语-个人CSDN博文目录 本文所说的exe程序特指那种双击直接就能打开的Windows软件。本文中给出的具体例子是C:\Users\user_name\AppData\Local\Postman\Postman.exe,这串字符串在示例代码中都用exe_path代替了,方便你用的时候直接换成自己的软件…...
计算机网络之路由协议(自治系统)
一、自治系统(AS) 自治系统是由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。它是网络的基本构成单位,每个自治系统是一个独立运营并自主决定与谁交换流量的实体。自治系统内部运行内部网关协议(IGP)…...
MFC笔记:本专栏课件
专栏导航 上一篇:在VS2019里面,调整代码字体大小 回到目录 下一篇:无 本节前言 在之前的讲解里面,我讲解了 Visual Studio 软件的一些个基础操作步骤。从本节开始,我们进入预备章。 本节内容,属于是 …...
springboot集成jackson-dataformat-xml实现发送XML请求和XML响应参数处理
背景 最近在做发票相关的业务,需要对接第三方进行开发票等一系列操作,对方的系统是较老系统,需要采用XML的请求方式。 思路 一般来说,基于springboot的项目采用的都是JSON格式的请求参数和响应参数,因此需要做一个转…...
Spring Cloud Gateway 网关的使用
在之前的学习中,所有的微服务接口都是对外开放的,这就意味着用户可以直接访问,为了保证对外服务的安全性,服务端实现的微服务接口都带有一定的权限校验机制,但是由于使用了微服务,就需要每一个服务都进行一…...
超高速工业相机的应用
超高速工业相机一般安装在机器流水线上代替人眼来做测量和判断,通过数字图像摄取目标转换成图像信号,传送给专用的图像处理系统。图像处理系统对这些信号进行各种运算来抽取目标的特征,进而根据判别的结果来控制现场的设备动作。一般来说&…...
学习笔记--电磁兼容性EMC
一、基本概念 电磁兼容性(Electromagnetic Compatibility,EMC)是电子电气设备在特定电磁环境中正常工作的能力,同时不会对其他设备产生不可接受的电磁干扰。其核心目标是确保设备在共享的电磁环境中既能抵抗干扰,又能避…...
利用开源小智AI制作桌宠机器狗
本文主要介绍如何利用开源小智AI制作桌宠机器狗 1 源码下载 首先下载小智源码,下载地址, 下载源码后,使用vsCode打开,需要在vscode上安装esp-idf,安装方式请自己解决 2 源码修改 2.1添加机器狗控制代码 在目录main/iot/things下添加dog.cc文件,内容如下; #include…...
基于PSO-LSTM长短期记忆神经网络的多分类预测【MATLAB】
一、研究背景与意义 在时间序列分类、信号识别、故障诊断等领域,多分类预测任务对模型的时序特征捕捉能力提出了极高要求。传统LSTM网络虽能有效建模长程依赖关系,但其性能高度依赖超参数的选择,例如隐含层神经元数量、学习率、迭代次数等。…...
Qt中C++与QML交互从原理、方法与实践陷阱深度解析
在我们使用Qt开发中,现在以及普遍通过 C 与 QML 的交互,将 C 的强大功能与 QML 的界面设计优势相结合,既保证了应用程序的性能和稳定性,又能快速实现美观、易用的用户界面。接下来专门讲下C与QML交互原理、方法与实践中的一些陷阱…...
基于SpringBoot和Leaflet的邻省GDP可视化实战
目录 前言 一、技术实现路径 1、空间数据检索 2、数据展示检索流程 二、SpringBoot后台实现 1、模型层实现 2、控制层实现 三、WebGIS前端实现 1、控制面展示 2、成果展示 四、总结 前言 在数字化浪潮席卷全球的今天,数据已成为驱动社会经济发展、指导政策…...
esp工程报错:something went wrong when trying to build the project esp-idf 一种解决办法
最近上手了正点原子esp32s3板子,环境采用的是vscodeesp-idf插件。导入了正点原子的demo测试,每次都报这个错误无法建造。也不是网上说的ninja error,不是中文路径的问题。 在终端中查看,发现是缺少了git。(我这里没有…...
Grouped-Query Attention(GQA)详解: Pytorch实现
Grouped-Query Attention(GQA)详解 Grouped-Query Attention(GQA) 是 Multi-Query Attention(MQA) 的改进版,它通过在 多个查询头(Query Heads)之间共享 Key 和 Value&am…...
DeepSeek AI人工智能该如何学习?
人工智能(Artificial Intelligence, AI)是当今科技领域的热门话题,它涵盖了机器学习、深度学习、自然语言处理、计算机视觉等多个子领域。 作为中国科技发展的核心方向之一,AI在国家战略规划中占据了重要地位,特别是在…...
【数据库】【MySQL】索引
MySQL中索引的概念 索引(MySQL中也叫做"键(key)")是一种数据结构,用于存储引擎快速定找到记录。 简单来说,它类似于书籍的目录,通过索引可以快速找到对应的数据行,而无需…...
SprinBoot整合HTTP API:从零开始的实战指南
在现代 Web 开发中,HTTP API 是前后端交互的核心。Spring Boot 作为 Java 生态中备受欢迎的框架,提供了简洁而强大的方式来构建和整合 HTTP API。本文将带你从零开始,通过具体代码示例,展示如何在 Spring Boot 中整合 HTTP API,实现高效、稳定的前后端通信。 一、为什么选…...
可狱可囚的爬虫系列课程 13:Requests使用代理IP
一、什么是代理 IP 代理 IP(Proxy IP)是一个充当“中间人”的服务器IP地址,用于代替用户设备(如电脑、手机等)直接与目标网站或服务通信。用户通过代理IP访问互联网时,目标网站看到的是代理服务器的IP地址&…...
DBeaver下载安装及数据库连接(MySQL)
1. DBeaver下载 官网下载地址:Download | DBeaver Community 2. 安装 1. 双击下载的安装包,选择简体中文。 2. 点击下一步。 3. 点击我接受。 4. 如下勾选为所有用户安装,点击下一步。 5. 需重复做1~3 的步骤。 6. 选择组件,默认即可&…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
