类之间的关系(关联、继承、聚合、组合、依赖、实现)

本文详细解析了类图中的六种关系:继承、实现、组合、聚合、关联和依赖,对比了它们之间的强弱关系,并提供了形象的例子帮助理解。

前言

类图是使用频率最高的UML图之一,主要用于描述系统中所包含的类以及它们之间的相互关系,帮助开发人员理解系统,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。
类间的关系包括关联、继承、聚合、组合、依赖和实现。这里没有去深究泛化和继承的细微区别哈哈,此处默认泛化就是继承。

继承(Generalization)

一个类(子类、子接口)继承另外的一个类(父类、父接口)的功能,并可以增加它自己的新功能的能力,如果几个类存在部分相同功能,此时就可以抽象出一个父类来,将相同的部分由父类实现,让他们都继承这个类。继承是通过部分相同的功能,实现不同的结果
表现形式:实线加空心箭头
在这里插入图片描述

实现(Realization)

实现关系用于定义接口和实现接口的类间关系,为什么要有接口?如果几个类对外处理的结果是一致的,但得到这种结果的方式不一样,此时就可以定义一个统一的接口,让这几个类都以自己的方式来实现,我们称这种方式为接口处理。所以,接口由子类自定义实现的过程就体现了一种“实现”关系。
表现形式:虚线加空心箭头
在这里插入图片描述

组合(Composition)

组合和聚合都是讨论一个类由其他类构成的情况,是一种整体和部分的关系。组合是一种很强的关系,部分对象的创建、存在、和消亡都是和整体一起的,所谓同生共死的关系,比如ATM机由读卡器、吐钞器、凭条打印等组成,他们就构成一个组合关系,创建一个ATM机类对象,就必须构造读卡器对象。
表现形式:实线加实心棱形
在这里插入图片描述

聚合(Aggregation)

组合和聚合都是讨论一个类由其他类构成的情况,是一种整体和部分的关系。聚合相较于组合,关系要弱一些,但也是整体和部分的关系,并非同生共死,部分实例可以添加到聚合整体,也可以从聚合整体中移出。比如大学里的学院,其部分包括:管理办公室、系和研究中心,系可以创建和撤销,研究中心也可以独立于学院而存在。
表现形式:实线加空心棱形
在这里插入图片描述

关联(Association)

关联关系是一种在语义级别的强依赖关系,相较与依赖的偶然性、临时性,关联是长期的、平等的。关联可以是单向,也可以是双向的。
表现形式:无箭头线段 在这里插入图片描述

依赖(Dependency)

一个类A使用到了另一个类B,但是这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A,通常,类B作为类A的方法的参数(或者局部变量)存在。
表现形式:虚线加箭头
在这里插入图片描述

总结

类之间的关系强弱表现为:继承 > 实现 > 组合 > 聚合 > 关联 > 依赖。各种关系之间并不是有非常明确的界限,要根据实际场景去确定类之间的关系。
关联和依赖的区别:关联关系主要通过属性来实现,依赖则通过函数参数或局部变量来实现。关联是更强,长期的关系。
聚合和组合的异同:都是整体和部分的关系,但组合更强,组合部分的生命周期同整体。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值