设计模式中的UML基础

news2024/12/26 9:21:41

目录

1、UML概述

2、UML的用途

3、UML的构成

4、UML图

5、UML类图

5.1、类的构成

5.2、类与类之间的关系

6、绘制UML图的软件工具


VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C++软件分析工具案例集锦(正在更新中...)https://blog.csdn.net/chenlycly/category_12279968.html       在讲解设计模式时,会使用到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.coloradmin.cn/o/546820.html

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

相关文章

java线程组

文章目录 1. 简介2. 线程对象关联线程组:一级关联3. 线程对象关联线程组:多级关联4. 自动归属属性5. 获取根线程组 1. 简介 为了方便某些具有相同功能的线程进行管理,我们可以把线程归属到某一个线程组。线程组中可以有线程对象、线程&#…

【三维激光扫描】实验03:点云着色渲染模式详解

在SiScan软件中,点云的着色模式有:高程彩色、倾斜度、反射强度、自有颜色、点云测站、分隔片、分类7中,本文进行详细讲解。 文章目录 一、高程彩色二、倾斜度三、反射强度四、自有颜色五、分隔片一、高程彩色 高程彩色模式是按点云数据的Z值起算,颜色渐变显示。 二、倾斜度…

【AIGC】10、Chinese CLIP | 专为中文图文匹配设计

文章目录 一、背景二、方法2.1 基础内容2.2 数据集2.3 预训练方法2.4 模型尺寸 三、效果 论文:Chinese CLIP: Contrastive Vision-Language Pretraining in Chinese 代码:https://github.com/OFA-Sys/Chinese-CLIP 出处:阿里达摩院 时间&a…

061:cesium设置棋盘图材质(material-5)

第061个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置棋盘材质,请参考源代码,了解CheckerboardMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共89行)相关API参考:专栏目标…

第09章_子查询

第09章_子查询 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。 SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果…

SeaweedFs使用-环境准备

SeaweedFs使用-环境准备 1.下载go语言包实现go语言环境2.下载SeaweedFs文件3.安装SeaweedFs SeaweedFs是一款开源的分布式存储软件,在存储大量小文件方面有更好的优化,比较适合存储web项目的图片等文件。 1.下载go语言包实现go语言环境 因为SeaweedFs是…

实战TCP三次握手

开篇 在几乎所有的后端开发面试题中,TCP三次握手绝对是最被面试官青睐的题目之一。但是这个东西,平时开发中看不见,摸不着,对于很多人来说,是纯理论的知识,玄之又玄。但是为了应对面试,又不得不…

《JavaEE》网络编程TCP/IP五层协议万字详解

文章目录 TCP/IP五层协议栈应用层xml (可读性比较好 但是运行效率不高)json(可读性好 但是运行效率不高)prtobuffer(可读性不好 但是运行效率很高) 传输层UDP TCPTCP数据解读32位序号32位确认序号4位首部的长度保留位6位标志位字段…

C语言实现学生管理系统

学习完C语言之后,我们可以通过简单写一个学生管理系统来检验自己学的怎么样。很多计算机系大学生都会学到C语言,对于C语言课程的设计作业可能会感到困难,该篇博客的核心点就是带领读者单独完成学生管理系统,此篇博客附有整个学生管…

【C++ 入坑指南】(11)指针

文章目录 一、概念定义和使用二、空指针 & 野指针2.1 空指针2.2 野指针2.3 小结 三、const 修饰的指针四、指针 和 数组五、指针和函数六、实例 学习 C 的指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态…

数据全生命周期管理

数据存储 时代"海纳百川,有容乃大"意味结构化、半结构和非结构化多样化的海量的 ,也意味着批数据和流数据多种数据形式的存储和计算。面对不同数据结构、数据形式、时效性与性能要求和存储与计算成本等因素考虑,应该使用适合的存储…

组合预测模型 | ARIMA-CNN-LSTM时间序列预测(Python)

组合预测模型 | ARIMA-CNN-LSTM时间序列预测(Python) 目录 组合预测模型 | ARIMA-CNN-LSTM时间序列预测(Python)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 ARIMA-CNN-LSTM是一种结合了传统时间序列模型和深度学习模型的…

chatgpt赋能Python-python3的下载

Python 3-您在编程路上不可或缺的伙伴 如果您正在寻找一种流行的编程语言,那么Python 3就是一个不错的选择。Python 3作为一种高级编程语言,可以轻松地创建各种应用程序和网站。它是最受欢迎的编程语言之一,就是因为它易于学习和使用。 Pyt…

本地部署 VisualGLM-6B

本地部署 VisualGLM-6B 1. 什么是 VisualGLM-6B2. Github 地址3. 安装 Miniconda34. 创建虚拟环境5. 安装 VisualGLM-6B6. 启动 VisualGLM-6B7. 访问 VisualGLM-6B8. API部署9. 命令行部署 1. 什么是 VisualGLM-6B VisualGLM-6B 是一个开源的,支持图像、中文和英文…

大模型时代下智能文档处理核心技术大揭秘

大模型时代下智能文档处理核心技术大揭秘 前言一张图全览文档图像分析与预处理图像预处理的整体架构核心技术点应用场景 版面分析与还原整体架构核心技术点应用场景 AI安全文档图像篡改检测 大模型时代思考总结 前言 最近,中国图像图形大会在苏州圆满结束&#xff0…

碳交易机制下考虑需求响应的综合能源系统优化运行(matlab代码)

目录 1 主要内容 架构模型: 需求响应模型: 目标函数: 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序复现文献《碳交易机制下考虑需求响应的综合能源系统优化运行》,解决碳交易机制下考虑需求响应的综合能源系统优化…

Emacs之快速高亮查找字符(九十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

ubuntu22.04静态ip设置(桥接模式、only-host+NAT模式)

在创建一台虚拟机后,默认的方式往往是通过DHCP动态的进行分配,DHCP服务器会告知创建的虚拟机分配到的ip地址,网关地址等信息。所以在创建好虚拟机之后,这些信息都不需要我们来配置,我们直接用就好了。 但是&#xff0…

redis集群之hash槽分析算法

上文提过了 hash取余算法和hash一致性算法 一致性hash算法是为了减少节点数目发生改变时尽可能的减少数据迁移 将所有的存储节点排在首位相连的Hash环上,每个key在计算hash后会顺时针找到临近的存储节点。 而当有节点加入或退出时,仅影响该节点在hash环上…

chatgpt赋能Python-python3求平均值

Python3求平均值-从基础到实践 Python3作为一种广泛使用的编程语言,被广泛应用于不同的领域。今天我们将探讨如何使用Python3求平均值。求平均值在数学和统计学中非常常见,使我们能够了解数据的中心趋势,并简化数据分析过程。让我们深入了解…