UML中关联、依赖、聚集等关系的异同

阿里开源最强数字人工具 EchoMimicV2,本地部署(一) EchoMimicV2是阿里推出的半身人体AI数字人项目,基于参考图片、音频剪辑和手部姿势序列生成高质量动画视频,确保音频内容与半身动作的一致性。现在本地部署,安装体验一下。 阅读详情
1.  关联:连接模型元素及链接实例,用一条实线来表示;
2.  依赖:表示一个元素以某种方式依赖于另一个元素,用一条虚线加箭头来表示;
3.  聚集:表示整体与部分的关系,用一条实线加空心菱形来表示;
4.  组成:表示整体与部分的有一关系,用一条实线加实心菱形来表示;
             (关联,依赖,聚集,组成的异同见后描述)
5.  泛化(继承):表示一般与特殊的关系,用一条实线加空心箭头来表示;
6.  实现:表示类与接口的关系,用一条虚线加空心箭头来表示;
 
关联,依赖,聚集的异同:(《Java面向对象编程》一书,作者:孙卫琴 来源: www.javathinker.org)
在建立对象模型时,很容易把依赖、关联和聚集关系混淆。当对象A和对象B之间存在依赖、关联或聚集关系时,对象A都有可能调用对象B的方法,这是三种关系之间的相同之处,除此之外,它们有着不同的特征。
1.依赖关系的特征

对于两个相对独立的系统,当一个系统负责构造另一个系统的实例,或者依赖另一个系统的服务时,这两个系统之间主要体现为依赖关系,例如生产零件的机器和零件,机器负责构造零件对象。再例如充电电池和充电器,充电电池通过充电器来充电。再例如自行车Bicycle和打气筒Pump,自行车通过打气筒来充气。图1-39为Bicycle类与Pump类的类框图。
图1-39 Bicycle类与Pump类的依赖关系
Bicycle类和Pump类之间是依赖关系,在Bicycle类中无需定义Pump类型的变量。Bicycle类的定义如下:
public class Bicycle{
    /** 给轮胎充气 */
    public void expand(Pump pump){
    pump.blow();
    }
}

在现时生活中,通常不会为某一辆自行车配备专门的打气筒,而是在需要充气的时候,从附近某个修车棚里借个打气筒打气。在程序代码中,表现为Bicycle类的expand()方法有个Pump类型的参数。以下程序代码表示某辆自行车先后到两个修车棚里充气:
myBicycle.expand(pumpFromRepairShed1); //到第一个修车棚里充气
myBicycle.expand(pumpFromRepairShed2); //若干天后,到第二个修车棚里充气
2.关联关系的特征
对于两个相对独立的系统,当一个系统的实例与另一个系统的一些特定实例存在固定的对应关系时,这两个系统之间为关联关系。例如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司;再例如自行车和主人,每辆自行车属于特定的主人,每个主人有特定的自行车,图1-40显示了主人和自行车的关联关系。而充电电池和充电器之间就不存在固定的对应关系,同样自行车和打气筒之间也不存在固定的对应关系。
图1-40 主人和自行车的关联关系

Person类与Bicycle类之间存在关联关系,这意味着在Person类中需要定义一个Bicycle类型的成员变量。以下是Person类的定义:
public class Person{
    private Bicycle bicycle; //主人的自行车
    public Bicycle getBicycle(){
        return bicycle;
    }
    public void setBicycle(Bicycle bicycle){
        this.bicycle=bicycle;
    }
    /** 骑自行车去上班 */
    public void goToWork(){
        bicycle.run();
    }
}

在现时生活中,当你骑自行车去上班时,只要从家里推出自己的自行车就能上路了,不象给自行车打气那样,在需要打气时,还要四处去找修车棚。因此,在Person类的goToWork()方法中,调用自身的bicycle对象的run()方法。假如goToWork()方法采用以下的定义方式:
/** 骑自行车去上班 */
public void goToWork(Bicycle bicycle){
    bicycle.run();
}
那就好比去上班前,还要先四处去借一辆自行车,然后才能去上班。

3.聚集关系的特征

当系统A被加入到系统B中,成为系统B的组成部分时,系统B和系统A之间为聚集关系。例如自行车和它的响铃、龙头、轮胎、钢圈以及刹车装置就是聚集关系,因为响铃是自行车的组成部分。而人和自行车不是聚集关系,因为人不是由自行车组成的,如果一定要研究人的组成,那么他应该由头、躯干和四肢等组成。由此可见,可以根据语义来区分关联关系和聚集关系。
聚集关系和关联关系的区别还表现在以下方面:
(1) 对于具有关联关系的两个对象,多数情况下,两者有独立的生命周期。比如自行车和他的主人,当自行车不存在了,它的主人依然存在;反之亦然。但在个别情况下,一方会制约另一方的生命周期。比如客户和订单,当客户不存在,它的订单也就失去存在的意义。
(2) 对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。比如小王的自行车被偷了,那么自行车的所有组件也不存在了,除非小王事先碰巧把一些可拆卸的组件(比如车铃和坐垫)拆了下来。
不过,在用程序代码来表示关联关系和聚集关系时,两者比较相似。图1-41为自行车Bicycle与响铃Bell的聚集关系。
图1-41 自行车和响铃的聚集关系
以下例程1-6是Bicycle类的源程序。
例程1-6 Bicycle.java
public class Bicycle{
    private Bell bell;
    public Bell getBell(){
        return bell;
    }
    public void setBell(Bell bell){
        this.bell=bell;
    }
    /** 发出铃声 */
    public void alert(){
        bell.ring();
    }
}
在Bicycle类中定义了Bell类型的成员变量,Bicycle类利用自身的bell成员变量来发出铃声,这和在Person类中定义了Bicycle类型的成员变量,Person类利用自身的bicycle成员变量去上班很相似。
4。组成关系的特征
组成关系是一种两个类之间的关系,其中整体类由部分类组成,部分类需要整体类才能存在,这种关系意味着销毁整体类将会同时销毁部分类

爬虫实战:抖音视频搜索数据爬虫开发实战(附完整Python源码) 【代码】抖音视频搜索数据爬虫开发实战(附完整Python源码) 阅读详情

相关推荐

基于STM32的多普勒雷达测速

基于多普勒雷达传感器,以STM32单片机为主控芯片,根据不同模块检测距离的不同,使用不同多普勒雷达传感器实现对远近距离车辆行驶速度及方向的测量。 1、基础知识 无线电探测和测距,是用无线电(电磁波)方法发现目标并测定其空间位置的装置。随着雷达技术的发展,现代雷达不仅可以对目标进行定位,还可以测量目标的速度、对目标进行成像甚至测量目标的大小和材料特性。所有利用雷达波来检测物体速度的原理,其理论基础皆源自于“多普勒效应”,...

weixin_52801934的博客 6315

区分关联、依赖和聚集关系

在建立对象模型时,很容易把依赖、关联和聚集关系混淆。当对象A和对象B之间存在依赖(虚线实箭头)、关联(带实线的箭头)或聚集关系(带实线的菱形箭头)时,对象A都有可能调用对象B的方法,这是三种关系之间的相同之处,除此之外,它们有着不同的特征。  1.依赖关系的特征  对于两个相对独立的系统,当一个系统负责构造另一个系统的实例,或者依赖另一个系统的服务时,这两个系统之间主要体现为依

夜下探戈 2496

中科蓝讯Downloader配置实战:从软硬开关机到ANC降噪的完整指南

本文提供了中科蓝讯Downloader工具的详细配置实战指南。内容涵盖从基础的软硬开关机选择与配置,到核心的EQ音效调试、触摸按键与入耳检测优化,以及高阶的ANC降噪与电源管理设置。旨在帮助开发者快速掌握关键配置项,高效完成蓝牙耳机产品的功能调试与优化。

s4t5u6v7的博客 508

面向对象的6种关系:关联,聚合,组合,泛化,依赖,实现

1.单项关联Association 一个类的实例Customer使用另外一个类的实例Address,这两个对象之间为关联关系。 public class Customer { private Address address; private String name; public String getName() { return name; } public Address getAddress() { retur

wdxzuishuia的博客 7548

基于虚拟阻抗重塑的构网型VSG变流器SISO序阻抗建模与宽频振荡抑制策略分析(面向高比例新能源并网场景)

本文深入探讨了基于虚拟阻抗控制的构网型VSG变流器SISO序阻抗建模技术及其在高比例新能源并网场景中的宽频振荡抑制策略。通过虚拟阻抗重塑,有效改善了变流器的阻抗特性,解决了次/超同步频段的振荡问题,并提供了参数设计、阻抗扫频验证等实用技巧,为新能源并网系统的稳定性提供了可靠解决方案。

weixin_29268385的博客 251

LTspice introduction - 2 LTspice的界面

LTspice的界面主要有两个:Schematic Capture和Waveform Viewer Schematic Capture 它主要是用来画电路图的,画完电路图之后,添加一些dot 命令同时选择一些仿真的参数,点击执行(Run)Waveform Viewer 如果你的仿真不是op point的话,一个都会打开它,在它里面你可以画图相应的图形。 有两种方式可以在Viewer

贾亮的专栏 3220

谈一谈自己对依赖、关联、聚合和组合之间区别的理解

在学习面向对象设计对象关系时,依赖、关联、聚合和组合这四种关系之间区别比较容易混淆。特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等。他们在编程语言中的体现却是基本相同的,但是基本相同并不等于完全相同,这一点在我的前一篇博文《设计模式中类的关系》中已经有所提及,下面就来详细的论述一下在java中如何准确的体现依赖、关联、聚合和组合。 首先看一看书上对这四种关系的定义:...

yuanlanjun 835

VS2022+Qt6保姆级配置指南:从插件安装到项目互通全流程(附常见错误解决)

本文提供了一份详细的Visual Studio 2022与Qt6集成开发环境配置指南。从插件安装、环境搭建到项目创建与互通,涵盖了全流程操作步骤,并针对常见的配置错误和调试问题提供了实用的解决方案,帮助开发者高效构建企业级桌面应用。

nginx7reverse的博客 1205

【半转载】关联和依赖的关系区分!

依赖:是比关联更弱的关系, 是对象间短暂的一种关系,在这个短暂的关系中,被调用类表现为调用类的局部变量、方法的参数、以及调用类调用被调用类的静态方法,在这些情况下,我们说调用类和被调用类之间就属于依赖关系。关联:是对象间长期的一种关系,在这个长期的关系中,被调用类表现为调用类的引用、或者调用类的属性,在这些情况下,我们说调用类和被调用类之间就属于关联关系。在学习uml中,关联和依赖的关系一直很头痛,也没有权威的材料来说明他们之间的关系。今天就这个问题综合网上的资料和一些书籍做个总结。

weixin_57699289的博客 2601

uniapp | vue2 | vue3 - 解决调用天地图功能服务时 http 网络请求报错 net::ERR ABORTED 503(Service Temporarily Unavailabl)

vue,uni-app,天地图,请求报错,503,请求失败,map.tianditu,天地图503,天地图请求503,接口503错误怎么办,vue天地图,uniAPP天地图,获取定位接口服务器报错503,获取当前定位,定位功能,IP属地定位,天地图服务器报错,如何解决报错,net::ERRABORTED503(ServiceTemporarilyUnavailabl),GET,POST,服务暂时不可用,react天地图,一直等待吗,报错怎么办,定位报错,轨迹,经纬度,天地图服务器503,在vue2

🏆 前端领域优质创作者 4438

图解联合概率密度、边缘概率密度、条件概率密度之间的关系

简要图解联合概率密度、边缘概率密度、条件概率密度之间的关系

一个搬运知识的笨小孩 2万+

UML类图关系中关联、依赖、聚集等关系的异同

本文和大家重点讨论一下UML类图关系中几种关系的异同,在UML类图关系中,关联,依赖,聚集,组成的联系十分紧密,不容易区分,本文试图用通俗的语言来讲解这四种关系的区别。 UML类图关系中关联、依赖、聚集等关系的异同 -------------------------------------------------------------------------------- 1.

helinsen的专栏 2302

当启动容器的时候提示:exec format error?如何解决问题

Docker容器出现"exec format error"的主要原因是架构不兼容(如ARM设备运行x86镜像)。解决方案包括:1)匹配镜像与宿主机架构;2)构建时指定平台;3)安装QEMU模拟器;4)修复文件权限和格式;5)验证基础镜像兼容性。排查流程应从检查架构匹配开始,逐步验证权限、解释器和换行符等问题。建议优先使用多架构镜像,构建时明确指定平台,并使用buildx工具生成多平台镜像。调试时可进入容器手动验证文件格式和兼容性。

weixin_39291964的博客 2718

[转] UML中关联、依赖、聚集等关系的异同

1.  关联:连接模型元素及链接实例,用一条实线来表示;2.  依赖:表示一个元素以某种方式依赖于另一个元素,用一条虚线加箭头来表示;3.  聚集:表示整体与部分的关系,用一条实线加空心菱形来表示;4.  组成:表示整体与部分的有一关系,用一条实线加实心菱形来表示;             (关联,依赖,聚集,组成的异同见后描述)5.  泛化(继承):表示一般与特殊的关系,用一条实线加空心箭头...

yangyangmilan的专栏 150

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

UML依赖和UML关联关系的异同点解析

和大家一起学习一下UML中UML依赖和UML关联关系的异同,只有了解了他们之间的异同才能在使用的时候很好的选择,相信本节的学习一定会让你对UML中几种关系有一定的认识。 UML中UML依赖和UML关联关系的异同 1.关联:连接模型元素及链接实例,用一条实线来表示; 2.依赖:表示一个元素以某种方式依赖于另一个元素,用一条虚线加箭头来表示; 3.聚集:表示整体与部分的关系,用一条

明心书屋 828

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

UML中关联、依赖、聚集等方式的异同

1.  关联:连接模型元素及链接实例,用一条实线来表示;2.  依赖:表示一个元素以某种方式依赖于另一个元素,用一条虚线加箭头来表示;3.  聚集:表示整体与部分的关系,用一条实线加空心菱形来表示;4.  组成:表示整体与部分的有一关系,用一条实线加实心菱形来表示;5.  泛化(继承):表示一般与特殊的关系,用一条实线加空心箭头来表示;6.  实现:表示类与接口的关系,用一条虚

懒得打字 1102

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: SEO工具,站长必备
下一篇: 持续集成 .Net手册
sightboy
博客等级 码龄22年 3粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值