OOP-面向对象程序设计

1.1 抽象过程

(1)所有的编程语言都提供抽象机制。(2)汇编语言是对底层机器的轻微抽象。(3)“命令式”语言:FORTRAN、BASIC、C等都是对汇编语言的抽象。(4)Smalltalk语言五个特性:1、万物皆为对象。2、程序是对象的集合,它们通过发送消息来告知彼此所要做的。3、每个对象都有自己的有其他对象所构成的存储。4、每个对象都拥有其类型。5、某一特定类型的所有对象都可以接收同样的消息。(5)每一个对象都可以拥有内部数据(状态)和方法(行为),每个对象在内存中有一个唯一的地址。

1.2 每个对象都有一个接口

(1)接口确定了某一特定对象所能发出的请求。

1.3 每个对象都提供服务

(1)将对象看作是服务提供者好处:有助于提高对象内聚性。(2)“高内聚”是软件设计的基本质量要求之一。

1.4 被隐藏的具体实现

(1)将实现隐藏可以减少Bug。(2)在内的内部设定边界-三个关键字:public、private、protected。

1.5 复用具体实现

(1)组合:使用现有的类合成新的类。视为has-a(拥有)关系。可以带来极大的灵活性。(2)聚合:组合是动态发生的。

1.6 继承

(1)父类-超类-基类。子类-继承类-导出类。

1.7 伴随多态的可互换对象

(1)通过导出新的子类而轻松拓展设计能力是对改动进行封装的基本方式之一。这种能力可以极大的改善我们的设计,同事降低软件维护代价。(2)前期绑定:编译器将产生对一个具体函数名的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址,然而在OPP中,程序直到运行时才能确定代码地址。(3)后期绑定:当向对象发送消息时,被调用的代码直到运行时才能确定。编译器确保被调用的方法存在,并对调用参数和返回值执行类型检查,但是并不知道将被执行的确切代码。(4)执行后期绑定:Java使用一小段特殊的代码来替代绝对地址的调用,这段代码使用在对象中存储的信息类计算方法体的地址。(5)在Java中,动态绑定是默认行为,不需要添加额外的关键字来实现多态 。(6)向上转型:将子类看作是它的父类的过程。

1.8 单根继承结构

(1)在Java中所有的类都继承自单一的父类-Object.(2)单根继承结构好处:1、所有对象都有一个公用接口。2、保证所有对象都具有某些功能,所有对象可以很容易的在堆上创建,参数传递得到极大地简化。3、试垃圾回收器的实现更容易。4、不会因无法确定对象的类型而陷入间距,对系统级操作(如异常处理)很重要。5、给编程带来更大灵活性。

1.9 容器-集合

(1)Java中,List(用于存储序列),Map(关联数组,用来建立对象间的关联),Set(每种对象类型只持有一个),以及队列、树、堆栈等更多构件。(2)选择容器(集合)的原因:1、不同容器提供了不同类型的接口和外部行为。2、不同容器对于某些操作具有不同的效率。例如两种List的比较:ArrayList和LinkedList。(3)ArrayList:随机访问元素是花费固定时间的操作。(4)LinkedList:随机选取元素需要在列表中移动,代价高昂,访问越靠近表尾的元素,花费时间越长。(5)如果在序列中间插入一个元素,LinkedList开销比ArrayList小。1.9.1 参数化类型(1)向上转型是安全的。(2)向下转型:更泛化的类型转型为更具体的类型。除非知道所要处理的对象类型,否则向下转型几乎不安全。(3)参数化类型-泛型:<数据类型>

1.10 对象的创建和生命期

(1)如何控制生命周期:1、为了追求最大的执行速度,对象的存储和生命周期可以在编写程序时确定,这可以通过将对象置于堆栈(有时被称为自动变量或限域变量)或静态存储区域来实现。牺牲了灵活性。2、在堆的内存池中动态创建对象,,直到运行时才能知道需要多少对象,晟敏周期如何,以及具体类型。时间远远大于在堆栈中创建存储空间的时间。(2)Java完全采用了动态内存分配方式。每当想要创建新对象时,就要使用new关键字构造对象的动态实例。(3)生命周期:对于允许在堆栈上创建对象的语言,编译器可以确定对象存活时间,并自动销毁它。在堆上创建对象编译器会对它的生命周期一无所知。(4)Java提供了垃圾回收机制,自动发现对象何时不再使用,然后销毁它。(5)垃圾回收器机制作用:1、减少了所必须考虑的议题和必须编写的代码。2、提供了更高层的保障,可以避免内存泄漏问题。

1.11 异常处理:处理错误

(1)异常处理与程序正常执行路径并行,在错误发生时执行另一条路径,所以不会干扰正常的执行代码,是代码编写变得简单。(2)异常不能被忽略,所以它保证一定会在某处得到处理。(3)异常提供了一种从错误状况进行可靠恢复的途径,可以进行校正,恢复程序执行,提高程序健壮性。(4)Java内置了异常处理,而且强制使用它,它是唯一可接受错误报告方式。1.12 并发编程(1)并发:把问题切分成多个可独立运行的部分(任务),从而提高程序响应能力。(2)线程只是一种为单一处理器分配执行时间的手段。(3)并发的隐患:共享资源,多个并行任务访问同一资源,会出现问题。

1.13.1 Web

(1)客户/服务器系统核心思想:系统中有一个中央信息存储池,用来存储某种数据,通常存在于数据库中,可以根据需要发送给人员或者机器集群。(2)服务器:信息存储池、用于分发信息的软件以及信息与软件所驻留的机器或机群的统称。(3)中间件降幅在分散给在服务器端的其他机器,将延迟最小化。提高可维护性。(4)Web就是一台巨型服务器。(5)客户端编程:引入在客户端浏览器中运行程序的能力。