面向对象之类间的关系
来源:互联网 发布:淘宝店铺短连接怎么弄 编辑:程序博客网 时间:2024/06/06 20:13
类之间关系
1、 关联
两个类之间有联系,但是这种联系很轻,不是很直接,就像有三个人A、B、C,其中A和C相互不认识,但是他们都认识B,那么A和C就有了关联。如果需要,A和C就可以通过B认识,但是当前他们都没有认识对方的必要(以后说不定会有需要)。对应到面向对象程序设计当中,就好像类A和类C通过一个B(类)属性相关联。
书中的一个例子就是;公司和员工签订了劳动合同,那么员工类和公司类就通过合同类建立了一份联系。
个人感觉关联所对应的联系很轻。它确实存在,但是与A和C的主要职责关系不是很大:A完成它的职责几乎用不到和C建立的这份关系,那么这份关系有什么用呢?既然建立关系,那么必然是有用的,只是和主要职责关系不大。就像上面的例子,如果有一天员工和公司发生了薪酬矛盾,那么合同类就有用了,但是员工和公司的主要职责并不是发生矛盾吧。
2、 依赖
依赖是比关联更强、更紧密的一种关系。由客户类指向提供商类,即如果A依赖B,那么就画一条从A到B的虚线实箭头。
那么在什么情况下A就依赖了B呢?或者说依赖的形式与定义是什么呢?答案是:如果A使用了B提供的服务,那么A就依赖B了。
这里的服务包括:
- 方法调用:在A的方法内调用B的方法;
- 数据依赖:A类使用了B类的属性或数据;
- 对象依赖:A生成了B的对象,并将其返回给其他类。
依赖比关联更强、更紧密的地方就体现在如果A依赖B,那么在A履行职责的过程中需要B提供帮助——无论是属性上的帮助还是方法上的帮助,所以这层关系相对于关联就显得更加直接了。
3、 组合与聚合
组合与聚合都是一种“整体与部分”的关系。比如汽车与车轮的关系就是“整体与部分”的关系,而汽车和马路的关系就是关联的关系(汽车的职责是行驶,而马路相当于汽车执行职责的一个场景)。
聚合:类A的属性包含一个类B对象,但是A不负责创建B的对象,两个类的生命周期不同,整体消失后(A销毁后),部分还可以存在(B的对象还存在),因为A不负责B的创建,自然也不影响B的消亡。
书中的例子是汽车与车轮就是一种聚合的关系,汽车不负责自己生产车轮,而且汽车由于其他原因坏了后(汽车类消亡)车轮还可以给其他车用(车轮类将继续存在)。
组合:类A的属性包含一个类B对象,而且因为A负责创建B的对象,所以当A消亡后B也自然而然的消亡。
书中的例子是大树与树叶、树枝就是一种组合关系,树的生长伴随着树枝和树叶的生长,树的死亡意味着树叶的死亡。
4、实现
实现包括:
- 实现接口——成为符合某一标准、具备某一功能的一个类或者接口;
- 实现抽象类的方法——成为具备某种特性的类;
个人觉得,接口表示一种功能,实现接口表示一个类具备了这一功能;而实现抽象类方法的过程是一种在获得一种功能的同时也获得了一种身份——毕竟,抽象类也是类,也是相似事物的统称,而接口毕竟只是一组交互的相关功能点定义的集合。(为什么这么说呢?答案在这里~)
最后,欢迎大家批评指正~
- 面向对象之类间的关系
- JavaScript面向对象之类的创建
- JavaScript面向对象之类的继承
- 面向对象之类的封装与调用
- 面向对象编程之类的继承性
- UE4面向对象之类的继承
- php面向对象之类的创建
- 面向对象-----浅析对象间的关系
- Java面向对象之类
- JAVA面向对象之类
- 面向对象之类和对象
- 面向对象之类和对象
- 面向对象之类与对象
- 黑马程序员------面向对象之类
- #1面向对象之类方法#
- php面向对象之类成员
- 面向对象的php之类解耦的好处
- 面向对象的关系图
- 多频外差三维重建 投影仪非线性误差补偿
- A protocol for Dying
- Android 音频系统:从 AudioTrack 到 AudioFlinger
- java socket
- Android面试题-手把手教你如何解决as jar包冲突
- 面向对象之类间的关系
- WPF 添加半透明的遮罩层AdornerLayer,微信搜索效
- 1065: 【计算直线的交点数】
- 库与框架的区别
- TCP,IP,HTTP,SOCKET区别和联系
- 2017-05-05 angularjs的ng-switch-when用法
- 数据结构+算法
- 算法导论程序3--最大子数组问题(Python)
- 微分与导数的四则运算关系