对象导论
对于大多数人来说主要有两种学习习惯:
1)许多人在没有了解面向对象程序设计的全貌之前,感觉无法轻松自在的从事此类编程。
2)还有许多人可能在看到具体的结构之前,无法了解面向对象的全貌,这些人如果没有代码在手,就会陷于困境最终迷失方向。
2)还有许多人可能在看到具体的结构之前,无法了解面向对象的全貌,这些人如果没有代码在手,就会陷于困境最终迷失方向。
而我毫无疑问属于第一种,最什么事之前喜欢先想办法看清楚事情的全貌,在有针对的去学习。
1、抽象过程
程序可以通过添加新类型的对象使自身适用于某个特定问题。、
OOP允许很具问题来描述问题,而不是根据运行解决方案的计算机来描述问题。
2、每个对象都有一个接口
接口确定了对某一特定对象发出的请求。
这些代码与隐藏的数据结构一起构成了实现。
3、每个对象都提供服务
当在试图开发或理解一个程序设计时,最好的方法之一就是将对象想象为“服务提供者”。将对象看作是服务提供者还有一个好处:它有助于提高对象的内聚性。高内聚性是软件设计的基本要求之一:这意味着一个软件构件(例如一个对象,当然它也有可能是指一个方法或一个对象库)的各个方面“组合”的很好。
4、被隐藏的具体实现
程序开发人员:a)类创建者(那些创建新数据类型的程序员)
b)客户端程序员(那些在其应用中使用数据类型的类消费者)
在任何关系中,具有关系所涉及的各方都遵守的边界是十分重要的事情。
访问控制的第一个原因:让客户端程序员无法触及它们不应该触及的部分——这些部分对数据类型的内部操作来说是必须的,但并不是用户解决特定问题所需的接口的一部分。
访问控制的第二个原因:允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。(如果接口和实现可以清晰地分离并得以保护,那么你就可以轻而易举地完成这项工作)
Java用三个关键字在类的内部设定边界:public、private、protected
public:表示紧随其后的元素对任何人都是可用的。
private:类内部可以访问。
protect:触类内部之外继承的也可以访问。
默认访问权限(包访问权限):类可以访问同一个包(库构建)中的其他类成员。
5、复用具体实现
一旦类被创建测试完,那么它就应该(在理想情况下)代表一个用用的代码单元。
代码复用是程序设计语言所提供的最了不起的优点之一。
6、继承
有两种方法可以使基类与导出类产生差异:1)直接在导出类中添加方法
2)覆盖(overriding)
7、半岁多态的可交互对象
也是面向对象程序设计的最重要的妙诀:编译器不可能产生传统意义上的函数调用。
一个非面向对象编程的编译器产生的函数调用会引起所谓的前期绑定,这么做意味着编译器将产生一个具体函数名字的调用,而运行时将这个调用解析道将要被执行的代码的绝对地址。
面向对象程序设计语言使用了后期绑定的概念:当想对象发送消息时,被调用的代码直到运行时才能确定。编译器确保被调用的方法的存在,并对调用参数和返回值执行类型检查(无法提供此类保证语言被称为弱类型语言),但是并不知道竟被执行的确切代码。
为了执行后期绑定,Java使用一小段特殊的代码来替代绝对地址调用。这段代码使用在对象中存储的信息来计算方法体的地址。这样,根据这一小段代码的内容,每一个对象都可以具有不同的行为表现。当向一个对象发送消息时,该对象就能够知道对这条消息应该做些什么。
把导出类看做是它的基类的过程成为向上转型。
如果编写那种检查Shape所有实际可能类型的代码,那么这段代码肯定是杂乱不堪的,而且在每次添加了Shape的新类型之后都要去修改这段代码。
多态:不知何故,它总是做了该做的。 正是因为多态才是得事情总是能够被正确处理。
9、容器
创建另一种对象类型。这种新的对象类型持有对其他对象类型的引用。这个被称为容器的新对象,在任何需要时都可以扩充自己以容纳你至于其中的东西。因此不需要知道将来会把多少个对象置于容器中,只需要创建一个容器对象,然后让它处理所有细节。
需要对容器有所选择的与原因如下:1)不同容器提供了不同类型的接口和外部行为。
2)不同容器对于某些操作具有不同的效率。
参数化类型机制:参数化类型就是一个编译器可以自动定制作用于特定类型上的类,在java中它成为范性。一对尖括号,中间包含类型信息,通过这些特征就可以识别对范性的使用。
10、对象的创建和生命期
垃圾回收器“知道”对象何时不再被使用,并自动释放对象占用的内存。
原因:1)所有对象都继承自单根基类Object
2)只能以一种方式创建对象(在堆上创建)
11、异常处理:处理错误
异常是一种对象,它从出错地点被“抛出”,并被专门设计用来处理特定类型错误的相应的异常处理器“捕获”。
14、总结
过程型语言:数据定义和函数调用,这些程序总是容易把人搞糊涂,因为他们使用的表示术语更加面向计算机而不是你要解决的问题。
面向对象语言:1)用来表示问题空间概念的对象(而不是有关计算机表示方式的相关内容)。
2)发送给这些对象的用来表示在此空间内的行为的消息。