Thinking in Java 学习手记 第一章 对象导论
“我们之所以将自然界分解,组成各种组织概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来……除非赞成这个协定中规定的有关语言信息的组织和分类,否则我们根本无法交谈。”——Benjamin Lee Whorf(1897 - 1941)
1、抽象过程
所有的编程语言都提供抽象机制。
人们所能够解决的问题的复杂性直接取决于抽象的类型和质量。
面向对象的程序设计方式:
1)万物皆为对象。
2)程序是对象的集合,它们通过发送消息来告知彼此所要做的。
3)每个对象都有自己的由其他对象所构成的存储。
4)每个对象都有其类型。
5)某一特定类型的所有对象都可以接受同样的消息。
对象具有状态、行为和标志。
2、每个对象都有一个接口
因为类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以一个类实际上就是一个数据类型。
面向对象技术的应用可以将大量的问题很容易地降解为一个简单的解决方案。
接口确定了对某一特定对象所能发出的请求。
向某个对象“发送消息”(产生请求),这个对象便知道此消息的目的,然后执行对相应的程序代码。
3、每个对象都能提供服务
程序本身将向用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。你的目标就是去创建(或者最好是在现有的代码库中寻找)能够提供理想的服务来解决问题的一系列对象。
问自己如下的问题:
如果我可以把问题从表象中抽取出来,那么什么样的对象可以马上解决我的问题呢?
如果不存在这样的对象,那么不断的问自己如下的问题:
它们看起来像什么样子?
它们能够提供哪些服务?
它们需要哪些对象才能履行它们的义务。
最终你会说:“我肯定那个对象已经存在了”
这是将问题分解为对象集合的一种合理方式。
这样也有助于提高对象的内聚性(软件构件的各个方面都结合的很好)。
4、被隐藏的具体实现(封装)
类创建者的目标是构建类,并且只向类使用者暴露必要的部分而隐藏其他部分。这样可以使类使用者对类的功能认识的更清晰,便于程序的编写和维护。
5、复用具体实现
最简单的复用是用类创建对象(实例化),也可以将一个类的对象置于一个新类中。
6、继承
当继承现有类型时,也就创造了新的类型。这新类型不仅包括现有类型的所有成员,而且复制了它的所有接口。
Is-a:仅仅改写接口继承
Is-like-a:拓展了接口的继承
7、伴随多态的可互换对象
当向对象发送消息时,被调用的代码直到运行时才能确定。
8、单根继承结构
Java中,所有的类最终都继承自单一的基类:Object
9、容器
容器,在任何时候都可以扩充自己以容纳你添加进去的所有东西。
Java中,具有满足不同需要的各种容器。
不同的容器提供了不同类型的接口和外部行为。
不同的容器对于某些操作具有不同的效率。
10、对象的创建和生命期
Java完全采用动态的内存分配。每当想要创建新对象时,就要用new关键字来构建此对象的动态实例,并且编译器可以确定对象的存活时间,并可以自行销毁它。
11、异常处理:处理错误
异常处理是将错误作为一种对象,直接置于编程语言中。异常在从出错地点被抛出,并被专门设计用来处理特定类型错误的相应的异常处理器“捕获”。
异常处理就像是与程序正常执行路径并发执行的、在错误发生时被执行的另一条路径。
12、并发编程
线程,是一种为单一处理器分配时间的手段。
某个任务锁定某项资源,完成其任务,然后释放资源锁,使其他任务可以使用这项资源。