UML之类图详解

在这里插入图片描述

犬余🐶
“我欲贱而贵,愚而智,贫而富,可乎?
曰:其唯学乎”

零、什么是类图

类图(Class Diagram)是面向对象系统建模中最常用和最重要的图,它通过图形化的方式展示系统中的类和接口,以及它们之间的继承、关联、聚合、组合和依赖等关系,从而帮助开发者理解和设计系统结构。

一、类图的主要组成元素

1.1. 类(Class)

类是类图中最基本的元素,用于描述具有相同属性和方法的对象的集合。在UML中,类用矩形框表示,矩形框内分为三个区域:

最上方是类名,其中抽象类的类名用斜体来表示
中间是类的属性,描述类的特征或状态,如变量、常量等。属性通常以“名称:类型:默认值”的形式表示,例如“name:String:张三”。
下方是类的方法,描述类的行为或操作。方法通常以名称(参数列表):返回类型的形式表示,例如“setName(name: String):void”。

接口是一种特殊的类,在类图中通过<<Interface>>标签来区分,它只定义了一组操作的规范,而不实现这些操作。即代表接口的矩形框内只包含接口名和方法两个区域:
在这里插入图片描述
在上述类和接口中,可以发现属性以及方法前面带有“+”或“-”符号,这表示
属性或方法的访问级别,常见的访问级别包括:

+(public):表示公有访问级别,对所有类可见;
-(private):表示私有访问级别,仅对该类本身可用;
#(protected):表示受保护的访问级别,对该类的子孙可见;
~(package):表示包内可见,只对同一包声明的其他类可见。

1.2、关系

类图通过不同的关系来展示类或接口之间的静态结构。这些关系主要包括泛化(Generalization)、实现(Realization)、聚合(Aggregation)、组合(Composition)、依赖(Dependency)和关联(Association)。
在这里插入图片描述

1.2.1. 泛化(Generalization)

泛化关系即是一种继承关系,表示子类继承父类的所有特征和行为。在UML中,泛化关系用带空心三角形的实线表示,箭头从子类指向父类。例如,一个车辆(Vehicle)类可以有多个子类,如汽车(Car)、自行车(Bike)等,这些子类继承了车辆类的属性和方法。
在这里插入图片描述

1.2.2. 实现(Realization)

实现关系是一种类与接口的关系,表示类是接口所有特征和行为的实现。在UML中,实现关系用带空心三角形的虚线表示,箭头从类指向接口。例如,一个具体的汽车类(ConcreteCar)可以实现车辆接口(VehicleInterface),从而拥有接口中定义的所有方法。
在这里插入图片描述

1.2.3. 聚合(Aggregation)

聚合关系是一种整体与部分的关系,但部分可以离开整体而单独存在。在UML中,聚合关系用带空心菱形的实线表示,空心菱形指向整体。例如,一个电脑(Computer)类可以由多个部件(如显示器、键盘、鼠标等)组成,这些部件可以离开电脑而单独存在。

在这里插入图片描述

1.2.4. 组合(Composition)

组合关系也是一种整体与部分的关系,组合关系与聚合关系类似,同样描述了一种整体与部分的关系,但区别在于组合关系中的部分不能离开整体而单独存在。换句话说,组合关系是一种更强的拥有关系,其中整体对部分的生命周期负责。
在UML中,组合关系用带实心菱形的实线表示,实心菱形指向整体。这种表示法强调了整体对部分的控制权和所有权。例如,一个房子(House)由多个房间(Room)组成,如果房子被拆除,那么这些房间(在物理意义上)也将不再存在,因此房间和房子之间存在组合关系。
在这里插入图片描述

1.2.5. 依赖(Dependency)

依赖关系表示类之间的使用关系,即一个类需要使用另一个类的功能或属性来完成其操作。在UML中,依赖关系用带箭头的虚线表示,箭头从依赖方指向被依赖方。这种关系不是强关系,而是一种较弱的、临时的关系。例如,一个编译器类(Compiler)依赖于一个词法分析器类(Lexer)来完成其词法分析的任务,这时可以说编译器类依赖于词法分析器类。
在这里插入图片描述

1.2.6. 关联(Association)

关联关系指的是类与类之间的联接,它使一个类知道另一个类的属性和方法(实例变量体现)。A类依赖于B对象,并且把B作为A的一个成员变量, 则A和B存在关联关系。在UML中,关联关系用一条实线表示,可选地可以在线上标注关联的名称、角色和多重性等信息。关联关系可以分为单向关联、双向关联和自关联,单向关联用带有箭头的实线表示,箭头指向被拥有者;双向关联用不带箭头的实线或两条带有相反箭头的实线表示,自关联则是“自己拥有自己”的一种关系。
在这里插入图片描述

二、类图的应用场景

类图在软件开发的各个阶段都有着广泛的应用,包括但不限于以下几个方面:

2.1. 需求分析阶段

在需求分析阶段,通过绘制类图可以帮助分析人员更清晰地理解系统的功能需求,识别出系统中的主要实体(类)以及它们之间的交互关系。这有助于形成更准确的需求规格说明书,为后续的设计和开发工作奠定基础。

2.2. 系统设计阶段

在系统设计阶段,类图扮演着至关重要的角色。它不仅帮助设计者规划系统的整体架构,还详细描述了系统中各个类的具体职责和它们之间的协作方式。通过类图,设计者可以确保系统结构的合理性、模块间的独立性以及接口的一致性,从而提高系统的可维护性和可扩展性。

2.3. 编码实现阶段

在编码实现阶段,类图可以作为程序员编码的参考和指导。程序员可以根据类图中定义的类、属性、方法和关系来实现具体的代码。这有助于保持代码的一致性和规范性,减少编码错误和遗漏。同时,类图还可以作为代码审查的依据,帮助团队成员检查代码是否符合设计要求。

2.4. 测试与维护阶段

在测试和维护阶段,类图同样具有重要的应用价值。测试人员可以根据类图来编写测试用例和测试计划,确保系统的各个部分都经过充分的测试。在维护过程中,如果需要对系统进行修改或升级,开发人员可以通过更新类图来反映系统的变化,从而保持文档与代码的一致性。

三、总结

UML类图是面向对象系统建模中不可或缺的工具之一。它通过图形化的方式展示了系统中的类、接口以及它们之间的静态结构和关系,为软件开发的各个阶段提供了有力的支持。因此,掌握UML类图的绘制方法和应用技巧对于提高软件开发的效率和质量具有重要意义。

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

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

相关文章

Conda安装R环境并在Jupyter Lab中运行

说明&#xff1a; Conda 安装 R 环境&#xff0c;并在 Jupyter Lab 中运行 R 脚本。 1. 创建环境并安装r-base 创建环境&#xff1a;conda create -n [环境名] 激活环境&#xff1a;conda activate [环境名] 安装 Jupyter Lab&#xff1a;conda install -c conda-forge jupy…

Promise详解、自定义

这里写目录标题 一、.Promise对象详解1. Promise是什么2. Promise的优点3. 异步编程4. then(onFulfilled, onRejected)&#xff1a;5. util.promisify 方法&#xff1a;6. promise的状态改变7.Promise 对象的值8. Promise的基本执行流程9. Promise的API10. Promise中的关键问题…

怎么修复松下相机死机视频只有0字节(0KB)的MDT文件【实测可修复】

死机后视频文件大小仅为0字节 松下S5相机录像死机&#xff0c;关机重新开机后有一个视频文件变成MDT&#xff0c;大小为0KB&#xff0c;录了30多分钟&#xff0c;本应为MOV格式的视频。0字节文件可以修复吗&#xff1f;怎么修复0字节的MDT文件为视频&#xff1f; 数据提取与视…

四款免费视频剪辑工具使用感受与优劣势总结

在如今这个视频内容如火如荼的时代&#xff0c;如何快速高效地完成视频剪辑成为许多人关心的问题&#xff1b;今天&#xff0c;我们就来轻松愉快地聊一聊本人常用的四款免费的视频剪辑工具&#xff1b;这四款工具各有千秋&#xff0c;让我们一起来看看它们的使用感受和优劣势吧…

数据结构(并查集) How did you do it? 怎么做到的!!!

一、前言 并查集的历史 1964年&#xff0c; Bernard A. Galler 和 Michael J. Fischer 首次描述了不相交的并查集&#xff0c;1975 年&#xff0c;Robert Tarjan 是第一个证明O(ma(n))&#xff08;逆阿克曼函数 (opens new window)&#xff09;算法时间复杂度的上限&#xff…

C语言深入了解指针一(14)

文章目录 前言一、内存和地址内存究竟该如何理解编址 二、指针变量和地址取地址操作符&解引用操作符*指针变量的大小 总结 前言 终于来到指针啦&#xff01;如前篇末尾总结所说&#xff0c;这是你们马上要下大功夫的地方   但是&#xff0c;就像我们上初中的时候&#xf…

【开发工具】IntelliJ IDEA插件推荐:Json Helper——让JSON处理更高效

导语&#xff1a;在Java开发过程中&#xff0c;JSON作为一种轻量级的数据交换格式&#xff0c;被广泛应用于前后端数据交互。今天&#xff0c;我要为大家介绍一款IntelliJ IDEA插件——Json Helper&#xff0c;帮助开发者更高效地处理JSON数据。 一、什么是Json Helper&#x…

智能优化算法-樽海鞘优化算法(SSA)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 樽海鞘优化算法 (Salp Swarm Algorithm, SSA) 虽然名称中提到的是“樽海鞘”&#xff0c;但实际上这个算法是基于群体智能的一种元启发式优化算法&#xff0c;它模拟了樽海鞘&#xff08;Salps&#xff09;在海…

C语言:刷题日志(3)

一.猴子选大王 一群猴子要选新猴王。新猴王的选择方法是&#xff1a;让N只候选猴子围成一圈&#xff0c;从某位置起顺序编号为1~N号。从第1号开始报数&#xff0c;每轮从1报到3&#xff0c;凡报到3的猴子即退出圈子&#xff0c;接着又从紧邻的下一只猴子开始同样的报数。如此不…

阿里云镜像报错 [Errno 14] HTTP Error 302 - Found 问题解决记录

1、问题背景和解决思路 在本地安装 CentOS7 后&#xff0c;网络已调通可正常上网&#xff0c;但切换阿里云镜像后&#xff0c;使用 yum 安装软件时出现 “[Errno 14] HTTPS Error 302 - Found Trying other mirror.” 报错&#xff0c;原因是 yum 源配置问题。给出了详细的解决…

苹果首款AI手机发布!iPhone 16全新AI功能体验感拉满

苹果于2024年秋季盛大发布iPhone 16系列&#xff0c;带来前所未有的AI智能体验。iPhone 16系列不仅硬件全面升级&#xff0c;更融入了尖端的AI技术&#xff0c;为用户带来更加智能化的生活体验。 在科技春晚的舞台上&#xff0c;苹果不负众望地揭开了iPhone 16系列的神秘面纱。…

ubuntu20.04 Qt6引用dcmtk库实现dicom文件读取和字符集转换

1 环境问题 安装完Qt6&#xff0c;新建Qt/QtQuick CMake工程编译出现如下错误: Found package configuration file: Qt6Config.cmake but it set Qt6 FOUND to FALSE so package "Qt6" is considered to be NOT FOUND. 原因&#xff1a; 这是因为系统中缺少OpenG…

缓存穿透、缓存雪崩、缓存击穿

图片没了&#xff0c;真的难受啊。。 缓存穿透 缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对象 优点&#xff1a;实现简单…

Java 入门指南:Java 并发编程 —— 同步工具类 CountDownLatch(倒计时门闩)

文章目录 同步工具类CountDownLatch常用方法使用步骤适用场景使用示例 同步工具类 JUC&#xff08;Java.util.concurrent&#xff09;是 Java 提供的用于并发编程的工具类库&#xff0c;其中包含了一些通信工具类&#xff0c;用于在多个线程之间进行协调和通信&#xff0c;特别…

uniapp媒体

uni.previewImage实现图片放大预览 // 图片预览函数function onPreview(index) {// 收集所有图片的urlvar urls pets.value.data.map(item > item.url)// 预览图片uni.previewImage({current: index, // 当前预览的图片索引urls: urls // 所有图片的url数组})}

大模型api谁家更便宜

1 openai 可点此链接查询价格&#xff1a;https://openai.com/api/pricing/ 2 百度 可点此链接查询价格&#xff1a;https://console.bce.baidu.com/qianfan/chargemanage/list 需要注意&#xff0c;百度千帆平台上还提供其他家的模型调用服务&#xff0c; 如llama, yi-34b等…

秋招突击——算法练习——9/4——73-矩阵置零、54-螺旋矩阵、48-旋转图像、240-搜索二维矩阵II

文章目录 引言复习新作73-矩阵置零个人实现 54-螺旋矩阵个人实现参考实现 48-旋转图像个人实现参考实现 240-搜索二维矩阵II个人实现参考实现 总结 引言 秋招开展的不是很顺利&#xff0c;还是要继续准备&#xff0c;继续刷算法&#xff01;不断完善自己&#xff0c;希望能够找…

yolov5 +gui界面+单目测距 实现对图片视频摄像头的测距

可实现对图片&#xff0c;视频&#xff0c;摄像头的检测 项目概述 本项目旨在实现一个集成了YOLOv5目标检测算法、图形用户界面&#xff08;GUI&#xff09;以及单目测距功能的系统。该系统能够对图片、视频或实时摄像头输入进行目标检测&#xff0c;并估算目标的距离。通过…

揭开Facebook AI的神秘面纱:如何利用人工智能提升社交体验

人工智能&#xff08;AI&#xff09;正迅速成为推动技术进步的核心力量&#xff0c;而Facebook作为全球领先的社交媒体平台&#xff0c;正通过AI技术不断提升用户体验和平台功能。本文将深入探讨Facebook如何利用AI技术&#xff0c;优化社交互动、内容推荐和用户管理&#xff0…

Sentinel 使用案例详细教程

文章目录 一、Sentinel 使用1.1 Sentinel 客户端1.2 Sentinel 控制台1.3 客户端和控制台的通信所需依赖 二、测试 Sentinel 限流规则2.1 启动配置2.2 定义限流资源2.3 配置流量控制规则2.4 运行项目 三、 测试 Sentinel 熔断降级规则3.1 定义资源3.2 配置熔断降级规则3.3 运行项…