1.1 抽象过程
1>万物皆对象
在这个世界上可知的事物可以用语言 来描述它 ,编程也是一样我们可以用编程语言描述一切事物(外观 行为 特征),只要你想得到。
2>程序是对象的集合,它们通过发送消息来告知彼此所要做的 (方法调用)
3>每个对象都有自己的由其他对象所构成的存储(对象可以由其他对象组成)
4>每个对象都拥有类型(每个对象都有其独特性 根据功能可以发送什么样的消息给它)
5>某一特定类型的所有对象都可以接收同样的消息
1.2 每个对象都有一个接口
接口确定了对某一特定对象所能发起的请求 ,向某个实现特定接口的对象发送消息,这个对象便知道此消息的目的,然后执行对应的程序代码
1.3 每个对象都提供服务
开发理解程序时,将对象理解为“服务提供者”,它(程序)通过调用一系列对象提供的服务解决问题,我们做的就是去创建或是去寻找能够提供理想服务解决问题的一系列对象集合,在这个过程中每个对象提供特定服务(而不是把多个功能让一个对象实现)
1.4 被隐藏的具体实现
访问控制:
1>让客户端程序员无法触及不应该触及的部分
2>允许库设计者可以改变类内部的工作方式不用担心会影响到客户端程序员
private(私有 该类对象访问)
default (包访问权限 同包访问)
protected(保护访问权限 本身及子类访问)
public (all)
1.5 复用的具体实现
通过组合实现复用(使用现有类合成新类)。
建立新类时,首先考虑组合,因为它更简单灵活。
1.6 继承
对象这种概念,将数据和功能封装到一起,用关键字class表示,形成了编程语言中的基本单位,但是这样做有许多麻烦,创建一个类,即使另一个新类与其具有相似的功能,你还得从新建一个类,为了解决这个问题 继承产生了。
继承现有类时创造了新的类型,这个类型包括继承类的所有成员(尽管private成员被隐藏起来不可访问)更重要的是他复制了基类的接口,这时可以对功能方法的覆盖或者添加。
1.7 伴随多态的可互换对象
处理类型的层次结构时,经常想把一个对象不当做他所属的特定类型来对待,而是将其当做基类(Object)来对待。这使得人们编写出不依赖于特定类型的代码。
1.8 单根继承结构
在单根继承结构中的所有对象都具有一个公用接口,所以它们归根结底是相同的基本类型,单根继承结构保证所有对象具备某些功能,比如垃圾回收机制
1.9 容器(这一节把书本内容打了一遍)
在解决某个特定问题时需要多少对象,或者它们存活多久那么就不可能知道如何存储这些对象,如何才知道需要多少空间创建这些对象,答案是你不可能知道,因为这类信息只有运动是才获取。对于面向对象设计中的大多数问题而言,这个问题的解决方案似乎过于轻率,创建另一种对象类型这种新的对象类型持有对其他对象的引用。当然,你可以用在大多数语言中都有的数组功能的数组类型来实现相同的功能,但这个通常被称作为容器(也成为集合,不过Java类库以不同的含义使用集合这个术语,所以本书将使用容器这个词),在任何你需要是都可以容纳你置于容器中的所有的东西。因此不需要将来要把多个对象置于容器中,只需要创建一个容器对象,然后让他处理所有细节。
幸运的是,好的OOP语言都有一组容器,它们作为开发包的一部分。在c++中,容器是标准c++类库的一部分,经常被称为标准模板库,Java在其标准库中也包含大量的容器,在某些类库中一两个通用容器足够满足所有的需求,但是在其他类库中,具有满足需要的各种类型的容器,例如List,Map,Set,以及诸如队列、树、堆栈等更多的构件。
从设计的观点来看,真正需要的只是一个被操作,从而解决问题的序列。如果单一类型的容器可以满足所有需求,那么就没有理由设计不同类型的序列了。然而还是需要对容器有所选择,这有两个原因,第一,不同容器提供了不同接口和外部行为。堆栈相比于队列就有不同的接口和外部行为,也不同于集合和列表的行为,它们中的某种容器提供的解决方案可能比其他容器更灵活。第二,不同容器对于某些操作具有不同的效果,最好的例子就是两种List的比较:ArrayList和LinkedList.它们都是具有相同接口和外部行为的简单徐磊,但是它们对某些操作所花费的代价却有着天壤之别。在ArrayList中随机访问元素是一个花费固定时间的操作;但是对于LinkedList来说随机选取元素需要在列表中移动,这种代价是高昂的,访问表尾的元素,花费的时间越长,而另一方面,如果想在序列中插入一个元素,linkedLIst的开销要比ArrayList小。上述操作以及其他操作效率,序列底层结构的不同而存在巨大差异,我们可以一开始使用LinkList构建程序,而在优化系统性能时改用ArrayList。接口List所带来的抽象,把在容器之间进行转换时对代码产生的影响降到最小限度
1.9.1 参数化类型
Java SE5之前容器中存对象,需要向上转型为Object,当使用时我们需要向下转型 (有两个方面问题)
1>可能在运行时转型错误
2>向下转型和运行时的检查需要额外的运行时时间
为了解决这两个问题 ,更安全更更快捷的Java SE5引入泛型
1.10 对象的创建和生命周期
在使用对象时,最关键的问题
便是他们的生成销毁方式,每个对象为了生存需要资源,尤其是内存,当我们不在需要一个对象时,它必须被清理掉,使其使用的资源得到释放和重用
1.11 异常处理:处理错误
异常处理将错误直接置于编程语言中,异常是一种对象,它从出错点被抛出,并被专门设计用来处理特定类型错误的相应的异常处理器“捕获”。
java一开始内置异常处理,而且你必须强制使用它。
异常处理不是面向对象的特征,尽管在面向对象语言中异常被表示成一个对象。异常处理在面向对象之前就已经存在了。
1.12 并发编程
同一时间处理多个任务。
如果多个任务同时访问同一资源就会出现数据安全问题
1.1.3 Java 与Internet
Java解决了万维网上的程序设计问题
总结 从对象的导论来看 粗略涵盖java大致内容