面向过程的程序设计思路:分析解决问题所需步骤,用函数把这些步骤依次实现。面向过程是在面向对象产生之前及之后,甚至日至今日还应用于程序开发中的程序设计思想。
面向对象的程序设计思路:把构成问题的事务分解为各个对象,将数据(数据结构)和对数据的操作(方法或函数)抽象、封装到类和对象。建立对象目的,不是完成一个步骤,而是描述某个事务在解决整个问题步骤中的行为。面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。它具有抽象性、封装性、继承性及多态性等。
C语言是面向过程的编程,它最重要的特点是函数,通过主main函数来调用各个子函数。程序运动的顺序都是程序员事先决定好的。
C++是面向对象的编程,类是它的主要特点,在程序执行过程中,先由主main函数进入,定义一些义,根据需要执行类的成员函数,过程的概念被淡化了(实际上过程还是有的,就是主函数的那些语句),以类驱动程序运行,类就是对象,所以我们称之为面向对象程序设计。
形象地理解,面向过程就是把所有的功能全部在一个大的类里定义出来,当系统庞大时,功能多了,各种操作之间的调用关系也很复杂,当需要修改一个功能时就可能引发一连串的改动,使修改和维护成本很昂贵。面向对象是把功能以对象为基本单位进行分类,这就是面向对象程序设计所常说的类。当需要添加功能时,只需修改相应的类和极小的其他部分,即可达到目的。
面向对象在分析和解决问题的时候,将涉及的数据和数据的操作封装在类中,通过类可以创建对象。例如,可以构建一个Circle类(表示圆的类),它是半径不同的所有圆的一个抽象描述。通过类可以创建任意多个对象,这些对象之间是相互独立的。可以由Circle创建圆c1和圆c2,而c1和c2是彼此独立的对象。这样,对于事务的管控力度,就由某个具体的对象扩大到一个类,符合人们认识事务的习惯。
class Circle
{
private:
double m_dRadius;
public:
void SetR(double r)
{
m_dRadius = r;
}
double GetArea()
{
return(3.14*m_Radius * m_dRadius);
}
}
面向过程程序设计的实质是从计算机处理问题的观点(信息流及转换)来进行程序设计工作:输入-运算-输出。需要一开始就设计全面的、自上而下的整个应用程序的架构,因此要求程序设计者对问题域有全面的了解。
面向对象程序设计是一种自下而上的结构化的程序设计方法,往往从问题的一部分着手,一点一点地构建整个程序。面向对象设计以数据为中心,类作为表现数据的工具,成为划分程序的基本单位。面向对象有以下几个重要特点:
客观世界由对象组成;
对象抽象为类;
类与类之间存在继承关系;
对象之间通过消息传递而彼此联系;
面向对象由面向孕育而来,两者各有特色,均有自己的优缺点和使用范围。
面向过程 | 面向对象 | |
优点 | 性能较高,一般单片机、嵌入式开发、Linux等一般采用; | 维护、易复用和扩展;由于面向对象有封装、继承、多态的特性,可以设计出低耦合的系统,使系统更加灵活,更易于维护;可以利用框架产品,如MFC。 |
缺点 | 不易维护、不易复用和扩展;易 | 性能较低,因为类调用时要实例化,开销比较大,比较消耗资源; |
数据和对数据的操作 | 数据和对数据的操作(函数)是分离的; | 将数据和对数据的操作过类和对象作为一个整体处理; |
以功能为中心 | 以数据为中心,相对以功能为中心,具有较强的稳定性; | |
控制流程 | 由程序中预定的顺序来决定 | 由运行时各种事件的实际发生来触发,更符合实际需要; |
面向对象程序设计的定义:“面向对象程序设计是一种方法,这种方法为数据和函数提供共同的独立内在空间,这些数据和函数可以作为模板以便在需要时创建类似模块的拷贝。”从该定义可以看出,一个对象被认为是计算机内存中的一个独立区间,在这个区间中保存着数据和能够访问数据的一组操作。因为内存区间是相互独立的,所以对象可以不经修改就应用于多个不同的程序中。
程序设计的重点在于数据而不是过程;程序被划分为所谓的对象。
数据结构为表现对象的特性而设计;函数作为对某个对象数据的操作,与数据结构紧密地结合在一起。
数据被隐藏起来,不能为外部函数访问;对象之间可以通过函数沟通;
新的数据和函数可以在需要的时候轻而易举地添加进来。
在程序设计过程中遵循由下而上的设计方法;
通过继承,可以大幅减少冗余的代码,并扩展现有代码的用途;
可以在标准模板上(“标准”指程序员之间彼此的协议)构建自己的程序。而不必从头开始,从而减少软件开发时间并提高生产效率。
数据隐藏的概述帮助程序员们保护程序免受外部代码的侵袭。
允许一个对象的多个实例同时存在,而且彼此之间不会相互干扰。
基于对象的工程,可以很容易地分割为独立的部分;发数据为中心的设计方法,允许用户抓住可实现模型的更多细节。
面向对象的系统很容易从小到大逐步升级。
对象间通信所使用的消息传递技术与外部系统接口部分的描述更简单,更便于控制软件复杂度。
实时系统;
仿真和建模;
面对对象数据库;
超文本、超媒体和扩展文本;
AI和专家系统;
神经网络和并行程序设计;
决策支持和办公自动化系统;
CIM/CAM/CAD系统;