计算机起源于机器,因此,编程语言的产生也始于对机器的模仿。
1.1抽象过程
1)万物皆为对象
2)程序是对象的集合,它们通过发送消息来告知彼此所要做的
3)每个对象都有自己的由其它对象所构成的存储
4)每个对象都拥有其类型
5)某一特定类型的所有对象都可接收同样的消息
1.2每个对象都有一个接口
创建抽象数据类型(类)是面向对象程序设计的基本概念之一。
因为类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以一个类实际上就是一个数据类型。
面向对象程序设计的挑战之一,是在问题空间的元素和解空间的对象之间创建一对一的映射。
接口确定了某一特定对象所能发出的请求,每一个可能的请求都有一个方法与之关联。
向某个对象“发送消息”(产生请求),这个对象便知道此消息的目的,然后执行对应的程序代码。
创建一个对象的方法:定义这个对象的“引用”,然后调用new方法来创建该类型的新对象。
向对象发送消息:对象名称.请求
1.3每个对象都提供服务
将对象想象成“服务提供者”
1.4被隐藏的具体实现
被隐藏的部分通常代表对象内部脆弱的部分
访问控制存在的原因:①让客户端程序员无法触及他们不应该触及的部分;②允许库设计者可以改变类内部的工作方式,而不用担心会影响到客户端程序员。
public:任何人都可以访问
private:只有类创建者和类型的内部方法可以访问
protected:与private作用相当,区别在于继承的类可以访问protected成员,不能访问private成员
默认的(没有加上面的三个词):包访问权限,可以访问同一个包的其他类的成员
1.5复用具体实现
代码复用是面向对象程序设计语言所提供的最了不起的优点之一
复用某个类的方式:
1)直接使用该类的一个对象
2)创建一个成员对象(即:将那个类的一个对象置于某个新类中)
新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成。因为是使用现有的类合成新的类,所以这种概念被称为“组合”
如果组合是动态发生的,那么通常被称为聚合
组合通常被视为”has-a“关系
在建立新类时,应该首先考虑组合
1.6继承
当继承现有的类时,也就创造了新的类型
导出类与基类具有相同的类型
使基类与导出类产生差异的方法:
1)直接在导出类中添加新的方法 ------------------is-like-a
2)改变现有基类的方法的行为(覆盖)----------is-a
“是一个”与“像是一个”关系
1)is-a(是一个)关系:可以用一个导出类的对象完全替代一个基类对象(纯粹替代、替代原则)
2)is-like-a(像是一个)关系:不是完美的替代,因为基类无法访问新添加的方法。新类型具有旧类型发接口,但它还包含其他方法。