UML-各种图

什么是类图

定义系统中的类,描述类的内部结构(属性、方法等),表示类之间的关系(泛化、实现、依赖、关联、聚合、组合)。

UML表示类图

在这里插入图片描述
上图中左侧图形是一个常见的类图,

  • 类名:在顶端存放;
  • 属性部分:在中间存放,+ name: string => 可见性符号 属性名: 属性类型。
  • 方法部分:在底部存放,+ exam(int,double) => 可见性符号 方法名(参数列表): 返回值类型
    使用便签图形与虚线为类图添加注释

可见性

  • “+”:表示公有 public
  • “-”:表示私有 private
  • “#”:受保护的 protected
  • “~”:包内公有 package

属性语法

[可见性]属性名[:类型][=初始值][{属性字符串}] => + name: String = "tom" {readOnly}
中括号中描述的可有可无。


方法语法

[可见性]方法名[(参数列表)][:返回类型][{方法字符串}] => + calculateTotalPrice(quantity: int, pricePerUnit: double): double {static}
中括号中描述的可有可无。


泛化关系(继承关系)

在这里插入图片描述
一条带空心三角箭头的实线,从子类指向父类,或者子接口指向父接口


实现关系

在这里插入图片描述
实现用一条带三角箭头的虚线表示,从类指向实现的几接口


依赖关系

  • 定义:依赖关系表示一个类的方法使用另一个类的对象作为参数、局部变量或返回值,或者在方法中调用另一个类的方法。

  • 特点:依赖关系是一种较弱的关系,通常是临时性的。一个类的变化可能会影响到依赖它的类,但这种影响是间接的。

  • 表示:通常用虚线箭头表示。

  • 例子:学生和食堂,学生吃饭需要去食堂,食堂提供食物。


关联关系

  • 定义:关联关系表示两个类之间存在某种关系,通常是通过成员变量来实现的。这种关系可以是单向的,也可以是双向的。

  • 特点:关联关系中的对象通常是独立存在的,它们的生命周期不相互依赖。一个对象的创建和销毁不会直接影响另一个对象。

  • 表示:通常用实线箭头表示。

  • 例子:一个 Teacher 类包含多个 Student 类的对象,表示教师和学生之间的关系。


聚合关系

  • 定义:聚合关系是一种特殊的关联关系,表示整体与部分的关系,但部分可以独立于整体存在。

  • 特点:聚合关系强调的是整体与部分的关系,部分对象可以属于多个整体对象,或者可以独立存在* 。部分对象的生命周期可以独立于整体对象。

  • 表示:通常用空心菱形表示。

  • 例子: 一个 Department 类包含多个 Employee 类的对象,表示部门和员工之间的关系,员工可以独立于部门存在。


组合关系

  • 定义:组合关系是一种强聚合关系,表示整体与部分之间的一种更强的关联。

  • 特点:组合关系表示整体与部分的关系,部分对象的生命周期完全依赖于整体对象。如果整体对象被销毁,部分对象也会被销毁。部分对象不能独立存在,也不能被多个整体对象共享。

  • 表示:通常用实心菱形表示。

  • 例子:一个 Car 类包含一个 Engine 类的对象,表示汽车和引擎之间的关系,引擎的生命周期完全依赖于汽车。


关联关系和聚合关系的区别

在面向对象编程中,关系的类型(如关联关系和聚合关系)通常是根据对象之间的语义和生命周期来区分的。具体到 Department 和 Employee 以及 Teacher 和 Student 的例子,我们可以从以下几个方面来理解它们之间的关系类型:

Department 和 Employee
聚合关系:

  • 整体与部分:Department 和 Employee 之间的关系可以被视为整体与部分的关系。一个 Department 包含多个 Employee,但 Employee 可以独立于 Department 存在。例如,一个 Employee 可以在多个 Department 之间转移,或者在没有 Department 的情况下继续存在。

  • 生命周期独立:Employee 的生命周期不依赖于 Department。即使 Department 被销毁,Employee 仍然可以存在。

Teacher 和 Student
关联关系:

  • 一般关系:Teacher 和 Student 之间的关系可以被视为一般的关联关系。一个 Teacher 可以教多个 Student,但这并不意味着 Student 是 Teacher 的一部分。Teacher 和 Student 是独立的实体,它们之间的关系是基于教学活动,而不是整体与部分的关系。

  • 生命周期独立:Teacher 和 Student 的生命周期是独立的。一个 Teacher 的创建和销毁不会直接影响 Student,反之亦然。

总结

  • 聚合关系:强调整体与部分的关系,部分对象的生命周期可以独立于整体对象。例如,Department 和 Employee。

  • 关联关系:表示对象之间的一般关系,对象的生命周期独立。例如,Teacher 和 Student。

在实际编程中,选择合适的关系类型取决于具体的业务需求和对象之间的语义关系。理解这些关系有助于更好地设计类之间的关系,确保程序的正确性和可维护性。

总结

  • 依赖关系:较弱的关系,临时性,一个类的变化可能影响依赖它的类。

  • 关联关系:一般关系,对象独立存在,生命周期不相互依赖。

  • 聚合关系:整体与部分的关系,部分对象可以独立存在。

  • 组合关系:强聚合关系,部分对象的生命周期完全依赖于整体对象。

什么是用例图

什么是状态图

什么是活动图

什么是时序图

什么是组件图

什么是组件图

什么是部署图

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

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

相关文章

vue实现预览编辑ppt、word、pdf、excel、等功能的解决方案(内网-前端)

在Vue中实现预览和编辑PPT、Word、PDF、Excel等文件的功能,尤其是在内网环境下且主要侧重于前端,我们需要明确的是,直接在前端编辑这些格式的文件(特别是PPT和Word)是非常复杂且通常不推荐的,因为这些格式涉…

FL Studio 24.1.1.4234 (Windows) / 24.1.1.3884 (Mac OS X)

FL Studio 24.1.1.4234 (Windows) / 24.1.1.3884 (Mac OS X) 主页多媒体音频编辑FL Studio 24.1.1.4234 (Windows) / 24.1.1.3884... FL Studio 图标 FL Studio(前身为 FruityLoops)是一款功能强大的音乐制作环境或数字音频工作站(DAW&#x…

基于SpringBoot+Hadoop+python的物品租赁系统(带1w+文档)

基于SpringBootHadooppython的物品租赁系统(带1w文档) 基于SpringBootHadooppython的物品租赁系统(带1w文档) 物品租赁系统是电子、信息技术相结合,是一种必然的发展趋势。以互联网为基础,以服务于广大用户为目的,发展整体优势,扩…

计算云服务3

第三章 镜像服务 什么是镜像服务(IMS) 镜像服务(lmage ManagementService,IMS)提供镜像的生命周期管理能力。用户可以灵活地使用公共镜像、私有镜像或共享镜像申请弹性云服务器和裸金属服务器。同时,用户还能通过已有的云服务器或使用外部镜像文件创建…

开启新纪元!被AI驱动的游戏世界,提升游戏体验

随着人工智能的高速发展,人工智能逐渐应用到了生活中的方方面面,人工智能在游戏中也有诸多应用,在游戏里领域扮演了相当重要的角色。游戏AI是伴随着电子游戏而出现的,在早期的游戏中就出现了对抗类AI角色,后来逐渐出现…

操作系统|day1.了解操作系统

文章目录 了解操作系统定义目的操作系统体系结构功能特征操作系统的区别(64位与32位)操作系统的地址内存管理缓存 了解操作系统 定义 操作系统是控制管理计算机系统的硬软件,分配调度资源的系统软件 目的 方便性,有效性(提高系统资源的利用率,提高系统的吞吐量) 操作系统体…

WEB安全:网络安全常用术语

一、攻击类别 漏洞:硬件、软件、协议,代码层次的缺陷。 后⻔:方便后续进行系统留下的隐蔽后⻔程序。 病毒:一种可以自我复制并传播,感染计算机和网络系统的恶意软件(Malware),它能损害数据、系统功能或拦…

RAG的学习与实践——LangChain和LlamaIndex学习笔记

RAG RAG(Retrieval Augmented Generation)系统,代表“检索增强生成”。RAG由五个关键步骤组成: 加载:这是指将数据从其所在位置(无论是文本文件、PDF、其他网站、数据库还是 API)获取到您的管道中。LlamaHub提供数百…

【Swiper】轮播图 笔记

文章目录 场景代码(6.8.4)代码(11.1.4) 场景 官网:Swiper - 最现代的移动触控滑块 - Swiper 中文 最近用svelte写轮播图,用了Swiper组件。需求是:一共三张图,来回切,保…

基于YOLOv8深度学习的CT扫描图像肾结石智能检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

comsol达西定律的小例子

comsol达西定律的小例子

【深度学习基础】环境搭建 Linux报错bash: conda: command not found...

目录 一、 问题描述二、 解决方法1. 在.bashrc文件中添加环境变量2. 卸载重装anconda 三、总结 一、 问题描述 在linux环境下安装anaconda时候报错:bash: conda: command not found… 二、 解决方法 1. 在.bashrc文件中添加环境变量 参考链接:【解决】…

【单片机毕业设计选题24054】-基于STM32的水质检测系统

系统功能: 主要功能模块原理图: 电源时钟烧录接口: 单片机和按键输入电路: 传感器采集电路: 资料获取地址 系统主要功能模块代码 初始化代码: /* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration-----------------------------------------------…

电脑虚拟摄像头怎么使用?电脑摄像头可以被虚拟摄像头替代吗?8款推荐!

在数字化日益普及的今天,视频通话和在线会议已成为我们生活和工作中不可或缺的一部分。然而,当我们的电脑没有配备摄像头,或摄像头出现故障时,我们可能会面临一些不便。这时,电脑虚拟摄像头便成为了一个实用的解决方案…

前端面试题37(js递归)

在JavaScript中,递归是一种编程技术,它允许函数调用自身来解决问题。这种方法通常用于处理分治策略的算法,比如遍历树形结构、计算阶乘、 Fibonacci数列等。下面通过几个示例来说明如何使用递归。 1. 计算阶乘 阶乘是一个经典的递归示例&am…

[激光原理与应用-102]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 6 - 激光焊接系统的组成

目录 一、激光焊接系统的组成概述 1.1、核心部件 1.2、焊接执行部件 1.3、辅助系统 1.4、控制系统 1.5、其他辅助设备 二、激光器 2.1 按出光类型分 1. 脉冲激光器 2. 连续激光器 3. 准连续激光器(QCW) 4. 其他常见激光器 5. 应用领域 2.2…

C 语言中如何进行冒泡排序?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会! 📙C 语言百万年薪修炼课程 通俗易懂,深入浅出,匠心打磨,死磕细节,6年迭代,看过的人都说好。 文章目…

JVM内存泄露的ThreadLocal详解

目录 一、为什么要有ThreadLocal 二、ThreadLocal的使用 三、实现解析 实现分析 具体实现 Hash冲突的解决 开放定址法 链地址法 再哈希法 建立公共溢出区 四、引发的内存泄漏分析 内存泄漏的现象 分析 总结 错误使用ThreadLocal导致线程不安全 一、为什么要有Thr…

Qt开发 | Qt绘图技术 | 常见图像绘制 | Qt移动鼠标绘制任意形状 | Qt绘制带三角形箭头的窗口

文章目录 一、基本绘图技术介绍二、常见的18种图形、路径、文字、图片绘制三、Qt移动鼠标绘制任意形状四、Qt绘制带三角形箭头的窗口 一、基本绘图技术介绍 Qt提供了绘图技术,程序员可以在界面上拖动鼠标,或者在代码里指定参数进行绘图。 Qt绘图技术介绍…

如何在 C 语言中实现链表?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会! 📙C 语言百万年薪修炼课程 通俗易懂,深入浅出,匠心打磨,死磕细节,6年迭代,看过的人都说好。 文章目…