1、 抽象过程
1)、OOP根据问题来描述问题。
2)、samlltalk:万物皆为对象;程序是对象的集合,通过发送消息告知彼此要做的;每个对象都有自己的由其他对象构成的存储;每个对象都有其类型;每一特定类型的所有对象都可以接受同样的消息。
3)、对象具有状态、行为和标识。
2、每个对象都有一个接口
1)、类描述了具有相同特性和行为的对象集合,一个类实际上是一个数据类型。
2)、面向对象程序设计的挑之一:在问题空间的元素和解空间的对象之间创建一对一的映射。
3)、接口确定了某一特定对象所能发出的请求。
3、每个对象都提供服务
1)、对象作为服务提供者,程序本身向用户提供服务,它通过调用其他对象提供的服务实现这一目的。
2)、将对象看做服务提供者可以提高对象的内聚性。
4、被隐藏的具体实现
1)、类创建者只向客户端程序员暴漏必须的部分,隐藏其他部分。
2)、被隐藏的部分通常代表对象内部脆弱的部分。
3)、访问控制可以使客户端程序员无法触及他们不应该触及的部分,同时允许设计者改变类内部的工作方式而不致影响客户端程序员。
4)、三个关键字在类的内部设定边界:public、private、protected。
5)、默认的访问权限:包访问权限——可以访问同一个包中的其他类成员,但是包之外不行。
5、复用具体实现
1)、代码复用是OOP的优点之一。
2)、用现有类合成新的类:组合——has a
3)、并非处处要使用继承,首先要考虑组合,因为它更加简单灵活。
6、继承
1)、继承现有类创建新类时,新类包括现有类的所有成员,且复制了基类的接口。导出类与基类有相同的类型。
2)、导出类与基类产生差异:要么添加新的方法;改变现有基类某些方法的行为,即覆盖。
3)、判断是否继承,可以用is-a关系
4)、导出类钟如果有新的方法,那么导出类和基类描述为is-like-a的关系
7、伴随多态的可互换对象
1)、在处理类型的层次结构时,经常把对象不当做所属的特定类型,而当做是基类的对象来对待。这样可以编写出不依赖于特定类型的代码,不受添加新类的影响。
2)、编译器不可能产生传统意义上的函数调用,非面向对象编程的编译器产生的函数调用会引起前期绑定,编译器将产生对一个具体的函数名字的调用,而运行时将这个调用解析到要执行的代码的绝对地址。然而在OOP中,程序直到运行时才确定代码的地址,所以消息发送到一个泛化对象时,必须采用其他机制。面向对象编程采用的是后期绑定,当向对象发送消息时,被调用的代码直到运行时才能确定。编译器确保被调用方法的存在,以及对调用参数和返回值执行类型检查,但是并不知道将执行的确切代码。
3)、为执行后期绑定,java使用了一小段特殊的代码替代绝对地址调用,这段代码使用在对象中存储的信息计算方法体的地址。
4)、有些语言中后期绑定的灵活性要通过明确地申明来获得,但是java中动态绑定是默认行为。
5)、多态使得事情总是能得到正确的处理,而避免了繁杂的代码。
8、单根继承结构
1)、在java中,所有的类最终都继承自单一的基类——Object。除C++以外所有的OOP都是如此。
2)、单根继承结构中,所有的对象都具有一个共用的接口,归根到底都是相同的基本类型。
3)、C++无法确保所有对象都是同一个基本类型。
4)、单根继承结构使垃圾回收器的实现变得容易多了,垃圾回收期是JAVA对C++的重要改进之一。
9、容器
1)、java中,具有满足不同需要的各种类型的容器,List、Map、Set、以及队列、树、堆栈等更多的构件。
2)、真正需要的是一个可以被操作从而是问题被解决的序列。
3)、参数化容器:编译器可以自动定制作用于特定类型上的类。
4)、向上转型是安全的,向下转型几乎是不安全的。
10、对象的创建和生命周期
1)、为了追求最大的执行速度,对象的存储空间和生命周期可以在编写程序的时候确定,这可以通过将对象置于堆栈或者静态存储区来实现,但是牺牲了灵活性。
2)、在被称为堆的内存池中创建对象:程序运行时相关代码被执行到的一刻才能确定,存储空间在运行时动态管理。
3)、Java完全采用了动态内存分配方式。
4)、对于允许在堆栈上创建对象的语言,编译器可以确定对象的存活时间,可以自动销毁。但如果是在堆上创建对象,编译器便对生命周期一无所知。Java提供了垃圾回收器,自动发现对象何时不再使用继而销毁。
5)、Java的垃圾回收器被用来处理内存释放问题。
11、异常处理
1)、异常处理将错误处理直接置于编程语言中中,异常处理是在错误发生时执行的另外一条路径,不会干扰正常的执行代码,异常不能被忽略,异常提供了一种从错误状态进行可靠恢复的途径。
2)、异常不是面向对象的特性。
12、并发编程
1)、通常线程是一种为单一处理器分配执行时间的手段。
2)、多线程的便利之一是程序员不用操心机器上是有多个处理器还是一个处理器。
3)、并发的隐患:共享资源。Java的并发是内置于语言中的。
13、Java与Internet
1)、Java解决了万维网上的程序设计问题。
2)、Java使用applet以及Java Web Start进行客户端编程。
3)、用Java编写servlet实现服务器端编程。
14、总结
1)、过程型语言
2)、OOP和Java
3)、其他的选择:python