一、抽象过程
建模基于计算机的结构
- “解空间”的解
- 汇编语言:对底层机器的轻微抽象
- “命令式”语言:汇编语言的抽象
建模基于待“解决问题
- “问题空间”的元素
- 面向对象
二、每个对象都有一个接口
创建抽象数据类型(类)
类:相同特性(数据元素)和行为(功能)的对象
主要任务:问题空间的元素和解空间的对象之间创建一对一的映射
类型决定接口——接口确定可发请求——产生请求——获得对象——方法(代码)调用
三、每个对象都提供服务
将对象想象为服务提供者,提高对象的内聚性。每个对象做好自己的份内事。
四、控制访问
public:任何人可用
private:子类不可用超类
protected:子类可用超类
五、复用
直接使用该类的一个对象
将那个类的一个对象置于某个新的类中(创建一个成员对象)
组合:使用现有的类合成新的类 has-a 拥有关系
聚合:动态组合
组合带来灵活性,新类成员通常被声明为private。
不要第一反应就是继承,可以尝试组合。
六、继承
对象这种工具使得程序员可以用概念(类class)将数据和功能封装到一起。
基类——导出类
导出类继承了基类的特点,
基类和导出类具有相同的基础接口,形成两者差异的做法:
1、在导出类中添加新方法
is-like-a:在导出类型中添加新的接口元素,扩展了接口。
2、覆盖(在导出类用创建方法的新定义,覆盖基类中的方法定义)
is-a:纯粹替代,只覆盖。
七、伴随多态的可互换对象
基类中,方法操作时泛化的
非OOP的编译器采用前期绑定,对一个具体函数名字调用,解析到将要执行代码的绝对地址。
而OOP的编译器采用了后期绑定,当向对象发送消息时,代码直到程序运行时才能确定。编译器确保调动方法的存在,并对调用变元和返回值执行类型检查。
转型
向上转型:将导出类看做它的基类
八、单根继承结构
所有东西都是Object类型
九、容器
不知道解决问题时需要多少对象、多少空间怎么办?
容器,创建一种对象类型,持有对其他对象的引用,在任何需要时都可扩充自己以容纳置于其中的所有东西。
List:用于储存序列
Map:也称关联数组,用来建立对象之间的关联
Set:每种对象类型只持有一个
Queue、Tree、Stack……
不同容器
1、提供了不同类型的接口和外部行为
2、对于某些操作具有不同的效率
参数化类型
储存Object的容器可以储存任何东西。当将对象引用置入容器时,被向上转型为Object,会丢失其身份;取回时,就获取了一个对Object对象的引用。若要变回原先接口,需向下转型,但向下转型不安全。一种采用向下转型的做法是异常处理。
更好的做法是参数化类型机制。参数化类型机制是一个类,编译器可以通过自动定制,从而作用于特定类型上。
十、对象的创建和生命期
使用关键问题之一:对象生成和销毁方式
1、编写程序时设定:将对象置于堆栈(有时被称为自动变量或限域变量)或静态存储区域内来实现。牺牲了灵活性。
2、在堆(heap)的内存池中动态地创建对象。创建堆存储空间的事件依赖于存储机制的设计。
动态方式一般性逻辑假设:对象趋于变得复杂,所以查找和释放存储空间的开销不会对对象的创建造成重大冲击。动态方式带来更大的灵活性。
Java完全采用了动态内存分配方式。每当想要创建新对象时,就要使用new关键字来构建此对象的动态实例。
Java生命期:垃圾回收器
十一、异常处理:处理错误
十二、并发编程
线程:独立运行的部分(任务)
并发:把问题切分成多个线程,从而提高程序的响应能力
多线程优点:不必操心机器上是有多个处理器还是只有一个处理器
隐患:共享资源。解决方法:共享资源在使用期间被锁定。
十三、Java与Internet
1.Web
1)客户/服务器计算技术
系统具有一个中央信息存储池,可根据需要将它分发给某些人员或机器集群,其位置集中于中央,使得它可被修改,并且这些修改将被传播给信息消费者。
服务器:信息存储池、用于分发信息的软件、信息与软件所驻留的机器或机群
单一的服务器同时为多个客户服务
2)Web就是一台巨型服务器
关心:怎样连接到一台服务器上,并与之进行交互。
2、客户端编程
1)插件
2)脚本语言
3)Java
4)备选方案
Java applet
Flex
5).NET和C#
6)Internet和Intranet