设计模式中的UML基础

设计模式中的UML基础

目录

1、UML概述

2、UML的用途

3、UML的构成

4、UML图

5、UML类图

5.1、类的构成

5.2、类与类之间的关系

6、绘制UML图的软件工具

在讲解设计模式时,会使用到UML建模中的类图去讲解类与类之间的关系,所以这里需要给大家普及一下UML的相关知识。此外,我们在编写软件设计文档时需要绘制类图、时序图等;我们在学习源码时,可能也需要借助类图去查看分析。

1、UML概述

   UML的全称为United Modeling Language,是一种面向对象的可视化建模语言,通过图形符号描述现实系统的组成,通过建立图形之间图的关系来描述整个系统模型。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。在软件开发的流程中,一般先要对软件系统进行规划和建模,把要做的功能、实现的方法、系统内部的业务流程与运行交互机制、要做到什么程度等这些基本问题分析清楚,才去写代码实现。建模是对现实问题按照一定的规则进行抽象与简化,通过建模把现实世界中的问题转化到计算机领域中进行分析和实现,软件建模的过程就是需求-建模-设计的一个过程。

我们在日常工作中会使用UML工具去绘制表示类与类之间关系图的类图、绘制业务实体关系的用例图、绘制业务状态相关的状态图以及绘制与业务流程相关的业务交互时序图等。

2、UML的用途
UML主要用于对软件系统业务流程和内部交互机制进行描述、可视化表述,用来构造和建立软件系统的文档,以方便对系统的理解、设计、浏览、配置、维护和信息控制。通过UML,参与软件的各个生命周期的人员可以方便的沟通交流。

3、UML的构成
UML由模型元素(Model Element)、图(Diagram)、视图(View)和通用机制(General Mechanism)等几个部分组成。

模型元素:代表面向对象中的类、对象、消息和关系等概念,是构成图的最基本的常面向对象系统分析与设计方法用概念。
图:是模型元素集的图形表示,通常是由弧(关系)和顶点(其他模型元素)相互连接构成的。
视图:表达系统的某一方面的特征的UMI,建模元素的子集,由多个图构成,是在某一个抽象层上,对系统的抽象表示。
通用机制:用于表示其他信息,比如注释、模型元素的语义等。另外,UML还提供扩展机制,使UML语言能够适应一个特殊的方法(或过程),或扩充至一个组织或用户。
4、UML图
UML图是对软件系统中面向对象的类、对象、消息和关系等图形化表示,是认识和理解软件系统的关键组成部分。UML图包括用例图、协作图、活动图、时序图、部署图、构件图、类图、状态图。其中,类图和时序图在日常工作中使用的比较多,在介绍设计模式时主要使用类图,所以下面重点介绍一下UML中的类图。

5、UML类图

在这里插入图片描述

   一个典型的类图如上所示(IM截图模块的类图)。类图是面向对象系统建模中最常用的一种UML图,主要用来表示类与类之间的关系,包括泛化关系、关联关系、依赖关系和实现关系。通过查看类图,我们能快速地搞清楚各个类的关系。我们在阅读软件设计文档或者开源代码时,可能会看到相关的类图,我们要看懂类图,就必须要搞清楚表示类与类的关系连接线类型。

5.1、类的构成
类元素主要由类名、属性和方法三部分构成,如下所示:

  • 表示private
  • 表示public

表示protected

其中,属性表示为:

属性名:类型
方法表示为:
方法名(参数类型):返回值类型

5.2、类与类之间的关系
1)泛化关系(Generalization)

    泛化关系用来表示类与类之间的继承关系,也叫做is a kind of关系,用三角形的箭头从子类指向父类。类图表示如下:

在这里插入图片描述

2)实现关系(Realization)

   实现关系就是类或接口的实现,由三角箭头虚线从实现类指向接口类,(比如C++中纯虚函数的实现)。类图表示如下:

在这里插入图片描述

3)依赖关系(Dependency)

   依赖关系是指在一个类中要用到另一个类的实例的一种关系,主要表现为一个类是另一个类的函数参数,或者一个类是另一个类的函数返回值的情况。在类图中的表现形式为一个虚线箭头从一个类指向被依赖的类。类图表示如下:

在这里插入图片描述

4)关联关系(Association)

   关联关系是类和类之间对应的一种连结,是指两个独立的对象,一个对象的实例与另一个对象的一些特定实例存在固定的对应关系。关联关系可以是单向的也可以是双向的,通过关联使得一个类可以使用另一个类的属性和方法,在C++中具体的表现形式为,一个类的对象是另一个类的成员属性。在类图中,单向的是带箭头的实线,双向的是不带箭头的实线:

在这里插入图片描述

5)聚合关系(Aggregation)

    聚合关系表示整体和部分的关系,它是一种has-a的包含关系,而且整体和部分是可以分离的,即离开整体,
部分也能存在。聚合关系是关联关系的一种,它是一种更强的关联关系。聚合关系在C++中的表现也是成员
变量的方式,但是和   关联关系不同的是,关联关系中的两个类是相互独立的,而聚合关系中的两个类是整体
与部分的关系,一个类是另一个类的一部分。在类图中,空心菱形在代表整体的类那侧,另一侧为代表部分的类。聚合关系的简单理解,比如手机和充电线,充电线是手机的一部分,手机就是整体,充电线是部分,但是没有手机了,
充电线也可以单独存在,如下:

在这里插入图片描述

6)组合关系(Composite)

   组合关系也是关联关系的一种,是一种比聚合关系更强的关联关系。如果两个类是聚合关系(A是B的一部分),那么离开B之后,A就失去了存在的意义。组合关系是一种不可分离的关系。在类图中用实心菱形指在代表整体的类,另一侧为代表部分的类。

在这里插入图片描述

7)小结

    对上述6种类关系的总结:

泛化关系和实现关系的区别:泛化关系是指C++中的继承关系;而实现关系是指虚基类的继承,在子类中实现虚基类的纯虚函数。
泛化关系和实现关系可以看成依赖关系的一种,因为它们离开依赖的类都无法编译通过。
聚合关系和组合关系是关联强度逐渐增强的关联关系;关联关系双方是平等的,聚合关系和组合关系的双方是整体和部分的关系。
聚合关系的双方整体和部分可以分离单独存在,没有生命周期的强相关;组合关系双方,部分离开整体将失去意义,整体的生命周期代表了部分的生命周期。
6、绘制UML图的软件工具
绘制UML图的软件工具比较多,有专业的EA(Enterprise Archtecture)绘制工具,有微软的Visio工具,有韩国的StarUML,还有一些比较新的绘图工具也支持UML绘图,比如亿图软件的图示工具、在线绘图工具drawio等。其中,EA是老牌专业的UML图绘制工具,我比较喜欢用EA。大家可以根据自己的需要和喜好去选择想要的UML工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯day4刷题日记

P8605 [蓝桥杯 2013 国 AC] 网络寻路 思路来源于https://www.luogu.com.cn/article/iat8irsf #include <iostream> using namespace std; int n,m; int q[10010]; int v[100010],u[100010]; long long res;int main() {cin>>n>>m;for(int i0;i<m;i){cin…

【SpringSecurity】十三、基于Session实现授权认证

文章目录 1、基于session的认证2、Demosession实现认证session实现授权 1、基于session的认证 流程&#xff1a; 用户认证成功后&#xff0c;服务端生成用户数据保存在session中服务端返回给客户端session id (sid&#xff09;&#xff0c;被客户端存到自己的cookie中客户端下…

Android Studio实现内容丰富的安卓校园二手交易平台(带聊天功能)

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 项目编号083 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看二手商品列表 3.发布二手商品 4.商品详情 5.聊天功能…

NodeJS 中的设计模式

Node.js 是一个流行的 JavaScript 运行时&#xff0c;允许开发者使用事件驱动、非阻塞 I/O 模型构建可扩展的网络应用程序。和任何复杂的框架一样&#xff0c;Node.js 应用程序可以从使用成熟的设计模式中受益&#xff0c;以促进代码重用、可维护性和健壮性。本文将概述一些对 …

在微信小程序中或UniApp中自定义tabbar实现毛玻璃高斯模糊效果

backdrop-filter: blur(10px); 这一行代码表示将背景进行模糊处理&#xff0c;模糊程度为10像素。这会导致背景内容在这个元素后面呈现模糊效果。 background-color: rgb(255 255 255 / .32); 这一行代码表示设置元素的背景颜色为白色&#xff08;RGB值为0, 0, 0&#xff09;&a…

docker批量删除容器或镜像

删除容器 停止所有容器 删除所有容器&#xff0c;需要先停止所有运行中的容器 docker stop docker ps -a -q docker ps -a -q&#xff0c;意思是列出所有容器(包括未运行的)&#xff0c;只显示容器编号&#xff0c;其中 -a : 显示所有的容器&#xff0c;包括未运行的。 …

以太坊的演变:EIP、ERC 概念以及革命性的 ERC20、ERC721 和 ERC115 标准

文章目录 一、EIP——以太坊发展的基石1.1 什么是EIP&#xff1f;1.2 历史背景&#xff1a;前身的 BIP1.3 EIP的重要性1.4 流程&#xff1a;从提案到实施 二、进入 ERC——以太坊内的标准化协议2.1 解读 ERC&#xff1a;以太坊征求意见2.2 ERC 标准的诞生和意义 三、聚焦 ERC20…

如何动态修改spring中定时任务的调度策略(2)

上一篇文章中我们一下走读了一下spring中实现@Scheduled的源码,想必你对spring中实现定时调度的原理更加了解吧,文末我们两个问题, 1.spring在进行定时调度时,使用的线程池是默认,那么这个默认的线程池的配置是怎样的呢? 2.如何动态调整调度策略。 接下来我们详细分析一…

第四百一十二回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"给geolocator插件提交问题的结果"相关的内容&#xff0c;本章回中将介绍自定义标题栏.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我…

在Linux/Ubuntu/Debian中使用iFuse访问iOS 设备(例如 iPhone 或 iPad)上的文件可双向复制粘贴

iFuse 是一款工具&#xff0c;可让你在 Linux 系统上安装 iOS 设备&#xff08;例如 iPhone 或 iPad&#xff09;&#xff0c;使你能够访问其文件系统并与设备传输文件。 以下是有关如何使用 iFuse 的基本指南&#xff1a; 安装依赖项&#xff1a;在安装 iFuse 之前&#xff0c…

go语言-基础元素与结构的使用

go基础元素与结构的使用&#xff0c;快速上手 编译go文件 编译为可执行文件 go build 文件名.go运行文件 ./文件名输入/输出 引用fmt库&#xff08;关于输入输出的库&#xff09; 输入 **scanf&#xff1a;**按照给定的格式依次读取数据&#xff08;包括非法数据&#xff…

计算机网络——HTTP

HTTP报文格式长什么样&#xff1f; HTTP报文它是由请求行&#xff0c;请求头&#xff0c;请求体组成的 请求行他是请求或响应的基本信息 请求头他是使用key-value格式可以更加详细的说明报文 请求体是传输的具体内容 是如何分割的&#xff1f; 请求行与请求头他是用\r\n来…

wireshark windows 抓包https

windows下 1.配置环境变量以生成ssl协商会话密钥日志记录 系统设置-》高级设置-》环境变量 新增环境变量 SSLKEYLOGFILE C:\Users\Public\Documents\SSLKEY\sslkey.log 打开公用共享文档创建SSLKEY文件夹用于后续系统存放协商密钥日志 2.配置Wireshark选项进行抓包 点击…

(一)Linux+Windows下安装ffmpeg

一丶前言 FFmpeg是一个开源的音视频处理工具集&#xff0c;由多个命令行工具组成。它可以在跨平台的环境中处理、转换、编辑和流媒体处理音视频文件。 FFmpeg支持多种常见的音视频格式和编解码器&#xff0c;可以对音视频文件进行编码、解码、转码、剪辑、合并等操作。它具有广…

最近火绒的explorer问题,电脑黑屏只有鼠标

由于安全限制&#xff0c;覆盖文件是行不通的&#xff0c;按照火绒官方给的方法试试&#xff0c;还是不行。主要是他最后一步写得有问题。恭喜火绒&#xff0c;成功的将我们所有客户的电脑安装的火绒卸载。 解决方案 1、CTRLSHIFTESC调出任务管理器&#xff1b; 2、左上角&am…

.net使用excel的cells对象没有value方法——学习.net的Excel工作表问题

$exception {"Public member Value on type Range not found."} System.MissingMemberException 代码准备运行问题解决1. 下载别的版本的.net框架2. 安装3. 运行 代码 Imports Excel Microsoft.office.Interop.Excel Public Class Form1Private Sub Button1_Click(…

「实战应用」如何用DHTMLX构建自定义JavaScript甘特图(二)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 当您声称您的产品具有高级定制功能时&#xff0c;客户一定会对产品进行严格测试&#xff0c;这个规则当然适用于DHTMLX Gantt&…

万用表革新升级,WT588F02BP-14S语音芯片助力智能测量新体验v

万能表功能&#xff1a; 万能表是一款集多功能于一体的电子测量工具&#xff0c;能够精准测量电压、电流、电阻等参数&#xff0c;广泛应用于电气、电子、通信等领域。其操作简便、测量准确&#xff0c;是工程师们进行电路调试、故障排查的得力助手&#xff0c;为提升工作效率…

Rust 中Self 关键字的两种不同用法

在 Rust 中&#xff0c;Self 是一个特殊的类型标识符&#xff0c;它代表了当前结构体或枚举类型。在结构体或枚举类型的定义中&#xff0c;Self 可以用于表示该类型的任何地方&#xff0c;包括方法签名、构造函数、类型别名等。 构造函数中的 Self&#xff1a; 在这段代码中&a…

大语言模型数据集alpaca羊驼数据集、Vicuna骆马数据集异同、作用、使用领域

文章目录 大语言模型数据集alpaca羊驼数据集、Vicuna骆马数据集异同、作用、使用领域Alpaca和Vicuna简介AlpacaVicuna相同点不同点 alpaca、vicuna能否用在大语言模型微调中&#xff1f;alpaca、vicuna进行大语言模型微调时&#xff0c;由于其已经是标准化数据集&#xff0c;还…