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 {// 商品相关代码
}

强弱关系:继承>接口>组合>聚合>关联>依赖

总结

  1. 关联关系:关联关系是指两个类之间存在着某种关联,表示一个类知道另一个类的存在。关联关系可以是双向的,也可以是单向的,可以是一对一的,也可以是一对多的。关联关系可以用实线箭头表示。

  2. 聚合关系:聚合关系是一种强关联关系,表示整体与部分之间的关系。整体对象包含了部分对象,但部分对象可以存在独立于整体对象的情况。聚合关系可以用空心菱形箭头表示。

  3. 组合关系:组合关系是一种更强的聚合关系,表示整体对象包含了部分对象,且部分对象不能存在独立于整体对象的情况。组合关系可以用实心菱形箭头表示。

  4. 继承关系:继承关系是一种类之间的关系,表示一个类(子类)继承了另一个类(父类)的属性和方法。子类可以拥有父类的所有特性,并且可以在此基础上进行扩展或修改。继承关系可以用实线箭头加空心三角形表示。

  5. 实现关系:实现关系是一种接口与类之间的关系,表示一个类实现了一个或多个接口的方法。实现关系可以用虚线箭头加空心三角形表示。

  6. 依赖关系:依赖关系是一种类之间的关系,表示一个类使用了另一个类的方法或属性,但两个类之间没有直接的关联。依赖关系可以是临时的,也可以是持久的。依赖关系可以用虚线箭头表示。

总之,UML中的六大关系包括关联关系、聚合关系、组合关系、继承关系、实现关系和依赖关系。了解和理解这些关系对于软件设计和系统建模都具有重要意义

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

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

相关文章

大厂面试-16道面试题

1 java集合类有哪些&#xff1f; List是有序的Collection&#xff0c;使用此接口能够精确的控制每个元素的插入位置&#xff0c;用户能根据索引访问List中元素。常用的实现List的类有LinkedList&#xff0c;ArrayList&#xff0c;Vector&#xff0c;Stack。 ArrayList是容量…

用于设计 CNN 的 7 种不同卷积

一 说明 最近对CNN架构的研究包括许多不同的卷积变体&#xff0c;这让我在阅读这些论文时感到困惑。我认为通过一些更流行的卷积变体的精确定义&#xff0c;效果和用例&#xff08;在计算机视觉和深度学习中&#xff09;是值得的。这些变体旨在保存参数计数、增强推理并利用目标…

GO语言篇之发布开源软件包

GO语言篇之发布开源软件包 文章目录 GO语言篇之发布开源软件包新建仓库拉取到本地初始化项目编写代码提交代码发布引用软件包 我们写GO语言程序的时候难免会引用第三方的软件包&#xff0c;那么你知道别人是怎么发布自己的软件包吗&#xff0c;别急&#xff0c;这篇博客教你怎么…

Unity中UI组件对Shader调色

文章目录 前言一、原理在Shader中直接暴露的Color属性&#xff0c;不会与UI的Image组件中的Color形成属性绑定。因为UI的Image组件中更改的颜色是顶点颜色&#xff0c;如果需要在修改组件中的颜色时&#xff0c;使Shader中的颜色也同时改变。那么就需要在应用程序阶段传入到顶点…

第P6周—好莱坞明星识别(2)

五、模型训练 # 训练循环def train(dataloader, model, loss_fn, optimizer):size len(dataloader.dataset) # 训练集的大小num_batches len(dataloader) # 批次数目train_loss, train_acc 0, 0 # 初始化训练损失和正确率for X, y in dataloader: # 获取图片及其标签X…

20-SpringCloudAlibaba-3

七 分布式事物处理 1 认识本地事物 什么是事物 事务就是针对数据库的一组操作&#xff0c;它可以由一条或多条SQL语句组成&#xff0c;同一个事务的操作具备同步的特点&#xff0c;事务中的语句要么都执行&#xff0c;要么都不执行。 举个栗子&#xff1a; 你去小卖铺买东西&…

红黑树Java实现

文章目录 红黑树1. 概念性质2. 红黑树节点定义3. 红黑树的插入情况1情况2情况3其它细节问题插入代码实现 4. 红黑树的验证5.性能分析 红黑树 1. 概念性质 红黑树也是一种二插搜索树&#xff0c;每一个节点上比普通二插搜索树都增加了一个存储位置表示节点的颜色&#xff0c;可…

Spring面试题15:Spring支持几种bean的作用域?singleton、prototype、request的区别是什么?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring支持几种bean的作用域? Spring支持以下几种Bean的作用域: Singleton(单例):这是Spring默认的作用域。使用@Scope(“singleton”)注解或…

pyspark常用算子总结

欢迎关注微信公众号&#xff0c;更多优质内容会在微信公众号首发 1. pyspark中时间格式的数据转换为字符串格式的时间&#xff0c;示例代码 from datetime import datetimedate_obj datetime(2023, 7, 2) formatted_date date_obj.strftime("%Y-%m-%d %H:%M:%S")p…

MySQL基础—从零开始学习MySQL

01.MySQL课程介绍_哔哩哔哩_bilibili 1、MySQL安装 以管理员身份运行cmd net start mysql80net stop mysql80 客户端连接 1). 方式一&#xff1a;使用MySQL提供的客户端命令行工具 2). 方式二&#xff1a;使用系统自带的命令行工具执行指令 mysql [-h 127.0.0.1] [-P 3…

C++真的是 C加加

&#x1f4dd;个人主页&#xff1a;夏目浅石. &#x1f4cc;博客专栏&#xff1a;C的故事 &#x1f3e0;学习社区&#xff1a;夏目友人帐. 文章目录 前言Ⅰ. 函数重载0x00 重载规则0x01 函数重载的原理名字修饰 Ⅱ. 引用0x00 引用的概念0x01 引用和指针区分0x03 引用的本质0x04…

SpringBoot-JWT生成

一、理论 1.配置pom.xml <!-- JWT令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency> 2.加密方式 说明:官网JSON Web Tokens - jwt…

Java实验案例(一)

目录 案例一&#xff1a;买飞机票 案例二&#xff1a;开发验证码 案例三&#xff1a;评委打分 案例四&#xff1a;数字加密 案例五&#xff1a;数组拷贝 案例六&#xff1a;抢红包 案例七&#xff1a;找素数的三种方法 案例八&#xff1a;打印乘法口诀表 案例九&#x…

Python项目Flask ipv6双栈支持改造

一、背景 Flask 是一个微型的(轻量)使用Python 语言开发的 WSGI Web 框架(一组库和模块),基于Werkzeug WSGI工具箱/库和Jinja2 模板引擎,当然,Python的WEB框架还有:Django、Tornado、Webpy,这暂且不提。 Flask使用BSD授权。 Flask也被称为microframework(微框架),F…

【UE 粒子练习】02——使用一些常用的模块来创建粒子

目录 效果 步骤 一、创建材质 二、创建粒子 2.1 必需模块 2.2 初始大小模块 2.3 初始位置模块 2.4 初始速度模块 2.5 生命周期模块 2.6 加速-》恒加速度模块 2.7 生成模块 2.8 生命内颜色模块 2.9 尺寸-》大小随速度模块 2.10 碰撞-》Actor碰撞模块 2.1…

stack与queue的简单封装

前言&#xff1a; stack与queue即栈和队列&#xff0c;先进后出/先进先出的特性我们早已了然于心&#xff0c; 在学习数据结构时&#xff0c;我们利用c语言实现栈与队列&#xff0c;从结构体写起&#xff0c;利用数组或指针表示他们的数据成员&#xff0c;之后再一个个实现他们…

(避开网上复制操作)最详细的树莓派刷机配置(含IP固定、更改国内源的避坑操作、SSH网络登录、VNC远程桌面登录)

一、准备工作 SD卡格式化 二、 树莓派系统环境搭建&#xff08;官方&#xff09; 官方镜像 1.1、 必备的配件 读卡器&#xff0c; 内存卡&#xff08;强烈推荐 32GB 内存卡&#xff0c; #lite 命令行界面版本至少需要 8G&#xff0c; 图形化带桌面版镜像需要 16GB&#xf…

笔试强训Day(一)

T1&#xff1a;组队竞赛 链接&#xff1a;组队竞赛__牛客网 牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。 例如: 一个队伍三个队员…

自己写过比较蠢的代码:从失败中学习的经验

文章目录 引言1. 代码没有注释2. 长函数和复杂逻辑3. 不恰当的变量名4. 重复的代码5. 不适当的异常处理6. 硬编码的敏感信息7. 没有单元测试结论 &#x1f389; 自己写过比较蠢的代码&#xff1a;从失败中学习的经验 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&a…

Postgresql事务测试

参考一个事务中 可以查询自己未提交的数据吗_最详细MySQL事务隔离级别及原理讲解&#xff01;&#xff08;二&#xff09;-CSDN博客 一个事务中 可以查询自己未提交的数据吗_趣说数据库事务隔离级别与原理_weixin_39747293的博客-CSDN博客 【MySql&#xff1a;当前读与快照读…