第1章 对象导论
1.1 抽象过程
面向对象语言五大特征:
(1)万物皆对象:将对象视为奇特的变量,它可以存储数据,除此之外,你还可以要求他在自身上执行操作。
(2)程序是对象的集合,他们通过发送消息来告知彼此所要做的。
要想请求一个对象,就必须对该对象发送一条消息,更具体的说,可以把消息想象为对某个特定对象的方法的调用。
(3)每个对象都有自己的由其他对象所构成的存储。换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象。
(4)每个对象都拥有其类型。
(5)某一特定类型的所有对象都可以接受同样的消息。(类似里斯替换原则)
自我总结:程序即把所有对象放在一起处理,对象之间通过消息进行通信,一个类型即有一个对象,对象有自己的状态和操作。
1.2 每个对象都有一个借口
接口确定了对某一特征对象所能发出的请求。
1.3 每个对象都提供服务
当正在试图开发或理解一个程序设计时,最好的方法之一就是将对象想象为“服务提供者”。
着色从事这件事的一种方式就是问一下自己:如果我可以将问题从表象中抽离出来,那么什么样的对象可以马上解决我的问题?即:我要干嘛?怎么干?要用到什么工具?
将对象看着服务的提供者还有一个好处:它有助于提高对象的内聚性。即:一个对象最好只提供一种服务,不要提供多种服务,采用组合的方式进行开发。
1.4 被隐藏的具体实现(类似于迪米特法则)
利用访问控制符的权限将程序开发人员按照校色分为类创建者(哪些创建新数据类型的程序员)和客服端程序员(哪些在其应用中使用数据类型的类消费者)。这样就不会存在这类创建者修改了类,而必须让客客户端程序修改的难题;也不会让客户端程序员随便修改类中的东西。
1.5 复用具体实现
复用代码是面向对象程序设计语言所提供的最了不起的有点之一。
最简单的复用类的方式就是直接使用该类的一个对象,此外也可以将那个类的一个对象预置新的类中。我们称其为“创建一个成员对象”。新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成。因为是在使用现有的类合成新的类,所以这中概念称为“组合”。如果组合是动态发生的,那么通常被称为“聚合”。组合经常被视为“has-a”(拥有)关系,就像“汽车拥有引擎”一样。
1.6 继承(首先考虑组合)
(1)直接在导出类中添加新方法
(2)直接重写基类的方法,即覆盖。
1.6.1 “是一个”与“像是一个”关系
用一个导出类对象来完全替代一个基类对象,这可以被视为“纯粹替代”,通常称之为“替代原则”。这种导出类与基类的关系是is-a(是一个)关系。有时,必须导出类型中添加新的东西,这样也就扩展了接口,但是任然能代替基类,这就是is-like-a(像是一个)关系。
1.7 伴随多态可互换对象
非面向对象:前期绑定
面向对象:后期绑定
java中,动态绑定石默认行为,不需要添加额外的关键字来实现多态。
向上转型:把导出类看做是它的基类的过程。前父后子的写法。
1.8 单根继承
java继承自一个终极基类,名字叫Object。
单根继承结构宝成所有对象都具备某些功能,因此你知道,在你的系统中你可以在每个对象上执行某些基本操作。所有对象都可以很容易的在堆上创建,而参数传递也得到了极大的简化。单个继承结构使得辣鸡回收器实现变得简单很多。
1.9 容器
在任何需要时都可扩充自己以容纳你置于其中的所有东旭,称之为:容器。