前言:
程序设计其实是对复杂性的管理: 待解决问题的复杂性, 以及用来解决该问题的工具的复杂性.
减少开发健壮代码所需的时间以及困难.
抽象过程
程序可以通过添加新类型的对象,使其适用于某个特定问题.
- 万物皆对象.
- 程序时对象的结合.
- 每个对象都有自己的由其他对象所构成的存储.
- 每个对象都拥有其类型.
- 某一特定类型的所有对象都可以接口收同样的消息.
对象具有状态 . 行为 和 标识.
每一个对象都可有拥有内部数据(他们给出了该对象的状态) 和方法(他们产生的行为),并且每一个对象都可以唯一地与其他对象区分开来.具体来说, 每一个对象在内存中都有一个唯一的地址.
每个对象都有一个接口.
每一个对象都属于定义了特性和行为的某个特定的类.
类:描述了具有相同特性(数据元素)和行为(功能)的对象集合.
每个对象都提供服务
程序本身向用户提供服务,通过调用其他对象提供的服务来实现这一目的. ( 服务提供者=工具 )
每一个对象都可以很好的完成一项任务, 但是不要试图做更多的事情.
被隐藏的具体实现
原因:
- 客户端程序 无法触及他们不该触及的部分.
- 改变类内部的工作方式,而不影响到客户端程序.
- 设定边界: public / private / protected.
public : 任何人都可以访问
private: 自己访问
protected: 子类可以访问
复用具体实现
- 直接使用类的对象
组合: 使用现有的类合成新的类.
聚合:组合是动态发生的,称为聚合.
继承
编译器必须对通过继承而创建的类施加编译时的限制.
对象 class : 通过概念将数据和功能封装到一起,因此可以对问题空间的观念给出恰当的表示.而不用受制于必须使用地城机器语言.
基类型 : 所有导出类型所共享的特性和行为. 表示对象核心概念.
从基类型导出的其他类型,表示此核心可以被实现的不同方式.
所有可以发送给基类对象的消息同时也可以发送给导出类的对象.
基类和导出类具有相同的基础接口.
基类和导出类产生差异:
- 在导出类添加新的方法.
- 改变现有基类方法的行为. === 覆盖
伴随多态的可互换对象
向上转型
向下转型
单根继承结构
所有的类最终都继承自单一的基类.
所有的对象都具有一个公共的接口. 对象都是相同的基本类型.
单根继承结构保证所有的对象都具备某些功能(基本操作).
单根继承结构使垃圾收集器的实现变得容易得多. 所有的对象都保证具有其类型的信息,不会因为无法确定对象先入僵局.
容器
- 不同容器提供不同类型的接口和外部行为
- 不同容器对某些操作具有不同的效率.
随机访问性能对比 : LinkedList 和 ArrayList
接口 List 所带来的抽象, 把在容器之间进行转换时对代码的影响降到了最小限度.
参数化类型
容器存储的对象都具有通用类型 Object .
单继承结构意味着所有的东西都是 Object 类型. 所以 Object 类型可以存储任何东西. 易复用.
参数化类型机制: list <String>
对象的创建和生命周期
对象数据存放:
- 编写程序时确定.
- 堆内存池中动态创建 java
动态逻辑假设: 对象趋向于变得复杂,所以查找和释放存储空间的开销不会对对象的创建造成重大冲击.
异常处理: 处理错误
异常是一种现象,从出错地点被"抛出",并被专门设计用来处理特定类型错误的响应的异常处理器"捕获"
不干扰正常的执行代码
并发编程
同一时刻处理多任务
在程序中, 彼此独立运行的部分称之为 线程.
隐患: 共享资源
某个任务锁定某项资源,完成其任务,然后释放资源锁,使其他任务可以使用这项资源.
Java 与 Internet
客户/服务计算技术
系统具有一个中央信息存储池,用来存储某种数据,它通常存在于数据库中,你可以根据需要将它分发给某些人员或机器集群.
服务器: 信息存储/用于分发信息的软件以及信息与软件所驻留的机器或集群被总称为服务器
WEB 一台句型服务器
所有的服务器和客户机都同时存在于同一个网络中.
关心: 某一时刻,怎样连接到一台服务器上,并与之进行交互.
Web 浏览器: 一段信息不经修改就可以在任意型号的计算机上显示.
客户端编程
- 插件
- 脚本语言: 解决特定类型的问题, 主要 创建更丰富/更具有交互性的用户界面. 解决 80%问题
- Java : applet 过时了吧
- 备选方案: flash ?
- .NET和 c#
- Internet 和 Intranet(企业内部网)
服务端编程
尚未完成, 待续............