C++并不是一种纯粹的面向对象的语言,它是在C的基础上发展而成的,因此保留了C 的大部分功能和运行机制,自然也保留了C语言面向过程的语言特性。因此是一种基于过程和面向对象的混合型语言。
在基于过程的程序中,函数是构成程序的基本部分,程序面对的是一个个函数。每个函数独立存在,除主函数能被操作系统调用外,其他函输只能相互调用。而在面向对象的程序中,除主函数外,其他函数都出现在类
中,只有通过类才能调用类中的函数,程序的基本构成单位是类,程序面对的是一个个类和对象。
面向对象程序设计的4个特征:抽象,封装,继承和多态。
单个对象
对象具有两个要素:属性和行为。其中属性是类的静态特征,在C++语言中称为数据;而行为是类的动态特征,在C++语言中称为函数。函数用来对数据进行操作的,一实现某些功能。例如:
以一个班级作为对象的话,班级的属性包括班级所属系和专业、学生人数、所在教室等静态特性,班级的行为包括学习、开会、体育比赛等动态特性。如果想从外部控制班级中学生的活动,可以从外界向班级发一个信息,如听到广播就去上早操,打铃就下课等,这种信息称消息。
多个对象
一个系统中的多个对象之间通过发送和接受消息互相联系,要使某一个对象实现某一种行为,应该向它传送相应的消息。例如:
让录音机开始录音,必须由人去按键,或者用遥控器发送一个电信号。
封装与信息隐蔽
将一个对象的一部分属性和功能对外界屏蔽,即从外界是看不到甚至不可知的,这就是对象的封装。例如:
电视机里的电路板和机械控制部件,从外面是看不到的。在电视机的外面有一些按键,这就是电视机与外界的接口.人们不必了解电视机内部结构和工作原理,只需按下按键就能执行相应操作。
所谓“封装性”有两方面的含义,一是将有关数据和操作代码封装在一个对象中,形成一个基本单位,各对象间相互独立。二是将对象中的某些部分对外隐藏,即隐蔽内部细节,只留下少量接口,以便与外界联系,接收外界消息。信息隐蔽还有利于数据安全,防止无关的人了解和修改数据。
在C++中,函数名就是对外接口,外界通过函数名来调用函数实现某种功能。
抽象
抽象一词并不抽象,抽象的过程是将有关事物的共性归纳、集中的过程,它表示同一类事物的本质。
类是对象的抽象,而对象则是类的具体表现形式。例如:
10个不同尺寸的三角形是10个三角形对象,他们具有相同的属性和行为,因此可以将他们抽象为一种类型,称为三角形类。
继承与重用
在软件开发中,若已经建立了一个A类,又想建立一个B类,而A与B的内容基本相同,只是B在A的基础上增加了一些属性和行为,显然不必再从头设计一个新类,只需在A的基础上添加新的内容即可。这就是面向对象编程的继承机制。例如:
白马
继承了马
的基本特征,又增加了新的颜色特征,则马
为父类或基类;白马
是从马
派生出来的,称为子类或派生类。
面向对象的继承机制可以很方便地利用一个已有类建立一个新类,大大节省了编程工作量,缩短软件开发周期,这也就是所谓的软件重用思想。
多态性
有几个相似而又不完全相同的对象,有时需要向他们发送同一消息而期望各自具有不同的反应。这种情况就是多态现象。例如:
甲乙丙三个班都是高二年级,他们的属性和行为基本相似,在同时听到上课铃声时,他们会分别走进3个教室,而不是同一个教室。
在C++中,所谓多态就是:由继承而产生的不同的派生类,其对象对同一消息会做出不同的相应。多态能增加程序的灵活性。
面向过程与面向对象
面向过程 | 面向对象 |
---|---|
围绕功能进行,用函数实现功能 | 围绕对象展开 |
数据和函数是公开的 | 数据和有关操作封装成一个对象 |
需考虑程序设计中每一个细节 | 只需考虑类和对象的设计以及对象间的消息传递 |
程序=算法+数据结构 | 对象=算法+数据结构 /程序=多个对象+消息 |
面向对象的软件开发过程
- 面向对象分析
- 面向对象设计
- 面向对象编程
- 面向对象测试
- 面向对象维护