第一章对象导论(1.1-1.6)
1.1抽象过程
- 程序员必须建立起在机器模型(位于“解空间”内,这是你对问题建模的地方,例如计算机)和实际待解决问题的模型(位于“解空间”内,这是问题存在的地方,例如一项物业)之前的关联。
- 面向对象五个基本特征:
- 万物皆对象
- 程序是对象的集合,它们通过发消息来告知彼此所要做的。
- 每个对象都有自己的由其他对象所构成的存储。
- 每个对象都拥有其类型。
- 某一特定的内类型的所有对象都可以接受同样的消息。
- 更加简洁的描述:对象具有状态、行为和标识。这意味着每一个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生行为),并且每一个对象都可以唯一地与其他对象区分开来,具体来说,就是每一个对象在内存中都有一个唯一的地址。
1.2每个对象都有一个接口
- 具有相同的特征和行为的对象所归属的类的一部分。
- 在程序执行期间具有相同特征(数据元素)和行为(功能)的对象集合,所以一个类实际上就是一个数据类型。
- 面向对象程序设计的挑战之一,就是在问题空间的元素和解空间的对象之间创建一对一的映射。
- 每个对象都只能满足某些请求,这些请求由对象的接口(interface)所定义,决定接口的便是类型。
- 为了向对象发送消息,需要声明对象的名称,并以圆点连接一个消息请求。
1.3每个对象都提供服务
- 高内聚是软件设计的基本质量要求之一,这意味着一个软件构建(例如一个对象,当然它也有可能是指一个方法或一个对象库)的各个方面“组合”得很好。
1.4被隐藏的具体实现
- 访问控制的第一个存在原因就是让客户端程序员无法触及他们也不应该触及的部分——这些部分对数据类型的内部操作来说是必需的,但并不是用户解决特定问题所需要的接口的一部分。
- 访问控制的第二个存在原因就是允许库设计者可以改变类内部的工作方式不用担心会影响到客户端程序员。
- Java用三个关键字在类的内部设定边界:public、private、protected。
- 还有一种默认访问权限,通常称为包访问权限,类可以访问在同一个包(库构件)中的其它类的成员,但是在包之外,这些成员如同指定了private一样。
1.5复用具体实现
- 复用是面向对象程序设计所提供的最了不起的优点之一。
1.6 继承
- 一个基类包含其所有导出类型所共享的特性和行为。可以创建一个基类来表示系统中某些对象的核心概念,从基类类型中导出其他类型,来表示此核心可以被实现的各种不同方式。
- 导出类与基类具有相同的类型。
- 想要覆盖某个方法,可以直接在导出类中创建该方法的新定义即可。
- 判断是否继承,就是要确定是否可以用is-a来描述来描述类之间的关系,并使之具有实际意义。