对象导论
一 抽象过程
所有编程语言都提供抽象机制.人们所能解决的问题的复杂性直接取决于抽象的类型和质量.所谓的"类型"是指"所抽象的是什么?"汇编语言是对底层机器的轻微抽象,许多命令式语言都是对汇编语言的抽象,但是它们在解决问题时要基于计算机的结构而不是所要解决的问题的结构来考虑.程序员需要建立起机器模型和实际待解问题的模型之间的关联.
另一种对机器建模的方式就是只针对待解决的问题,如早期的编程语言,LISP和APL.但是它们只试用于它们要解决的特定类型问题,一旦超出其领域范围就力不从心.
面向对象方式通过向程序员提供表示问题空间中的元素的工具而更进了一步.这种方式使得程序员不会受限于任何特定类型的问题.这种思想的实质是:程序可以通过添加新类型的对象使自身适用于某个特定的问题.
一个成功的面向对象语言的基本特性:
1)万物皆为对象
2)程序是对象的集合,它们通过发送消息来告知彼此所要做的.
3)每个对象都是自己的由其他对象所构成的存储.
4)每个对象拥有其类型.
5)某个特定类型的所有对象都可以接受同样的消息.
二 每个对象都有一个接口
创建抽象数据类型是面向对象程序设计的基本概念之一.抽象数据类型的运行方式与内置类型几乎完全一致:你可以创建某一类型的变量,然后操作这些变量.每个类的成员或元素都具有某种共性,每个成员都有自己的状态.因为类描述了具有相同特性和行为的对象集合,所以一个类实际上就是一个数据类型.一旦类被建立,就可以随心所欲地创建类的任意个对象,然后去操作它们.接口确定了对某一特定对象所能发出的请求.
三 每个对象都是服务提供者
1,当正在试图开发或理解一个程序设计时,最好的方法之一就是将对象想象为"服务提供者".程序本身将向用户提供服务,它将通过调用其他对象提供的服务来实现这一目的.你的目标就是去创建能够提供理想解决问题的一系列对象.
2,着手从事这件事的一种方式就是问一下自己:"如果我可以将问题从表象中抽取出来,那么什么样的对象可以马上解决我的问题?"
3,将对象看做是服务提供者还有一个好处就是可以提高对象的内聚性.
4,将对象作为服务提供者看待是一件伟大的简化工具.
四 被隐藏的具体实现
1,程序开发人员按照角色划分为类创建者和客户端程序员.客户端程序员的目标是收集各种用来实现快速应用开发的类.类创建者的目标是创建类.这种类只向客户端程序员暴露必需的部分,而隐藏其他部分.
2,在任何相互关系中,具有关系涉及的各方都遵守的边界是十分重要的事情.访问控制对于界定各自的边界起着重要的作用.
3,访问控制的第一个存在的原因就是让客户端程序员无法触及他们不应该触及的部分.
4,问控制的第二个存在的原因就是允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员.
5,java用三个关键字在类的内部设定边界:public,private,protected,还有一种默认的访问权限.
五 复用具体实现
1 一旦类被创建并被测试完,那么就应该代表一个有用的代码单元.可以用于复用.代码复用是面向对象程序设计语言所提供的最了不起的有点之一.