抽象过程
所有编程语言都提供抽象机制. 抽象机制的不同引发了编程语言的变更:
汇编语言: 对底层机器的轻微抽象.
FORTRAN,BASIC,C: 对汇编语言的抽象.
以上两类语言必须建立起在机器模型和实际待解决问题的模型之间的关联. 例如不懂UNIX, 就无法进行C语言编程的道理一样.
LISP: 针对待解决问题建模. LISP把所有问题都理解为列表.
C++, Java: 面向对象编程, 根据问题来描述问题.
面向对象语言的五个基本特性(以Java为例)
1. 万物皆为对象(除了基本类型, Java中的对象都用new来创建)
2. 程序是对象的集合, 它们通过发送消息来告知彼此所要做的(get/set函数)
3. 每个对象都有自己的由其他对象所构成的存储(所有的类均继承Object, 而类存在继承, 组合,内部类等操作)
4. 每个对象都拥有其类型(编译器知道对象其类型情况下, 才知道如何分配内存空间进行存储)
5. 某一特定类型的所有对象都可以接收同样的消息(类的继承)
面向对象语言更简洁的描述
对象具有状态,行为和标识. 这意味着每一个对象都可以拥有内部数据(保持状态)和方法(产生行为), 并且每一个对象都可以唯一的与其他对象区分开来, 即每个对象都有唯一的地址(针对Java来说为对象的散列值, 由hashCode方法获取, 默认取对象的内存地址).
对象导论
1. 对象提供接口而隐藏其数据状态, 接口用来发送/接收消息, 并调用具体的方法实现具体的操作.
2. 访问控制的存在有两大原因: 1.保护数据不受污染. 2. 只要提供了标准接口, 类的创建者就可以随意修改其实现方式而不会影响其接口的调用者.
3. 使用组合可方便代码复用.
4. 子类继承于父类, 可通过: 1) 在子类中添加新的方法. 2) 在子类中覆盖父类的方法, 来产生差异性.
5. 使用多态来编写不依赖于特定类型的代码, 使用动态绑定保证多态的正确性.
以下针对Java:
6. Java为单继承结构.
7. Java通过容器(泛型化)来存储对象.
对象的创建和生命周期
C++方式: 对象的存储空间和生命周期可以在编写程序时确定, 这可以通过将对象置于堆栈或静态存储区域内来实现.
Java方式: 在堆的内存池中动态的创建对象. 如果需要一个新的对象, 可以在需要的时刻直接在堆中创建. 而释放直接通过栈顶指针移动即可.