彻底搞清类的依赖关系、关联关系、聚合关系、组合关系
依赖关系
在生产中,很多场景下类与类之间都存在一定的联系,类之间的关系包括:依赖、关联、聚合、组合、继承等 ,通过学习类之间的关系有利提高面向对象编程的能力,为解决生产实际问题打下基础。
假设有两个类,类A和类B,类A的某个成员方法的参数有类B,说明类A使用了类B,类A依赖类B,依赖关系即uses-a关系,依赖关系除了被依赖方作为依赖方的方法参数,还可能作为依赖方的方法返回值存在,这些都是依赖关系的表现形式。如下图所示:
依赖关系的例子有很多,比如:LocalDateTime的now方法根据时区ID创建LocalDateTime,这里说明LocalDateTime依赖ZoneId。
public static LocalDateTime now(ZoneId zone) {return now(Clock.system(zone));
}
在UML中依赖关系使用虚线箭头表示,依赖方指向被依赖方:
LocalDateTime依赖ZoneId的关系如下图所示:
UML是什么?引用百度百科,统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。
关联关系
关联关系是一种强依赖的关系,假设有两个类,类A和类B,类B作为类A的成员变量存在,类A也可为类B的成员变量存在,如果互为成员变量则为双向依赖,否则为单向依赖。
关联关系与依赖关系的区别在于,依赖关系是一种临时的关系,依赖关系主要体现在方法参数,当调用方法时才有关系,关联关系是一种长期的关系,主体现在成员变量,无论是否调用方法这种关系都存在。
比如:ZonedDateTime与LocalDateTime关联,ZonedDateTime是带时区的日期时间,ZonedDateTime关联LocalDateTime。
在UML中双向关联关系一条实线表示,单向关联为单向实线箭头表示 。
ZonedDateTime关联LocalDateTime的关系图表示如下:
聚合关系
聚合关系是一种has-a关系,假设有两个类,类A和类B,类A包含类B,类B是类A的成员变量,聚合关系和关联关系都体现在成员变量,它们的区别在于:关联关系双方是平级的,是个体和个体的关系,聚合关系双方不是平级的,是整体和部分的关系。
比如:LocalDateTime类中包括LocalDate date和LocalTime time,这是一种聚合关系。
在UML中聚合关系用下边的符号表示 聚合关系:
菱形连接整体,实线连接部分。LocalDateTime类中包括LocalDate date和LocalTime time聚合关系如下图:
组合关系
组合关系是一种强聚合的关系,组合关系与聚合关系的区别在于:聚合关系中部分离开整体仍可存活,组合关系中部分离开整体没有意义,比如:人由身体、四肢等部分组成 ,它们的关系为组合关系。
在UML中组合关系使用下边的符号表示:
人与身体、四肢的关系表示如下:
类与类之间的关系还有继承关系、接口实现关系,课程后边会详细讲解。
配套视频下载
传智燕青Java基础精讲教程带你从零基础自学Java到大牛课程开放下载
彻底搞清类的依赖关系、关联关系、聚合关系、组合关系相关推荐
- 使用Classycle验证类/包依赖关系
Classycle是一个非常好的类和包依赖项的分析器和依赖项检查器. 它使您可以定义程序包组(组件,层),并表达不需要的依赖性,例如周期或特定程序包之间的依赖性. 例如,您可以指定不希望包周期,也不需 ...
- UML类图--依赖关系
依赖--Dependency:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖. UML展示: 箭头指向:带箭头的虚线,指向被使用者 代码展示: // 人类-类 pu ...
- 关联关系和依赖关系的区别
关联关系:A类实例化的时候需要B类的对象引用或指针作为参数 依赖关系:A类的某个方法使用B类,可能是方法的参数是B类或在方法中获得了一个B类的实例 某个类以成员变量的形式出现在另一个类中,二者是关联关 ...
- java中友元类_友元类成员的依赖关系|循环依赖
定义一个CBottle类,另一个类CCarton的某个成员对CBottle进行操作,因此在CBottle类中赋予CCarton成员的友元权利.我们很容易写出如下代码: //CBottle类的头文件 b ...
- c++类与类的依赖(Dependency)关系
类与类的依赖关系 类与类的依赖(Dependency)关系 具体表现 现实例子 代码表现 类与类的依赖(Dependency)关系 对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖 ...
- 类继承和依赖注入的关系_管理类依赖关系:依赖关系注入,服务定位符和工厂简介,第1部分...
类继承和依赖注入的关系 Let's face it: for good or bad, OOP has been actively drilling deep holes in the soil of ...
- java设计模式之UML③类图讲解多个类之间的关系
图来自大话设计模式 虚线和箭头指向依赖关系,也就是动物类依赖氧气类和水类 一般依赖关系是一个类使用另一个类作为参数使用 动物是一个父类 鸟继承动物 其中空心三角继承关系(箭头方向是子类指向父类) 实心 ...
- 面向对象的基本概念(二)--UML.类之间的关系
8.接口和类继承 (1)接口中不能有非抽象方法,但抽象类中可以有. (2)一个类能实现多个接口,但只能有一个父类. ( 3)接口并不属于继承结构,它实际与继承无关,因此无关的类也可以实现同一个接口. ...
- JavaSE(this与super关键字;关联、依赖关系)
this与super 1. this与super访问普通成员 1.1 this和super访问注意事项 调用普通成员: this.成员变量 可以访问本类对象的成员变量 super.成员变量 可以访问父 ...
- Python学习,类空间问题及类之间的关系
一. 类的空间问题** 1.1 何处可以添加对象属性 class A:def __init__(self,name):self.name = namedef func(self,sex):self.s ...
最新文章
- ITK:使用最小最大曲率流平滑RGB图像
- 判断随机抽取代码_高中数学中离散型随机变量的分布列知道吗?均值与方差能干什么?...
- Spring注入总结
- 服务器标配 SSH 协议,你了解多少?
- OpenCV实现简单人脸检测
- CORS 实战 专题
- WordPress主题zibll子比主题+新增阿里云短信/腾讯云/短信宝/风吹雨短信接口
- 存储基础(VG、LV、LP、PV、PP)
- 北大中文核心期刊计算机类前30%名录
- 软件著作权申请怎么申报?申报流程、应该注意哪些事项
- Dplayer Android播放器,呆呆播放器手机版官方下载
- 医学影像中的基础知识
- 【pygame小游戏】摸鱼系列:”躲避粒子“小游戏在线玩,看谁才是”最强王者“?
- Follow My Heart Of Jan.Feb.Mar. 2023
- 2022-2028年全球与中国近红外照相机行业发展趋势及投资战略分析
- 银行卡收单业务____单边账___现实生活中单边账的处理
- 服务器的系统信息命令 厂家,查看云服务器系统的命令行
- 【手游服务端】梦幻西游十五门派端+教程+GM物品后台
- 程序员工作面试题目汇总
- 从WAVE SUMMIT+2021,寻找新一代AI人不可或缺的“凝视”