抽象的过程
l OOP:Object-Oriented Programming 面象对象编程
l 机器模型:解决空间,对问题建模的地方,比如计算机(solution space)
问题模型:问题空间,有问题要解决的地方(problem space)
面向对象的方法为程序员提供了能在问题空间表述各种元素的工具
将问题空间的元素同它在解决空间的表述称为“对象”
l 五项基本特征:
万物皆对象
程序就是一组相互之间传递消息,告诉对方该干些什么的对象
每个对象都利用别的对象来组建它自己的记忆
对象都有类型(任何对象都是某个类的实例instance of a class)
所有属于同一类型的对象能接受相同的消息(互换性substitutability)
l 对象有状态,行为和标识(特性和行为)
l 对象有内部数据(这给了它状态),有方法(产生了行为),以及每个对象都能同其他对象区分开来—具体而言,每个对象在内存里都有唯一的地址
对象有接口
l 那些除了程序执行时状态会有所不同,其他都完全相同的对象,会被集中起来,统称为“对象的类(classes of objects)”
l 可以创建这个类型的变量(OOP中称为对象object或实例instance),然后操纵这些变量(称为送消息sending message或请求request,传给对象一个消息,由它来决定该作什么),每个类的每个成员(元素element)都有某些共性
l 由于类描述的是一组具有相同特征(数据元素)和行为(功能)的对象,所以类实际上是一种数据类型,两者的区别在于,类是程序员为解决特定问题而定做的,而数据类型是为了表示机器的存储单元而设计的,是现成的,程序员无可奈何时的选择
l 面向对象的编程的挑战之一就是如何在问题空间的元素与解决空间的对象之间建立一种一对一的映射
l 你能向对象发送的请求是由其接口(interface)所定义的,而决定接口的则是对象的类型
l 接口只管能向这个对象发什么请求,还需要有满足这一要求的代码,而这些代码,以及隐藏着的数据,组成了实现(implementation)
被隐藏的事例细节
l java使用三个关键字来设定class的存取权限:public、private、protected
public 任何程序都可以使用
private 只有自己所属类(class)的成员函数可以调用
protected自己所属类的继承类可以使用
如果不加任何关键字,默认是friendly存取权限,同一个package的classes可使用,对于别的package相当于private member
代码复用(Reusing the implementation)
l 既有的classes合成新的class,称为复合(composition)或聚合(aggregation)
l 在建立新的class,最好先考虑复合,因它更简单更具弹性,必要时使用继承
继承:接口复用(Inheritance – Reusing the interface)
l 如果原来的class(也称为base class、super class、parent class)发生改变时,修改过的“复制品”(称为derived class、inherited class、sub class、child class)也同时会别改变
l 垃圾回收机制(trash-recycling machine)
l 垃圾回收器(garbage collectioncollertor)
l 类别阶层体系(type hierarchy)
l 两种方式使base class和derived class的不同:
A. derived在base的基础上直接自己加内部函数,以extends关键字表示
B. 覆写(Overriding)改变已有的base class的函数行为
Abstract基类和interface
l 如果class加上了abstract,那么不允许创建此类的对象
l abstract也可以表示这个方法还没有实现,实现在后面的derived class里
l interface可以彻底地把接口和实现分离出来
容器(Collection)和迭代器(iterator)
l 容器代替array的作用,并且可以自行处理大小
l vector,向量,java称为ArrayList,为所有元素提供一致性的存取方式
l linked list,串列,提供任何位置上的元素安插动作
l 所有容器都以相同的方式处理元素的置入和取出
l 作为一个物件,迭代器的作用就是用来选择容器中的元素,并且将这些元素呈现给迭代器使用者
单根继承体系
l java所有的classes最终都是继承自单一的base classes,名为Object
异常处理:面对错误的发生(Exception handling:dealing with errors)
l 异常(Exception)是一种物体,可以在错误发生点被抛出(throw),并在适当的处理程序中被捕捉(Catch),借以处理特定类型的错误
多线程(Multithreading)
l 在java中,线程功能是在物体层次上提供的,因此一个线程用一个物体来表示
l java提供有限的资源锁定功能,可以锁定任何物体使用的内存,用synchronized关键字,所有线程在存取这份资源前都要检验是否加锁
物件(Object)设计的五阶段
l 物体的发掘
l 物件的组合
l 系统的构建
l 系统的扩展
l 物体的重复运用
l 发展需要的classes和其接口是系统设计最主要的工作