UML类图绘制

目录

前言

 一、如何在UML中表示一个类

二、类之间关系的表示

1.继承关系

2.关联关系

①单向关联

②双向关联关系

③自关联关系

3.聚合关系

4.组合关系

5.实现关系

6.依赖关系


前言

在学习面向对象语言时,我们可以使用UML类图来描述将要编写的程序中类与类之间的关系。绘制类图可以让程序员更清晰的感知类与类之间的关系,进而编写出更符合需求的代码。(博主使用的是“亿图图示”中的绘制工具,当然你也可以选择其他的工具,该软件在网上有破解版,推荐读者使用正版,读者可自行查找,这里就不进行安装引导了。)

注意:本博文使用C++作为代码演示语言。


 一、如何在UML中表示一个类

打开绘图软件后,向绘制面添加一个类,我们可以看到一个类通常由3块区域组成,

图1        普通类的表示

在第一部分中要填入的是我们的类名。

在第二部分中要填写该类中包含的成员的可见性(私有、公有、保护)。而后填写类的属性字段、属性名、是否有缺省值。

在第三部分中要填写的是在该类中包含的类方法的可见性、类名、类参数、返回值。 

图2        抽象类的表示
图3        接口类的表示

 

这里简单解释一下普通类与抽象类与接口类的关系:

普通类中没有纯虚函数,抽象类中至少有一个纯虚函数但也可以包含非纯虚函数,接口类中只能包含纯虚函数。 

二、类之间关系的表示

图4        类与类之间的关系

1.继承关系

继承关系本质上是一种“is-a”的关系。假设在一个学校中,只有学生和老师两类人,显然老师和学生都有着一些共同的属性,我们将这些共同的属性提取出来作为基类,而后在对学生和老师之间差异的部分做描述形成学生类和老师类,最后让老师类和学生类继承公共类即可。

在UML类图中,继承关系用带空心三角箭头的实线来表示,由派生类指向父类

图5        继承关系表示示例

2.关联关系

与继承关系不同,关联关系是一种引用的关系,是一种“has-a”的关系。比如说一个动物园的类,动物园中有很多的动物,但是动物园和动物之间是包含关系。

①单向关联

单项关联指的是一个类中包含另一个类作为成员变量。比如描述一个人的类可以有一个记录地址的类,但是记录地址的类不能包含一个人的类。单项关联用一条带箭头的实线来表示。其中箭头指向被包含的一方。

图6        单向关联关系

②双向关联关系

双向关联关系是两个类互相包含对方类作为成员变量。比如一个部门类与员工类,员工需要知道自己所属的部门,部门也需要知道有多少员工。双向关联关系用一条实现链接有关系的两方即可。

图7        双向关联关系

③自关联关系

自关联关系是在该类中包含该类类型的成员变量。常见于链表中,我们知道链表是由一个个节点组成的,一个节点类中一定包含对一个或多个节点指针,用来与其它节点链接。自关联关系用一个带箭头的实线指向自己表示。其中箭头指向自己。

图8        自关联关系

3.聚合关系

聚合关系是一种较为强烈的关联关系,是部分与整体的关系,表示部分的类,可以独立于整体存在。比如我们想描述一个种群,种群中的个体可以脱离种群存在。我们使用一个带空心菱形的实线来表示聚合关系,其中空心菱形靠近整体类。

图9        聚合关系
图10        多重性原则

4.组合关系

组合关系是一种更强烈的聚合关系,在组合关系中的部分类不能脱离整体类存在,整体类销毁时,不分类也一定会被销毁。比如一个房屋包含卧室和客厅,当要拆除这个房屋的时候,卧室和客厅也会被一并拆除。组合关系通常使用一条带实心菱形的实线来链接,实心菱形靠近整体类。

图11        聚合关系

5.实现关系

在C++中,实现关系,通常指的是接口类与实现类之间的关系。接口类与实现类之间的关系好比C++标准委员会提出对应的标准但是不会去实现,各编译器厂商根据提出的标准实现对应的功能。我们这里举一个例子,我们有一个动物类,在这个类中只有一个描述动物叫声的纯虚函数,因为动物具体的叫声是不确定的,所以需要实现类对这一函数进行具体实现。实现关系通常使用带空心三角箭头的虚线表示,箭头靠近接口类。

图12        实现关系

6.依赖关系

依赖关系是一种使用关系,这种关系是临时的。比如说一个描述文档的类,和一个打印机的类,打印机的字段属性不包含文档类,但是如果打印机想要实现打印方法,就必须要使用文档类读取文档中的内容,这时文档类在打印机这个类中的打印方法中作为临时变量或者方法参数被使用了。这种关系就是一种依赖关系。描述依赖关系使用带箭头的虚线表示。箭头靠近被依赖的一方,这里就是指向文档类。

图13        依赖关系

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

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

相关文章

NASA:A-Train 云分级数据集(用于深度学习模型)

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 A-Train 云分级数据集 简介 ATCS 是一个数据集,旨在训练深度学习模型,以便对多角度卫星图像中的云进行体积分割。 该数据集包括来自 PARASOL 任务上 POLDER 传感器的多角度偏…

docker如何升级MySQL为最新版本

今天安全扫描发现MySQL存在漏洞,不用想别的升级到最新版。本篇文章有两个目的,1)为自己做一个记录,下次升级的时候不用再浪费时间查资料;2)给大家一点帮助; 因为我是docker部署,所以…

在Windows系统上安装的 flatbuffers C++ 库

步骤一 下载:https://github.com/google/flatbuffers git clone gitgithub.com:google/flatbuffers.git步骤二 打开安装目录,然后再打开该目录下的powershell, 新建build目录 cd build cmake ..步骤三 进入步骤二生成的build目录里面,点击FlatBuffers.sln,打开vs2019 补充…

【巅峰算力,静谧之作】4卡4090GPU深度学习“静音”服务器

各位同仁,随着人工智能浪潮的汹涌澎湃,我们正步入一个前所未有的创新纪元。在这个充满挑战与机遇的时代,我愈发频繁地在工作场景中邂逅那些致力于深度学习探索的智者们。他们,对计算力的渴望如同对知识的追求一般,永无…

阿里巴巴首页pc端1688店铺招牌店铺装修教程

1688运营1688批发首页1688装修模板1688店铺怎么装修模板自定义装修代码1688店铺装修模板旺铺装修阿里店铺首页怎么装修1688店铺装修教程视频全屏通栏代码1688店铺装修模板阿里巴巴店铺装修设计 阿里巴巴首页pc端1688店铺招牌店铺装修教程 工具:一秒美工

海外仓与前置仓有什么不同,如何选择合适的WMS系统?

在跨境电商和国际贸易的广阔舞台上,海外仓与前置仓作为两种重要的物流模式,各自以其独特的运营方式和目标,为卖家和消费者提供了高效、便捷的物流服务。 1.海外仓:海外仓是在国外设立的存储仓库,主要用于存放货物并服…

【WRF工具】WRF Domain Wizard第二期:服务器中下载及安装

【WRF工具】WRF Domain Wizard第二期:服务器下载及安装 准备WRF Domain Wizard下载及安装WRF Domain Wizard下载WRF Domain Wizard安装添加环境变量(为当前用户永久添加环境变量)Java环境安装报错-Exception in thread "main" java…

从入门到精通:Spring Boot 100个技术关键词

Spring Boot 是一个基于Spring框架的快速开发框架,旨在简化Spring应用的初始搭建以及开发过程。通过掌握本指南中的100个关键技术关键词,你将逐步了解Spring Boot的核心概念、自动配置、依赖管理、Web开发、数据库操作、安全性、测试等方面的知识。每个关…

【通俗易懂介绍OAuth2.0协议以及4种授权模式】

文章目录 一.OAuth2.0协议介绍二.设计来源于生活三.关于令牌与密码的区别四.应用场景五.接下来分别简单介绍下四种授权模式吧1.客户端模式1.1 介绍1.2 适用场景1.3 时序图 2.密码模式2.1 介绍2.2 适用场景2.3时序图 3.授权码模式3.1 介绍3.2 适用场景3.3 时序图 4.简化模式4.1 …

从视觉到现实:掌握计算机视觉技术学习路线的十大步骤

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于【计算机视…

北京未来感知科技定位技术:UWB定位技术详解

一、UWB定位技术是什么? UWB,全称为Ultra Wide Band(超宽带)技术,是一种无线载波通信技术[1][2]。它不同于传统的无线通信技术,不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据&#x…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】

【STM32开发笔记】移植AI框架TensorFlow【上篇】 一、TFLM是什么?二、TFLM开源项目2.1 下载TFLM源代码2.2 TFLM基准测试说明2.3 TFLM基准测试命令 三、TFLM初步体验3.1 PC上运行Keyword基准测试3.2 PC上运行Person detection基准测试3.3 No module named numpy问题解…

【Go】探索Go语言中的Map

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

SpringBoot整合InfluxDB(实战)

一、简单介绍InfluxDB是什么? InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。 1、主要特点 时间序列数据存储 专门…

【机器学习】生成对抗网络(GAN)——生成新数据的神经网络

生成对抗网络(Generative Adversarial Networks,简称GAN)是一种创新的神经网络结构,近年来在机器学习和人工智能领域引起了广泛的关注。GAN的核心思想是通过两个神经网络的对抗性训练,生成高质量的、与真实数据相似的新…

FastAPI 第二课 -- 安装

目录 一. 前言 二. 运行第一个 FastAPI 应用 一. 前言 FastAPI 依赖 Python 3.8 及更高版本。 安装 FastAPI 很简单,这里我们使用 pip 命令来安装。 pip install fastapi 另外我们还需要一个 ASGI 服务器,生产环境可以使用 Uvicorn 或者 Hypercorn…

构建 Spring Data JPA 项目所需的依赖与配置

一、使用 Spring Boot Initializr 添加依赖的步骤(IntelliJ IDEA 中的操作) 打开 IntelliJ IDEA,选择 New Project > Spring Initializr。填写项目的 Group、Artifact、Project Metadata 等基础信息。选择 Maven Project,并选…

函数模板进阶 - 为什么函数模板不要特化?

本文参考文章2001 年 7 月的 C/C++ Users Journal,第 19 卷第 7 期:Why Not Specialize Function Templates? 大家有兴趣可以看看原文。 文章目录 一、 重载和特化1. 重载2. 特化二、特化和重载的调用优先级1. 第一份代码2. 第二份代码3. 原因三、函数模板特化的书写格式1. …

扩散模型和表示学习(Diffusion Models and Representation Learning)

Diffusion Models专栏文章汇总:入门与实战 前言:扩散模型是各种视觉任务中流行的生成建模方法,引起了人们的广泛关注。它们可以被认为是自监督学习方法的一个独特实例,因为它们独立于标签注释。这篇博客讨论扩散模型与表征学习之间…

《linux系统》基础操作

二、综合应用题(共50分) 随着云计算技术、容器化技术和移动技术的不断发展,Unux服务器已经成为全球市场的主导者,因此具备常用服务器的配置与管理能力很有必要。公司因工作需要,需要建立相应部门的目录,搭建samba服务器和FTP服务器,要求将销售部的资料存放在samba服务器…