第1章 对象入门
“为什么面向对象的编程会在软件开发领域造成如此震憾的影响?”
管理上: 它实现了更快和更廉价的开发与维护过程
技术上: 建模处理变得更加简单,能生成清晰、易于维护的设计方案
程序员: 对象模型显得如此高雅和浅显
面向对象工具以及库的巨大威力使编程成为一项更使人愉悦的任务。每个人都可从中获益,至少表面如此。
初涉面向对象编程遇到的问题:
A. 需要了解巨大的库的使用方法。
B. 选择一个基本没有库的C++,深入学习语言机制,直到自己能编写对象库。 PS: 现在已经有STL等标准库了。
下面逐步介绍Java的面向对象编程思想。 PS: 本导读会摘取关键语句。
1.1 抽象的进步:
Alan Kay总结了Smalltalk的五大基本特征。这是第一种成功的面向对象程序设计语言,也是Java的基础语言。通过这些特征,我们可理解“纯粹”的面向对象程序设计方法是什么样的:
(1) 所有东西都是对象。
(2) 程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。
(3) 每个对象都有自己的存储空间,可容纳其他对象。或者说,通过封装现有对象,可制作出新型对象。
(4) 每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,“类”(Class)是“类型”(Type)的同义词。一个类最重要的特征就是“能将什么消息发给它?”。
(5) 同一类所有对象都能接收相同的消息。继承出的子类可以处理父类的消息。这一特性称为对象的“可替换性”,是OOP最重要的概念之一。
1.2 对象的接口
一个对象提供自身的接口,来接收外部传入的信息,作出响应并适当返回消息。
“接口”(Interface)是一个Java内部的关键词,是为了进一步抽象出接口层而做的改进。
public(公开,全局访问),private (私有,本身类内函数访问),protected(保护,继承类可访问)以及暗示性的friendly(在包Package内访问)。
1.3 方案的重复使用 略
1.4 继承: 重新使用接口 略
1.5 改善类基础
1.5.1 等价与类似: 继承类扩展了父类,创建新接口和扩展定义,“类似”于父类。
1.6 多形对象的互换使用
对于多个继承于父类的子类,我们可以使用统一的对父类的操作,对不同子类进行。
1.6.1 动态绑定:Virtual 虚拟属性和 多态性(Polymorphism) 关于重载和继承的实现机制。
1.7 对象的创建和存在时间 略
1.7.1 集合与迭代器: 了解迭代器的使用,Iterator. Vector, List, Set 等类型。
1.7.2 单根结构: Java 所有类继承自Object,是单根的,利于配置动态内存等OO特性,而C++为了向上兼容没有使用。
1.7.3 集合库与方便使用集合
1.下溯造型与模板/通用性:Java在面对“下溯造型 (Downcasting)”是显得有些笨拙,由于他是单根的,解决的办法是参数化,Java保留关键词(generic), 而C++内部的template实现了参数化类型。
PS: 最新的JDK貌似已经完成了参数化类型工作。
1.7.4 清除时的困境:由谁负责清除? 略
1.8 违例控制:解决错误 : Exception学习。 另外关于断言的用法。
1.9 多线程: Thread和synchronized
1.10 永久性 Java1.1支持简单的把对象保存到磁盘上,下次取回继续使用。
1.11 Java和英特网 网络大部分略
1.11.3 服务器编程: Servelt
1.11.4 一个独立的领域: 应用程序 略
1.12 分析设计:《Object-Oriented Design with Applications , Version 2》
1.12 不要迷失: 清楚你设计的对象是什么,接口是什么。
1.12.2 阶段 : 拟出计划 –>要构建什么->如何构建->开始构建->校订->计划回报
1.13:Java还是C++?
Java或许在OO阶段相比C++更好编程,但是不代表会替代C++, 更何况Java虚拟机正常速度普遍低于C++。
PS: 目前已经知的提高Java程序效率的方法有很多,如Just In Time JIT, 低级的代码编译运行等。