面向对象的核心特征之:聚合/组合、接口/实现、抽象
1.聚合/组合 Aggregation/Composition
首先继承(Inheritance )它表述的是一种“is a”的关系,即一个类继承了另一个类的特征,比如:A car is a vehicle(汽车是一种交通工具) A student is a person(学生是一类人)
而聚合(Aggregation)它表述的是一种“has a”的关系,即一个对象是另一个对象的一部分,比如:A car has wheels (汽车有轮子) A person has legs (人有腿)
聚合:一个对象包含一组其他对象。如,大学 是由学生、老师组成的
Aggregation relationships are transitive 聚合是可传递的。如,if A contains B an B contains C, then A contains C
Aggregation relationships are asymmetric 聚合是不对称的。如,If A contains B, then B does not contain A
组合:
聚合关系的一个变种,称为组合。整体控制着部分的生命。
即整体与部分之间是命运相关体,比如手掌与手指(手掌没了手指自然就不存在了)
部分对象只能存在于整体对象之中,整体对象控制部分对象的生命周期
注意: 有些时候,聚合与组合的关系不是很明确。 如,房间 与 门(这时候就统一认为是聚合即可,当关系不明确的时候使用聚合即可)
2.接口/实现 Interface /Implementation
生活中的例子,比比皆是
电视机接口 、水管接口等,举例:汽车里面有哪些接口?
对于软件系统
软件系统的内部是由大量的互相关联的类构成的,当对其中某一个类的局部进行修改的时候,不能影响其它的类
接口 interface
describe how users of the class interact with the class 描述一个类的用户如何与这个类交互
实现 Implementation
完成接口所定义的功能,如类、构件等完成的任务
A change to the implementation should not require a change to the user's code.(对实现的修改,不需要对用户代码进行更改。)
both the user and the implementation must conform to the interface specification(用户和实现都必须符合接口规范)
举例如下图:
3.抽象 Abstraction
定义:“抽象表示一个对象与其他所有对象相区别的基本特征,因此提供了同观察者角度有关的清晰定义的概念界限。 ”
简单地讲,抽象(abstraction)就是过滤掉对象的一部分特性和操作,直到只剩下你所需要的属性和操作。
抽象是一种思维方式、一种思维能力,“抽取比较像的部分出来”
客观世界的事物由各种各样的实体(对象)构成
每个对象都有各自的内部状态和运动(状态)规律
根据对象的属性和运动规律的相似性可以将对象分类
复杂对象由相对简单的对象组成
不同对象的组合及其之间的相互作用和联系构成了系统
对象间的相互作用通过消息传递,对象根据所接收到的消息做出自身的反应
“继承” 的强大就在于它的抽象和组织技术
毛主席提出的“统一战线”、“论持久战”,都是高度抽象的结果
抽象错了,危害很大!如张国涛的“南下抗日!
抽象与具体的比较:
举例:
你要到飞机场去。坐进出租车,该如何描述?
A: 师傅,请送我去飞机场!(抽象)
B: 师傅,走!出门左拐、直行、过桥、右转、直行、红绿灯左拐后继续直行…..(具体)
抽象是面向对象领域发现类的主要方法