
面向对象程序设计(Object-oriented Programming)具有以下几个特征:
- 程序由若干对象组成,每个对象是由一些数据以及对这些数据所能实施的操作所构成的封装体;
- 对数据的操作是通过向包含数据的对象发送消息(调用对象对外接口中的操作)来实现的,体现了数据抽象;
- 对象的特征(包含哪些数据与操作)由相应的类来描述;
- 一个类所描述的对象特征可以从其它的类继承(获得)。注意:如果没有“继承”,则称为:基于对象的程序设计(Object-based Programming)在面向 / 基于对象的程序设计中,对象 / 类体现了数据抽象与封装!
面向对象的程序执行过程
对象 构成了面向对象程序的基本计算单位,程序的执行体现为对象间的一系列消息传递:从程序外部向程序中的某个对象发送第一条消息启动计算过程;该对象在处理这条消息的过程中,又向程序中的其它对象发送消息,从而引起进一步的计算;消息处理可分为两种方式:
-
同步消息处理:消息发送者必须等待消息处理完才能继续执行其它操作(顺序执行)。
-
异步消息处理:消息发送者不必等待消息处理完就能继续执行其它操作(并发执行)。本课程只涉及同步消息处理。
C++ 是混合编程范式语言既有子程序(过程式编程),又有对象(面向对象编程)保留了函数 main,第一条消息是从 main 中发出的
面向对象程序设计的基本内容
对象 / 类(Object&Class)
-
对象是由数据以及能对其实施的操作所构成的封装体。
-
类描述了对象的特征(包含什么类型的数据和哪些操作),实现数据抽象。
-
对象属于值的范畴,是程序运行时刻的实体;类则属于类型的范畴,是编译时刻的实体。
继承(Inheritance) -
在定义一个新的类(子类、派生类)时,可以把已有类(父类、基类)的一些特征描述先包含进来,然后再添加新的特征描述。
-
可分为:
- 单继承
- 多继承
消息的多态与动态绑定
多态(Polymorphism):某一论域中的一个元素存在多种形式和解释。在程序中,多态通常体现为:
-
一名多用:
- 函数名重载
- 操作符重载(语言预定义和用户自定义)
-
类属:
- 类属函数:一个函数能对多种类型的数据进行相同的操作(如 void 型函数)。
- 类属类型:一个类型可以描述多种类型的数据。(联合类型)
-
面向对象程序特有的多态(继承机制带来的):
- 对象类型 的多态:子类对象既属于子类,也属于父类。
- 对象标识 的多态:父类的引用或指针可以引用或指向父类对象,也可以引用或指向子类对象。
- 消息 的多态:发给父类对象的消息也可以发给子类对象,父类与子类可以给出不同的解释(处理)。
绑定(Binding):确定对多态元素的某个使用是多态元素的哪一种形式。可分为静态绑定和动态绑定:
-
静态绑定(Static Binding):在编译时刻确定。
- 大多数形式的多态可采用静态绑定。如函数名重载
-
动态绑定(Dynamic Binding):在运行时刻确定。
- 由于存在对象标识的多态和消息的多态,消息的解释(处理)有时要采用动态绑定!
- 通过父类的引用或指针向对象发送消息,消息处理函数需要到运行时刻决定(取决于这个指针指向的是父类还是子类,在运行时才能确定)
多态带来的好处
-
使得程序功能扩充变得容易:程序上层代码不变,只要增加底层的多态元素即可。
-
增强语言的可扩充性,如操作符重载等。