CH1 对象导论——Thinking in Java 读书笔记

将对象看作服务提供者,可以简化设计。

代码复用是面向对象程序设计语言最了不起的优点之一。
#复用的方式
1、直接使用该类的一个对象
2、将该类的一个对象置于某个新的类中(组合 has-a)

3、继承该类(is-a)

//在建立新类时,应该首先考虑组合,因为更加简单灵活,可以在运行时修改成员对象,以实现动态修改程序的行为


对象的优点:
可以通过概念将数据和功能封装到一起,因此可以对问题空间的观念给出恰当的表示,而不用受制于必须使用底层机器语言。

继承
当继承现有类型时,也就创造了新的类型。这个新的类型不仅包括现有类型的所有成员(尽管private成员被隐藏了起来,不能访问),而且更重要的是它复制了基类的接口。也就是说,所有可以发送给基类对象的消息同时也可以发送给导出类对象。

扩展基类的方法:
1、添加新方法
2、改编现有基类的方法和行为,这叫做覆盖(overriding)

//继承有两种方式,以extends为关键字,以implements为关键字

泛型
如何确定发送消息给哪个子类型?
在OOP中,程序到运行时才能确定代码的地址,当消息发送到一个泛化对象时,需采用后期绑定的机制。为了执行后期绑定,java使用一小段特殊的代码来替代绝对地址调用。这段代码使用在对象中存储的信息来计算方法体的地址。这样,根据这一小段代码的内容,诶一个对象都可以有不同的行为表现。当向一个对象发送消息时,该对象就能够知道对这条消息应该做什么。

单根继承结构


所有类都继承自Object类。好处:
1、保证所有对象都具备某些功能。所有对象都可以很容易在堆上创建,而参数传递也得到极大的简化。
2、使垃圾回收器的实现变得容易得多。由于所有对象都保证具有基类型信息,因此不会因无法确定对象的类型而陷入僵局。

容器
你不需要知道将来会把多少个对象置于容器中,只需要创建一个容器对象,让它处理所有细节。

java在其标准类库中包含大量的容器,具有不同需要的各种类型的容器,例如List(用于存储序列),Map(也称关联数组,用来建立对象之间的关联),Set(每种对象类型只持有一个),以及诸如队列、树、堆栈等更多的构件。

选用不同容器的原因:
1、不同的容器提供了不同类型的接口和外部行为。他们之中的某种容器提供的解决方案可能比其他容器要灵活得多。
2、不同的容器对于某些操作具有不同的效率。最好的例子就是两种List的比较:ArrayList和LinkedList。它们都是具有相同接口(即方法)和外部行为的简单的序列,但是它们对某些操作所花费的代价却又天壤之别。


参数化类型


创建一个容器,如果让它知道自己所保存的对象的类型,从而不需要向下转型以及消除犯错误的可能,这就需要用到参数化类型机制(java中被称为泛型)。参数化类型是一个编译器可以自动定制作用于特定类型上的类。

对象的创建和生命期


对于允许在堆栈上创建对象的语言,编译器可以确定对象存活的时间,并可以自动销毁它。然而,如果是在堆上创建对象,编译器就会对它的生命周期一无所知。

Java的垃圾回收期被设计用来处理内存释放问题。垃圾回收期知道对象何时不再被使用,并自动释放对象占用的内存。这一点同所有对象都是继承自单根基类Object以及只能以一种方式创建对象(在堆上创建)这两个特性结合起来,使得用Java变成的过程较之于用C++编程要简单得多。

异常处理


*程序语言的设计  与  程序库的设计

异常处理将错误处理直接置于编程语言中,有时甚至置于操作系统中。异常是一种对象,它从出错地点被抛出,并被专门设计用来处理特定类型错误的响应的异常处理器捕获。

并发编程


在程序中,彼此独立运行的部分称之为线程。并发最常见的例子就是用户界面。

通常,线程只是一种为单一处理器分配执行时间的手段。在语言级别上,多线程所带来的便利之一便是程序员不再操心机器上是有多个处理器还是只有一个处理器。由于程序在逻辑上被分为线程,所有如果机器拥有多个处理器,那么程序不需要特殊调整也能执行得更快。

Java的并发是内置于语言中的,Java SE5已经增添了大量额外的库支持。


你可能感兴趣的:(CH1 对象导论——Thinking in Java 读书笔记)