UML关系:继承(泛化)、实现、依赖、关联、聚合、组合的联系与区别

2023-05-16

分别介绍这几种关系:

UML关系:继承(泛化)、实现、依赖、关联、聚合、组合的联系与区别

一、表示符号上的区别

二、具体区别与联系

1. 继承/泛化(Generalization)

  【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性。

  【箭头指向】:带三角箭头的实线,箭头指向父类

 

  2.实现(Realization)

  【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现. 一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;

  【箭头指向】:带三角箭头的虚线,箭头指向接口

3.依赖(Dependency)

  【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖. 一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某个老师要授课,则需要有这么一门课让他教授,此时老师与课之间的关系就是依赖;

  【代码表现】:局部变量、方法的参数或者对静态方法的调用

  【箭头及指向】:带箭头的虚线,指向被使用者

  4.关联(Association)

【关联关系】:是类与类之间的联接,它使一个类知道另一个类的属性和方法。两个类或者类与接口之间语义级别的一种强依赖关系,这种关系比依赖更强,一般是长期性的,而且双方的关系一般是平等的。比如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

  【代码体现】:成员变量/全局变量

  【箭头及指向】:带普通箭头的实心线,指向被拥有者

  上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。

  下图为自身关联:

  5.聚合(Aggregation)

  【聚合关系】:关联关系的一种特例, 是强的关联关系. 聚合是整体与部分的关系,且部分可以离开整体而单独存在,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,比如计算机与CPU、公司与员工、车和轮胎的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

聚合关系也是使用实例变量实现的. 从java 语法上是分不出关联和聚合的. 关联关系中两个类是处于相同的层次, 而聚合关系中两不类是处于不平等的层次, 一个表示整体, 一个表示部分.

  【代码体现】:成员变量/全局变量

  【箭头及指向】:带空心菱形的实心线,菱形指向整体

  6.组合(Composition)

  【组合关系】:也是关联关系的一种特例,是比聚合关系还要强的关系,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如:公司和部门是整体和部分的关系,没有公司就不存在部门合成关系不能共享。

组合跟聚合几乎相同,唯一的区别就是"部分"不能脱离"整体"单独存在,就是说,"部分"的生命期不能比"整体"还要长。

【代码体现】:成员变量/全局变量

【箭头及指向】:带实心菱形的实线,菱形指向整体

  各种关系的强弱顺序:    

  泛化=实现>组合>聚合>关联>依赖

  下面这张UML图,比较形象地展示了各种类图关系:

三、综合比较

1.聚合与组合

(1)聚合与组合都是一种结合关系,只是额外具有整体-部分的意涵。

(2)部件的生命周期不同

聚合关系中,整件不会拥有部件的生命周期,所以整件删除时,部件不会被删除。再者,多个整件可以共享同一个部件。

组合关系中,整件拥有部件的生命周期,所以整件删除时,部件一定会跟着删除。而且,多个整件不可以同时间共享同一个部件。

(3)聚合关系是"has-a"关系,组合关系是"contains-a"关系。

2.关联和聚合

(1)表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

(2)关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的。

(3)关联是一种结构化的关系,指一种对象和另一种对象有联系。

(4)关联和聚合是视问题域而定的,例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。但是在卖轮胎的店铺业务里,就算轮胎离开了汽车,它也是有意义的,这就可以用聚合了。

3.关联和依赖

(1)关联关系中,体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。

(2)依赖关系中,可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A。

4.综合比较

这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:

组合>聚合>关联>依赖

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UML关系:继承(泛化)、实现、依赖、关联、聚合、组合的联系与区别 的相关文章

  • prometheus+grafana对数据库mysql监控

    安装 mysql span class token function docker span run span class token parameter variable name span mysql test span class t
  • 性能测试:Redis性能监控(redis-stat工具)

    redis 监控 redis 监控一共有两种方式 xff0c 一种是通过info命令 xff0c 还有一种是使用redis stat工具 两者其实本质是一样的 xff0c 不过一个是命令行的模式下查看监控数据 xff0c 而另外一种是图形化
  • springboot中controller层接收参数,servers层调用mapper层,一条sql搞定排序

    前言 很多小伙伴们在公司不管是测试C端产品还是B端产品 xff0c 都会测到排序的业务需求 xff1b 那么我们就会好奇排序是如何实现的呢 xff1f 下面我们开始介绍代码的实现 数据库建表 我们需要创建一个书籍book表结构 xff0c
  • SpringBoot+HttpClient+JsonPath提取A接口返回值作为参数调用B接口

    前言 在做java接口自动化中 xff0c 我们常常需要依赖多个接口 xff0c A接口依赖B xff0c C xff0c D接口的响应作为请求参数 xff1b 或者URL中的参数是从其他接口中提取返回值作获取参数这是必不可少的 那么怎么实
  • SpringBoot开发——热更新JRebel安装、激活及使用

    在开发项目时 xff0c 本地调试项目经常会因为某处修改而需要重新启动项目 xff0c 虽然可以在Edit Configuretions里面将Runing Application Update Policies里的选项设置成 Update
  • windows10环境下的RabbitMQ安装步骤(图文)

    记录下本人在win10环境下安装RabbitMQ的步骤 xff0c 以作备忘 第一步 xff1a 下载并安装erlang 原因 xff1a RabbitMQ服务端代码是使用并发式语言Erlang编写的 xff0c 安装Rabbit MQ的前
  • 用Postman生成测试报告

    newman newman是一款基于nodejs开发的可以运行postman脚本的工具 xff0c 使用Newman xff0c 可以直接从命令运行和测试postman集合 安装nodejs 下载地址 xff1a https nodejs
  • 关于uni app提示【打包时未添加push模块】的问题解决

    问题 临时拿到一个前端项目 xff0c 被要求将此项目通过android studio完成离线打包 xff0c 毕竟Hbuilder的在线打包看运气 xff0c 运气不好的要等好几十分钟 xff0c 非常不方便 然后就按照官方文档一个个进行
  • 同步异步&同步互斥&几种锁

    文章目录 同步异步同步 xff1a 异步 xff1a 同步互斥临界资源 xff1a 临界区 xff1a 同步 xff1a 互斥 xff1a 几种锁自旋锁spinlock互斥锁mutex读写锁rwlockRCU锁可重入锁和不可重入锁条件变量c
  • Ubuntu 开发环境搭建之samba共享配置(免密登录)

    作者 xff1a Ligo 20200508 1 安装samba xff1a sudo apt get install samba 安装smbclient xff1a sudo apt get install smbclient 2 新建共
  • 从 GitHub 上手动安装python包教程

    基本流程 第一步 xff0c 下载 xff08 https pypi org 自己输入要下载的库名称 xff09 第二步 xff0c 解压 xff0c 打开到出现 setup py 的文件目录 第三步 xff1b 打开 Windows Po
  • 记:解决ADB Interface 找不到驱动程序方法

    前言 由于之前一直在自己笔记本上跑数据 xff0c 公司台式机上一直没安装sdk xff0c 终于有时间了 xff0c 以为很快安装好 xff0c 没想到台式机碰到一堆坑 最后终于解决 xff0c 特此记录 xff0c 希望给有同样问题的小
  • os.system执行.py文件

    import os os system r 39 E start py 39 错误写法 xff0c 没声明文件类型 xff0c 默认按你系统文件原始格式打开 os system r 39 python E start py 39 正确写法
  • python图像识别 - paddleocr (小白安利款)

    前言 之前我有记载过 xff0c 关于Python的图像识别的文章 xff0c 但是识别率不高且不够灵活 xff0c 实用性不强 xff0c 所以不怎么推荐 最近发现一个新的Python写好的的轮子 paddleocr xff0c 本人也安
  • 【QtScrcpy】开源的投屏控制软件 - 安利

    前言 因为本人有在做群控项目 xff0c 有很多手机设备的开发和研究 xff0c 这里给大家介绍安利一个好用的安卓 电脑的投屏控制软件 xff0c 简洁好用 xff0c 不仅可以投屏 xff0c 还能反向批量控制 xff0c 并且它是免费的
  • 【解决】:error:Microsoft Visual C++ 14.0 is required.报错

    前言 有时候在新电脑上要安装个Python包 xff0c 会出现这个问题 xff0c 所以专门写篇文章做个记录 xff0c 方便以后好找 问题表现 xff1a 从上图中可以看到错误 error Microsoft Visual C 43 4
  • 逆向分析:还原 App protobuf 协议加密

    前言 之前有记录js逆向 安卓逆向等 xff0c 今天这里记录下一些协议逆向 xff0c 这种一般出现在websocket 协议 protobuf 协议等 xff0c 某音 xff0c B站 APP等都有用到这些协议加密 xff0c 而我们
  • 【解决】常见反爬总结之SVG映射

    前言 记得好早之前 xff0c 我做过关于外卖平台字体加密反爬的总结笔记 xff0c 今天给大家记录另外一种常见的反爬 SVG 映射 什么是SVG呢 xff1f SVG 全称为 Scalable Vector Graphics xff0c
  • Django实现用户注册登录

    学习Django中 xff1a 写一个用户注册登录系统 xff0c 开始搞事情 61 61 61 61 61 O O 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 6
  • 详谈PC端软件 - 加壳与脱壳

    加壳一般是指保护程序资源的方法 xff0c 在二进制的程序中植入一段代码 xff0c 在运行的时候优先取得程序的控制权 xff0c 属于软件加密 脱壳一般是指除掉程序的保护 用来修改程序资源 壳的概念 软件的壳分为加密壳 压缩壳 伪装壳 多

随机推荐

  • 机器学习专业名词中英文对照

    activation 激活值 activation function 激活函数 additive noise 加性噪声 autoencoder 自编码器 Autoencoders 自编码算法 average firing rate 平均激活
  • 个人总结 - JS逆向解析

    目前加密的方式总结有下面几点 xff1a 对称加密 xff08 加密解密密钥相同 xff09 xff1a DES DES3 AES 非对称加密 xff08 分公钥私钥 xff09 xff1a RSA 信息摘要算法 签名算法 xff1a MD
  • Hadoop的读写流程

    HDFS的读流程 1 HDFS采用的是 一次写入多次读取 的文件访问模型 一个文件经过创建 写入和关闭之后就不需要改变 这一假设简化了数据一致性问题 xff0c 并且使高吞吐量的数据访问成为可能 2 client让NameNode获取该文件
  • Python中的迭代器与可迭代对象

    可迭代对象 xff08 Iterable xff09 与迭代器 xff08 Iterator xff09 是python中的重要概念 xff0c 两者容易被弄混淆 xff0c 这里来总结一下 for循环 我们通常用for循环遍历一个可迭代对
  • 计算机串口程序配置,串口设置软件 串口调试工具如何使用

    串口调试工具 可以用来调试 串口通信程序 这时 xff1a 串口调试工具 作为一端 xff0c 串口通信程序 作为另外一端 调试时 xff0c 一端发送 xff0c 另外一端接收 多机情况下 xff0c 用串口线 连接 2台电脑就可以了 注
  • EGO-PLANNER代码阅读(地图部分)

    plan env grid map cpp 最近由于多个比较实验的原故 xff0c 把ego planner及Fast planner中TOPO REPLAN的代码都分析了一遍 EGO主要是为了看gridmap的使用 TOPO Replan
  • vueRouter 的使用及实现

    前言 我们经常会在vue项目中用到 vueRouter xff0c 通过路由实现页面的跳转 xff0c 不同的url展示相应的页面或内容 那么前端的路由究竟是如何实现的呢 xff0c 首先让我们先来了解一下路由的基本知识吧 xff01 前端
  • 对象的删除

    obj deleteLater 删除一个对象时 也会解除它与父对象之间的关系 deleteLater 并没有将对象立即销毁 而是向主消息循环发送了一个event 下一次主消息循环收到这个event之后才会销毁对象 这样做的好处是可以在这些延
  • VNC共享剪切板,打开远程复制粘贴功能

    出现原因 xff1a 本地剪切文件向服务器粘贴 xff0c 发现没有粘贴内容 xff08 服务器端执行 xff09 1 打开任务管理器 xff0c 找到rdpclip exe 结束任务 2 任务管理器面板 xff0c 文件 新建任务 输入r
  • centos7怎么永久关闭防火墙

    1 命令行界面输入命令 systemctl status firewalld service 并按下回车键 2 然后在下方可度以查看得到 active xff08 running xff09 xff0c 此时说明防火墙已经被打开了 3 在命
  • Ubuntu18.04创建用户

    1 创建用户 Step1 创建用户 sudo useradd username m Step2 设置密码 sudo passwd username 在弹出来的提示窗口中设置密码即可 Step3 切换用 su username 2 删除用户
  • win10下安装Hadoop3.2.2

    因为Hadoop需要依赖java环境 xff0c 因此需要先安装JDK1 8 xff08 大于1 8版本的jdk需要收费 xff0c 因此很多厂家开发都是依赖与jdk1 8 hadoop当然也是啦 xff09 1 安装JDK1 8 下载JD
  • Ubuntu18.04离线安装pytorch_gpu版本教程

    由于没有网络 xff0c 只能离线安装 xff0c 下载对应的包 xff0c 进行安装 1 安装显卡驱动 xff1a 根据购买的显卡型号进行安装 下载地址 xff1a https www nvidia cn Download index a
  • ubuntu18.04 ssh拷贝密钥失败

    问题描述 xff1a 生成密钥拷贝到远程电脑命令ssh copy id root 64 远程电脑ip 失败 出现了 xff1a etc ssh ssh config line 52 Unsupported option rsaauthent
  • wget下载方法

    wget下载cudnn wget c O cudnn tar 下载链接地址 参考 xff1a https baijiahao baidu com s id 61 1715589159640466321 amp wfr 61 spider a
  • 世界坐标系与车辆坐标系转换

    坐标系 车辆坐标系与相机坐标系的转换关系图
  • git amend方法

    引用 xff1a https blog csdn net Flyfreelylss article details 126021281 1 场景 有时候我们代码已经提交 xff08 commit xff09 了 xff0c 发现需要追加几处
  • git branch

    Git创建本地分支 使用 git brach 命令可以新建一个分支 比如在main branch 就在main branch创建 git branch dev xxx git checkout dev xxx 根据已有分支直接创建新的分支
  • C语言四川麻将算法,四川麻将胡牌算法

    满意答案 四川麻将中基础牌型和杠一起计费 最后输赢为两项之和 基础牌型 格 与基本番数 xff1a 平胡 xff1a 普通的四个搭子一对将 如 xff1a 123 345 789万 234 66筒 1番 大对子 对子胡 xff1a 四个搭子
  • UML关系:继承(泛化)、实现、依赖、关联、聚合、组合的联系与区别

    分别介绍这几种关系 xff1a UML关系 xff1a 继承 xff08 泛化 xff09 实现 依赖 关联 聚合 组合的联系与区别 一 表示符号上的区别 二 具体区别与联系 1 继承 泛化 xff08 Generalization xff