Lecture 02 面向对象程序设计概述
什么是面向对象程序设计(Object-oriented Programming)
面向对象程序设计具有以下几个特征:
- 程序由若干对象组成,每个对象是由一些数据以及对这些数据所能实施的操作所构成的封装体;
- 对象的特征(包含那些数据与操作)由相应的类来描述;
- 对数据的使用是通过向包含数据的对象发送消息(调用对象类的对外接口中的操作)来实现的;
- 一个类所描述的对象特征可以从其它的类继承(获得)。
面向对象程序设计的基础是数据抽象与封装。
注意:如果没有“继承”,则称为:基于对象的程序设计(Object-based Programming)
面向对象程序的执行过程
对象构成了面向对象程序的基本计算单位,程序的执行体现为:对象间的一系列消息传递:
- 从程序外部向程序中的某个对象发送第一条消息启动计算过程;
- 该对象在处理这条消息的过程中,又向程序中的其它对象发送消息,从而引起进一步的计算;
- 消息处理可分为两种方式:
- 同步消息处理:消息发送者必须等待消息处理完才能继续执行其它操作(顺序执行)。
- 异步消息处理:消息发送者不必等待消息处理完就能继续执行其它操作(并发执行)
面向对象程序设计带来的好处
一个方法的优劣主要看它是否能提高软件开发效率和保证软件质量!
影响软件开发效率和软件质量的因素主要包括:
- 抽象(控制复杂度)
- 封装(保护信息)
- 模块化(组织和管理大型程序)
- 软件复用(缩短开发周期)
- 可维护性(延长软件寿命)
- 软件模型的自然度(缩小解题空间与问题空间之间的语义间隙,实现从问题到解决方案的自然过渡)
面向对象程序设计的基本内容
对象/类(Object&Class)
- 对象是由数据及能对其实施的操作所构成的封装体。
- 类描述了对象的特征(包含什么类型的数据和哪些操作),实现抽象。
- 对象属于值的范畴,是程序运行时刻的实体;类则属于类型的范畴,属于编译时刻的实体。
继承(Inheritance)
- 在定义一个新的类(子类、派生类)时,可以把已有类(父类、基类)的一些特征描述先包含进来,然后再定义新的特征。
- 单继承与多继承
消息的多态与动态绑定
- 多态(Polymorphism):某一论域中的一个元素存在多种解释。在程序中,多态通常体现为:
- 一名多用:
- 函数名重载
- 操作符重载(语言预定义和用户自定义)
- 类属:
- 类属函数:一个函数能对多种类型的数据进行操作。
- 类属类:一个类可以描述多种类型的对象。
- 绑定(Binding):确定对多态元素的某个使用是多态元素的哪一种形式。可分为:
- 静态绑定(Static Binding):在编译时刻确定。
- 动态绑定(Dynamic Binding):在运行时刻确定。
面向对象程序特有的多态(继承机制带来的):
- 对象类型的多态:子类对象既属于子类,也属于父类。
- 对象标识的多态:父类的引用或指针可以引用或指向父类对象,也可以引用或指向子类对象。
- 消息的多态:发给父类对象的消息也可以发给子类对象,父类与子类会给出不同的解释(处理)。
- 由于存在对象标识的多态,消息有时要采用动态绑定!
多态带来的好处
- 使得程序功能扩充变得容易(程序上层代码不变,只要增加底层的具体实现即可)。
- 增强语言的可扩充性(如操作符重载等)。