UML六大关系总结
UML六大关系有:继承、关系、聚合、组合、实现、依赖。分为通过图和代码总结这些关系。
1、继承
继承(Inheritance):表示类之间的继承关系,子类继承父类的属性和方法,并可以添加自己的扩展。
继承(Inheritance):继承关系表示一个类(子类)继承另一个类(父类)的属性和方法。子类可以重用父类的代码,并可以在需要时添加自己的扩展。继承关系支持面向对象编程的重要特性之一——多态性。通过继承,子类可以被视为父类的实例。例如,可以有一个“动物”类作为父类,然后派生出“猫”类和“狗”类作为子类,它们共享动物类的属性和方法,并且可以具有自己特定的行为。
public class Animal {// 动物相关代码
}public class Cat extends Animal {// 猫相关代码
}public class Dog extends Animal {// 狗相关代码
}
class Bird:Animal
{
}
说明:一段都是子类继承父类,在子类的后面用一个冒号表示,冒号后面跟着父类的名字。继承只能继承父类共有和保护的属性或方法,私有的变量或方法不能被子类继承。
2、关联
关联(Association):表示两个类之间的关联关系,通常是一个类中有另一个类的对象作为成员变量。关联关系可以是单向或双向的
关联(Association):关联关系表示两个类之间的连接,用于描述它们之间的交互。它可以是单向的或双向的,可以是一对一、一对多或多对多的关系。关联关系可以通过类之间的属性或方法参数来实现。例如,一个“学生”类和一个“课程”类之间可以建立关联关系,其中学生可以选择多门课程,而课程也可以有多名学生。
public class Car {private Engine engine;// 构造函数和其他方法
}public class Engine {// 引擎相关代码
}
说明:关联关系在代码中体现在集合、数组传值等方面。传值的话,需要提前定义全局变量。
3、聚合
聚合(Aggregation):表示整体与部分之间的关系,整体可以包含部分,但部分可以存在独立于整体的情况。
聚合(Aggregation):聚合关系表示整体与部分之间的关系,整体对象包含部分对象。部分对象可以独立存在,并且可以属于多个整体对象。聚合关系强调整体对象与部分对象之间的松散耦合。例如,一个“车队”可以聚合许多“车辆”,每辆车可以独立存在,并且可以属于不同的车队。
public class Team {private List<Player> players;// 构造函数和其他方法
}public class Player {// 球员相关代码
}
聚合是关联的一种体现方式。也可以说聚合是基于关联基础上的。
4、组合
组合(Composition):表示整体与部分之间的强关系,整体拥有对部分对象的完全拥有权,部分的生命周期依赖于整体。
组合(Composition):组合关系也表示整体与部分之间的关系,但是部分对象的生命周期依赖于整体对象。当整体对象被销毁时,部分对象也会随之被销毁。组合关系强调整体对象对部分对象的拥有权。例如,一个“计算机”由“CPU”和“内存”等组成,这些部分对象不能独立存在,它们的生命周期与计算机对象紧密相关。
public class Computer {private CPU cpu;private Memory memory;// 构造函数和其他方法
}public class CPU {// CPU 相关代码
}public class Memory {// 内存相关代码
}
说明:组合也是关联的一种体现方式。是基于关联的基础上的。一个类是另一个
类的一部分,所以最明显的就是在一个类中实例化另一个类,比如在鸟的类中实例化翅膀类。
5、接口
实现(Realization):表示接口和实现类之间的关系,实现类必须实现接口中定义的方法。
实现(Realization):实现关系表示一个类实现了一个接口或抽象类所定义的方法。实现关系用于描述类与接口或抽象类之间的约束。通过实现关系,一个类必须提供接口或抽象类中定义的所有方法的具体实现。例如,可以有一个“支付”接口,然后有多个实现类如“现金支付”和“信用卡支付”,它们都必须实现支付接口中定义的支付方法。
public interface Payment {void pay();
}public class CashPayment implements Payment {public void pay() {// 现金支付逻辑}
}public class CreditCardPayment implements Payment {public void pay() {// 信用卡支付逻辑}
}
6、依赖
依赖(Dependency):表示一个类在某个功能上依赖另一个类,通常是通过方法参数、局部变量等方式来使用另一个类。
依赖(Dependency):依赖关系表示一个类使用另一个类作为参数、局部变量、返回值类型等方式来依赖于另一个类。它强调一个对象对另一个对象的使用,但不涉及长期拥有关系。依赖关系是一种较弱的关系,其中一个类的改变可能会影响到使用它的另一个类。例如,一个“购物车”类可以依赖“商品”类来添加商品到购物车或进行其他操作。
public class ShoppingCart {public void addItem(Item item) {// 添加商品到购物车}
}public class Item {// 商品相关代码
}
强弱关系:继承>接口>组合>聚合>关联>依赖
总结
-
关联关系:关联关系是指两个类之间存在着某种关联,表示一个类知道另一个类的存在。关联关系可以是双向的,也可以是单向的,可以是一对一的,也可以是一对多的。关联关系可以用实线箭头表示。
-
聚合关系:聚合关系是一种强关联关系,表示整体与部分之间的关系。整体对象包含了部分对象,但部分对象可以存在独立于整体对象的情况。聚合关系可以用空心菱形箭头表示。
-
组合关系:组合关系是一种更强的聚合关系,表示整体对象包含了部分对象,且部分对象不能存在独立于整体对象的情况。组合关系可以用实心菱形箭头表示。
-
继承关系:继承关系是一种类之间的关系,表示一个类(子类)继承了另一个类(父类)的属性和方法。子类可以拥有父类的所有特性,并且可以在此基础上进行扩展或修改。继承关系可以用实线箭头加空心三角形表示。
-
实现关系:实现关系是一种接口与类之间的关系,表示一个类实现了一个或多个接口的方法。实现关系可以用虚线箭头加空心三角形表示。
-
依赖关系:依赖关系是一种类之间的关系,表示一个类使用了另一个类的方法或属性,但两个类之间没有直接的关联。依赖关系可以是临时的,也可以是持久的。依赖关系可以用虚线箭头表示。
总之,UML中的六大关系包括关联关系、聚合关系、组合关系、继承关系、实现关系和依赖关系。了解和理解这些关系对于软件设计和系统建模都具有重要意义
相关文章:

UML六大关系总结
UML六大关系有:继承、关系、聚合、组合、实现、依赖。分为通过图和代码总结这些关系。 1、继承 继承(Inheritance):表示类之间的继承关系,子类继承父类的属性和方法,并可以添加自己的扩展。 继承&#x…...

ElementUI基本介绍及登录注册案例演示
目录 前言 一.简介 二.优缺点 三.Element完成登录注册 1. 环境配置及前端演示 1.1 安装Element-UI模块 1.2 安装axios和qs(发送get请求和post请求) 1.3 导入依赖 2 页面布局 2.1组件与界面 3.方法实现功能数据交互 3.1 通过方法进行页面跳转 3.2 axios发送get请求 …...

Python爬虫-某网酒店评论数据
前言 本文是该专栏的第6篇,后面会持续分享python爬虫案例干货,记得关注。 本文以某网的酒店数据为例,采集对应酒店的评论数据。具体思路和方法跟着笔者直接往下看正文详细内容。(附带完整代码) 注意:本文的案例“数据集”,选用的是本专栏上一篇“Python爬虫-某网酒店数…...

C# Onnx Yolov8 Detect 水果识别
效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System…...

测试网页调用本地可执行程序(续1:解析参数中的中文编码)
学习测试网页调用本地可执行程序还遗留一个问题,即网页中调用带中文参数的命令时,本地可执行程序接收到的参数字符串里的中文都转换成了编码模式,看起来如下所示: <a href TestPageCall:-a你好>启动测试程序</a><…...

C++入门知识
Hello,今天我们分享一些关于C入门的知识,看完至少让你为后面的类和对象有一定的基础,所以在讲类和对象的时候,我们需要来了解一些关于C入门的知识。 什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序。对…...
spring和springmvc常用注解
1.Spring常用注解: 1)Repository将DAO类声明为Bean 2)Service用于修饰service层的组件 3)Controller通常作用在控制层,将在Spring MVC中使用 4)Component是一个泛化的概念,仅仅表示spring中的一…...
【Java】Java生成PDF工具类
Java生成PDF工具类 一、介绍 Java生成PDF工具类是一个非常实用的工具类,可以帮助我们以程序化的方式生成PDF文件。通过该工具类,我们可以向PDF文件中添加文字、图片、表格等多种内容,并且可以进行格式化和样式设置。Java生成PDF工具类常用于…...
STL map,插入和查找的一些注意事项
01、前言(废话) C 的 std::map 容器中插入键值对主要有myMap(std::make_pair(key value)) ,它们的区别你了解吗? auto it myMap,find(key) 和 auto value myMap[key] 都可以用于在 C 的 std::map 容器中查找键对应的值ÿ…...

基于springboot+vue的客户关系管理系统(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

【Java 基础篇】Java Stream 流详解
Java Stream(流)是Java 8引入的一个强大的新特性,用于处理集合数据。它提供了一种更简洁、更灵活的方式来操作数据,可以大大提高代码的可读性和可维护性。本文将详细介绍Java Stream流的概念、用法和一些常见操作。 什么是Stream…...
题解:ABC321A - 321-like Checker
题解:ABC321A - 321-like Checker 题目 链接:Atcoder。 链接:洛谷。 难度 算法难度:C。 思维难度:C。 调码难度:C。 综合评价:见洛谷链接。 算法 模拟。 思路 输入n后从后往前依次抽…...

Zig实现Hello World
1. 什么是zig 先列出一段官方的介绍: Zig is a general-purpose programming language and toolchain for maintaining robust, optimal, and reusable software. 大概意思就是说: Zig是一种通用编程语言和工具链,用于维护健壮、最佳和可重用的软件。 官…...

Vue3+element-plus切换标签页时数据保留问题
记录一次切换标签页缓存失效问题,注册路由时name不一致可能会导致缓存失效...
前端教程-TypeScript
官网 TypeScript官网 TypeScript中文官网 视频教程 尚硅谷TypeScript教程(李立超老师TS新课)...

代码随想录算法训练营 动态规划part06
一、完全背包 卡哥的总结,还挺全代码随想录 (programmercarl.com) 二、零钱兑换 II 518. 零钱兑换 II - 力扣(LeetCode) 被选物品之间不需要满足特定关系,只需要选择物品,以达到「全局最优」或者「特定状态」即可。 …...

能跑通的mmdet3d版本
能跑通的mmdet3d版本 1.0版本 2.0版本 注意:mmdet和mmdet3d简单地运行 pip install -v -e . 将会安装最低运行要求的版本。不要pip install -r requirements.txt安装依赖项,否则依赖库版本不对。 运行mmdet3d时,注释掉以上代码。...

SD-MTSP:萤火虫算法(FA)求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)
一、萤火虫算法(FA)简介 萤火虫算法(Firefly Algorithm,FA)是Yang等人于2009年提出的一种仿生优化算法。 参考文献:田梦楚, 薄煜明, 陈志敏, et al. 萤火虫算法智能优化粒子滤波[J]. 自动化学报, 2016, 42(001):89-97. 二、单仓…...

bootstrapv4轮播图去除两侧阴影及线框的方法
文章目录 前言一、前提条件:二、bootstrap文档组件展示与实际应用1.官方文档展示如下:没有阴影2.实际应用情况如下: 三、解决方案 前言 这篇文章主要介绍了bootstrapv4轮播图去除两侧阴影及线框的方法,本文通过示例代码给大家介绍的非常详细…...
python 自建kafka消息生成和消费小工具
要将 Kafka 的消息生产和消费转换为 API 接口,我们可以使用 Python 的 Web 框架。其中 Flask 是一个轻量级且易于使用的选择。下面是一个简单的例子,使用 Flask 创建 API 来生成和消费 Kafka 消息。 1. 安装所需的库: pip install kafka-py…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...