面向对象--依赖、关联、聚合、组合的关系

类与类的表示关系 一 关联关系 关联关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系,如老师和学生、师傅和徒弟、丈夫和妻子等。关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。先介绍一般关联。 关联又可以分为单向关联,双向关联,自关联。 1 单向关联 在UML类图中单向关联用一个带箭头的实线表示。上图表示每个顾客都有一个地址,这通过让Customer类持有一个类型为Address的成员变量类实现。 2 双向关联 从上图中很容易看出,所谓的双向关联就是双方各自持有对方类型的成员 阅读详情

    如果你确定两件对象之间是is-a的关系,那么此时你应该使用继承;比如菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承而不是聚合。


    如果你确定两件对象之间是has-a的关系,那么此时你应该使用聚合;比如电脑是由显示器、CPU、硬盘等组成的,那么你应该把显示器、CPU、硬盘这些类聚合成电脑类,而不是从电脑类继承。

 

类间的关系


    网上关于此类的讨论非常多,发现对于该问题的理解各有各的说法,而各个说法中又相去甚远。通过浏览这些讨论以及对《O'Reilly - UML 2.0 In A Nutshell (2007)》的参考,发表一下自己的看法

 

类间关系有很多种,在大的类别上可以分为两种:纵向关系、横向关系。

纵向关系就是继承关系,它的概念非常明确,也成为OO的三个重要特征之一,这里不过多的讨论。

横向关系较为微妙,按照UML的建议大体上可以分为四种:

依赖    (Dependency)
关联    (Association)
聚合    (Aggregation)
组合    (Composition)
它们的强弱关系是没有异议的:依赖 < 关联 < 聚合 < 组合

然而它们四个之间的差别却又不那么好拿捏,需要好好体会。

 

依赖:
UML
表示法:虚线 + 箭头
关系:" ... uses a ..."
此关系最为简单,也最好理解,所谓依赖就是某个对象的功能依赖于另外的某个对象,而被依赖的对象只是作为一种工具在使用,而并不持有对它的引用。
典型的例子很多,比如:

 

class Human
{
    public void breath()
    {
        Air freshAir = new Air();
        freshAir.releasePower();
    }
    public static void main()
    {
        Human me = new Human();
        while(true)
        {
            me.breath();
        }
    }
}

class Air
{



    public void releasePower()
    {
        //do sth.
    }
}

释义:一个人自创生就需要不停的呼吸,而人的呼吸功能之所以能维持生命就在于吸进来的气体发挥了作用,所以说空气只不过是人类的一个工具,而人并不持有对它的引用。

 

关联:
UML
表示法:实线 + 箭头
关系:" ... has a ..."
所谓关联就是某个对象会长期的持有另一个对象的引用,而二者的关联往往也是相互的。关联的两个对象彼此间没有任何强制性的约束,只要二者同意,可以随时解除关系或是进行关联,它们在生命期问题上没有任何约定。被关联的对象还可以再被别的对象关联,所以关联是可以共享的。
典型的例子很多,比如:
class Human
{
    ArrayList friends = new ArrayList();
    public void makeFriend(Human human)
    {
        friends.add(human);
    }
    public static void main()
    {
        Human me = new Human();
        while(true)
        {
            me.makeFriend(mySchool.getStudent());
        }
    }
}

释义:人从生至死都在不断的交朋友,然而没有理由认为朋友的生死与我的生死有必然的联系,故他们的生命期没有关联,我的朋友又可以是别人的朋友,所以朋友可以共享。

 

 

聚合:  
UML
表示法:空心菱形 + 实线 + 箭头
关系:" ... owns a ..."
聚合是强版本的关联。它暗含着一种所属关系以及生命期关系。被聚合的对象还可以再被别的对象关联,所以被聚合对象是可以共享的。虽然是共享的,聚合代表的是一种更亲密的关系。
典型的例子很多,比如:


class Human
{
    Home myHome;
    public void goHome()
    {
        //
在回家的路上
        myHome.openDoor();
        //
看电视
    }
    public static void main()
    {
        Human me = new Human();
        while(true)
        {
            //
上学
            //
吃饭
            me.goHome();
        }
    }
}


释义:我的家和我之间具有着一种强烈的所属关系,我的家是可以分享的,而这里的分享又可以有两种。其一是聚合间的分享,这正如你和你媳妇儿都对这个家有着同样的强烈关联;其二是聚合与关联的分享,如果你的朋友来家里吃个便饭,估计你不会给他配一把钥匙。

 

 

组合:
UML
表示法:实心菱形 + 实线 + 箭头
关系:" ... is a part of ..."
组合是关系当中的最强版本,它直接要求包含对象对被包含对象的拥有以及包含对象与被包含对象生命期的关系。被包含的对象还可以再被别的对象关联,所以被包含对象是可以共享的,然而绝不存在两个包含对象对同一个被包含对象的共享。
典型的例子很多,比如:


class Human
{
    Heart myHeart = new Heart();
    public static void main()
    {
        Human me = new Human();
        while(true)
        {
            myHeart.beat();
        }
    }
}


释义:组合关系就是整体与部分的关系,部分属于整体,整体不存在,部分一定不存在,然而部分不存在整体是可以存在的,说的更明确一些就是部分必须创生于整体创生之后,而销毁于整体销毁之前。部分在这个生命期内可以被其它对象关联甚至聚合,但有一点必须注意,一旦部分所属于的整体销毁了,那么与之关联的对象中的引用就会成为空引用,这一点可以利用程序来保障。心脏的生命期与人的生命期是一致的,如果换个部分就不那么一定,比如阑尾,很多人在创生后的某个时间对其厌倦便提前销毁了它,可它和人类的关系不可辩驳的属于组合。


在UML中存在一种特例,就是允许被包含对象在包含对象销毁前转移给新的对象,这虽然不自然,但它给需要心脏移植的患者带来了福音。

 

 

C++实现类与类之间简单关系(依赖,关联,聚合,组合,继承) 学习面向对象分析(OOD)与面向对象设计(OOD),在获取并列出概念类之后,必须要明确类与类之间的关系。这些关系由弱到强大致分为一下几种:依赖、关联、聚合、组合、继承。下面将分别以我最简单的语言进行概述。 首先上UML图和代码: class Wheel { int size; public: Wheel(int sz) : size(sz) {}; int getSz() {... 阅读详情

相关推荐

别再乱按F8了!Win10系统修复的正确姿势:用管理员CMD运行sfc /scannow

本文详细介绍了Windows 10系统修复的正确方法,重点推荐使用管理员CMD运行`sfc /scannow`命令。相比传统的F8键和重装系统,这一方法更高效且安全,能解决大多数系统文件损坏问题。文章还提供了管理员CMD的启动方式、sfc命令的完整参数解析以及实战故障排除流程图,帮助用户快速恢复系统健康。

weixin_29218963的博客 463

类与类之间的几种关系

一、继承关系 继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议性。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口。 二、实现关系 实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。在Java中此类关系通过关键字implements明确标识,在设计时一

weixin_43149049的博客 1万+

SAP ABAP实战:手把手教你用BAPI_BILLINGDOC_CREATEMULTIPLE批量开票(附完整代码与避坑指南)

本文详细解析了SAP ABAP中BAPI_BILLINGDOC_CREATEMULTIPLE批量开票的全流程,包括参数配置、事务控制、错误处理及性能优化。通过实战案例和完整代码示例,帮助开发者高效处理大批量发票生成任务,避免常见陷阱,提升开发效率。

weixin_34101914的博客 267

类与类的四种关系

类与类的关系有四种。 1.泛化:就是继承关系 2.依赖:一个类作为另一个类中某个方法的参数 3.实现:实现接口。例如比大小的类都是实现了IComparable 4.关联:一个类作为另一个类的成员变量。

liudavi的博客 3931

IPsec (主模式,野蛮模式)

IPsec vpn的主模式和野蛮模式

七汣的博客 3417

利用LATX技术在龙芯安同AOCS OS上部署坚果云:跨架构文件同步实战

本文详细介绍了如何在龙芯安同AOCS OS上,利用LATX指令翻译技术部署坚果云客户端,实现跨架构文件同步。通过安装LATX环境、解压x64安装包、运行安装脚本三步,成功在loongarch64架构上运行仅支持x86_64的软件,解决了国产平台办公协同的痛点,并分享了性能实测与优化建议。

weixin_29305337的博客 457

类间的关系

网上关于此类的讨论非常多,发现对于该问题的理解各有各的说法,而各个说法中又相去甚远。通过浏览这些讨论以及对《O'Reilly - UML 2.0 In A Nutshell (2007)》的参考,发表一下自己的看法 类间关系有很多种,在大的类别上可以分为两种:纵向关系、横向关系。 纵向关系就是继承关系,它的概念非常明确,也成为OO的三个重要特征之一,这里不过多的讨论。 横向关系较为微妙,按照...

weixin_30301183的博客 448

【2025年华为秋招(AI)-11月19日-第一题(100分)- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要: 本文包含15道单选题和5道多选题,涵盖机器学习、深度学习、概率统计和数值计算等多个领域。单选题涉及Transformer的Softmax层作用、最小二乘法拟合、概率密度计算、注意力机制、反向传播问题、ROC曲线用途、截断误差来源等知识点。多选题考察大模型训练技术、BERT/GPT比较、强化学习对齐方法、CNN常见层以及PCA特性等内容。题目设计注重理论与实践结合,既包含数学推导,又关注前沿技术应用,全面检验读者对机器学习核心概念的理解能力。正确答案均附有详细解析,帮助理解相关技术原理。

m0_73659489的博客 147

UML之类图设计

类图设计 <<abstract>>:表示SingleCore、MultiCore和CoreFactory类均定义为抽象类。(纯虚函数的类被称为抽象类(abstractclass),而只含有虚函数的类(class)不能被称为抽象类(abstractclass)。)。 指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的...

qq_34462436的博客 1869

7.19华为OD机试真题 新系统 - 物流仓储多维度成本利润综合查询系统 (Java/Py/C/C++/Js/Go)

7.19华为OD机试真题 新系统 - 物流仓储多维度成本利润综合查询系统 (Java/Py/C/C++/Js/Go)

算法大师! 618

Python蓝色跳动的爱心(完整代码)

Python语言实现蓝色跳动的爱心的完整代码。 代码分析 这段代码使用了 库来创建一个动态的爱心图案,并在屏幕上显示带有动态效果的“我爱你”字样。以下是对这段代码的详细分析: 用于创建图形用户界面(GUI)。 用于生成随机数,主要用于控制爱心图案的扩散效果。 中的 , , , 用于数学计算,生成爱心形状和扩散效果。 包含了 等常量,用于控制控件的对齐方式。 2. 全局变量定义 , : 定义画布的大小。 , : 爱心的中心坐标。 : 用于定义爱心形状的缩放

AIGC 1921

面向对象的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

打开 AI 投研新时代 —— 深度解析 GitHub 高星项目 daily_stock_analysis

GitHub热门开源项目"daily_stock_analysis"是一款AI驱动的智能股票分析工具,能自动抓取行情数据、分析新闻语义并生成结构化报告。该项目采用Python开发,通过GitHub Actions实现全自动运行,支持邮件、企业微信等多渠道推送。核心功能包括AI决策仪表盘、多数据源整合和零成本部署方案,特别适合需要自动化投研辅助的个人投资者。项目强调其仅为分析工具而非投资建议,提醒用户注意AI模型的潜在误差。该工具通过智能化处理重复工作,帮助投资者提升决策效率,成为量化投资

陈奕昆的博客 1529

面向对象设计对象之间关系---依赖、关联、聚合和组合

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

廿四桥明月夜的博客 8870

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

面向对象 依赖 关联 聚合 组合 关系

zhuan 如果你确定两件对象之间是is-a的关系,那么此时你应该使用继承;比如菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承而不是聚合。 如果你确定两件对象之间是has-a的关系,那么此时你应该使用聚合;比如电脑是由显示器、CPU、硬盘等组成的,那么你应该把显示器、CPU、硬盘这些类聚合成电脑类,而不是从电脑类继承。 类间的关系 网上关于此类的讨论非常多,发现对于该问

2> /dev/null 843

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

uml 面向对象类关系(继承、实现、依赖、关联、聚合、组合)

在进行一个OO系统设计时候我们需要根据系统的需求来抽象出一些类,并且设计类与类之间的关系,也就是我们常说的业务建模,设计优良的类间关系是实现我们常说的“高内聚,低耦合”系统的前提条件,这里我就来梳理下面向对象中类与类有哪几种关系和它们的使用场景。 继承(泛化Generalization) 1.概念  指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,在Java中使用extends关键字实现,如果继承的父类是抽象类,并且父类中有抽象方法,抽象方法必须在子类(这里子类是非抽象类,

az44yao的专栏 3099

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

面向对象:类关系(泛化/实现/依赖/关联/聚合/组合)

泛化 泛化,也称作继承关系。指面向对象中派生类与基类之间的关系,一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能。 实现 在C++中,对于拥有共同行为的类可以将它们抽象出一个接口(实际上可以理解为父类,该类里面只保留了公有接口,不包含成员属性),当一个类实现了该接口中的方法,称为实现。 依赖 两个相对独立的类对象,当类A中需要依赖类B的实例化对象时,称其为依赖关系。在C++中具体体现为,类A当中使用了类B,其中类B是作为类A的方法参数、方法中的局部变量、或者静态方法调用。 关联 指一个类

至绽至强的博客 4079

java--依赖、关联、聚合和组合之间区别的理解 在学习面向对象设计对象关系时,依赖、关联、聚合和组合这四

在学习面向对象设计对象关系时,依赖、关联、聚合和组合这四种关系之间区别比较容易混淆。特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等。 依赖(Dependency)关系是类与类之间的联接。依赖关系表示一个类依赖于另一个类的定义。例如,一个人(Person)可以买车(car)和房子(House),Person类依赖于Car类和House类的定义,因为Person类引用了...

725

java中的依赖与继承的关系_面向对象类关系(继承、实现、依赖、关联、聚合、组合)...

在进行一个OO系统设计时候我们需要根据系统的需求来抽象出一些类,并且设计类与类之间的关系,也就是我们常说的业务建模,设计优良的类间关系是实现我们常说的“高内聚,低耦合”系统的前提条件,这里我就来梳理下面向对象中类与类有哪几种关系和它们的使用场景。继承(泛化Generalization)1.概念指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,在Java中使用extends...

weixin_35273106的博客 710

设计模式中的六种关系:依赖、关联、聚合、组合、实现、继承

面向对象设计模式中,类与类之间主要有6种关系,他们分别是:实现、继承、组合、聚合、关联、依赖。他们的耦合度依次减弱。

zhy1379的博客 8611

面向对象设计:依赖、关联、聚合与组合关系的本质与应用

在面向对象编程中,类与类之间的关系设计是构建高内聚、低耦合软件系统的核心。理解依赖、关联、聚合与组合这四种核心关系,是掌握对象间协作模式的基础。依赖关系描述临时性的使用,如方法参数传递,旨在最小化耦合;关联关系表示对象间长期的知晓关系,通常通过成员变量体现。聚合与组合则用于建模整体与部分的关系,其中聚合强调部分可独立于整体存在(如部门与员工),而组合则表示部分与整体同生共死(如汽车与引擎)。这些关系直接影响代码的复用性、可维护性和扩展性。在实际开发中,结合设计模式如委托模式,并遵循合成复用原则(优先使用组合

weixin_26840895的博客 556

java中依赖_java中依赖、关联、聚合

在学习面向对象设计对象关系时,依赖、关联、聚合和组合这四种关系之间区别比较容易混淆。特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等。依赖(Dependency)关系是类与类之间的联接。依赖关系表示一个类依赖于另一个类的定义。例如,一个人(Person)可以买车(car)和房子(House),Person类依赖于Car类和House类的定义,因为Person类引用了Car...

weixin_35879493的博客 5010

面向对象建模依赖、关联、聚合以及组合关系区别小结

依赖、关联、聚合、组合总结

u012324412的博客 868

依赖、关联、聚合和组合及其之间区别的简单理解

在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强。 1. 依赖(Dependence)         依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。定义比较晦涩难懂,但在java中的表现还是比较直观的:类A当

zhou1519的专栏 6708
上一篇: 系统分析师修养
下一篇: SAXBuilder、Document、Element的用法
良才2015
博客等级 码龄19年 25粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值