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…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

