面向过程的程序设计思路:分析解决问题所需步骤,用函数把这些步骤依次实现。面向过程是在面向对象产生之前及之后,甚至时至今日还应用于程序开发中的程序设计思想。面向对象的程序设计思路:把构成问题的事务分解为各个对象,建立对象目的,不是完成一个步骤,而是描述某个事务在解决整个问题步骤中的行为。从上述描述中可以看出,其实面向过程和面向对象是两种思考解决问题的方式,其差异主要在于思考的角度。
面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。它具有抽象性、封装性、继承性及多态性等。
例如,一辆汽车,用面向过程的思想去考虑它应该是这样的:如何启动汽车,如何起步、加速、刹车、熄火等一个个操作,而汽车在这里并不是我们所关心的。而面向对象则以汽车为对象,一切由汽车开始,以上的可用操作,即功能是汽车这个对象本身所具有的,做任何操作只要告诉汽车就可以了。
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_dRadius*m_dRadius);
}
}
面向对象和面向过程的差异
●面向过程程序设计方法的实质是:从计算机处理问题的观点来进行程序设计工作:输入一运算一输出。面向过程程序设计者需要变更习惯的思维方法以贴近计算机的内部工作机理。面向过程程序设计所具有的流的工作性质,试图通过信息流及其转换来认识系统,不仅加大了程序设计的难度,同时会导致程序的可理解性比较差。
●面向对象程序设计中,普遍采用的优化方法是使用结构化的程序设计方法。面向过程程序设计方法一般适宜采用自上而下的设计方法。
●面向过程程序设计方法,需要在一开始就设计全面的、自上而下的整个应用程序的架构,因此要求程序设计者对问题域有全面的了解。面向过程程序设计方法很难复用以前已经设计完成的软件。
●面向对象程序设计是一种自下而上的程序设计方法,往往从问题的一部分着手,一点一点地构建整个程序。面向对象设计以数据为中心,类作为表现数据的工具,成为划分程序的基本单位。面向对象有以下几个重要特点:(1)客观用世界由对象组成;(2)对象抽象为类;(3)类与类之间存在继承关系;(4)对象之间通过消息传递而彼此联系。
●面向对象由面向过程孕育而来,两者各有特色,均有自己的优缺点和使用范围。首先讨论面向过程和面向对象的优缺点。
面向过程的优缺点
●优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/UNIX等一般采用面向过程开发,性能是最重要的因素。
●缺点:没有面向对象易维护、易复用、易扩展。
面向对象的优缺点
●优点:易维护、易复用、易扩展。由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活,更易于维护。
●缺点:性能比面向过程低。
当前面向对象最有前途的应用领域如下:
●实时系统。仿真和建模。
●面向对象数据库。
●超文本、超媒体和扩展文本。
●AI和专家系统。
●神经网络和并行程序设计。
●决策支持和办公自动化系统。
●CIM/CAM/CAD系统。
在程序设计模式中,面向对象程序设计是一个新的概念,对于不同的人可能意味着不同的内容。面向对象程序设计的定义:“面向对象程序设计是一种方法,这种方法为数据和函数提供共同的独立内存空间,这些数据和函数可以作为模板以便在需要时创建类似模块的拷贝。这样的程序设计方法称为面向对象程序设计。”
从以上定义可以看到,一个对象被认为是计算机内存中的一个独立区间,在这个区间中保存着数据和能够访问数据的一组操作。因为内存区间是相互独立的,所以对象可以不经修改就应用于多个不同的程序中。面向对象程序设计的显著特性
●程序设计的重点在于数据而不是过程;程序被划分为所谓的对象。
●数据结构为表现对象的特性而设计;函数作为对某个对象数据的操作,与数据结构紧密地结合在一起。
●数据被隐藏起来,不能为外部函数访问;对象之间可以通过函数沟通。
●新的数据和函数可以在需要的时候轻而易举地添加进来。
●在程序设计过程中遵循由下至上(bottom-up)的设计方法。
无论是对于程序设计者还是用户来说都是如此。面向对象为软件产品扩展和质量保证中的许多问题提供了解决办法。这项技术能够大大提高程序员的生产力,并可提高软件的质量以及降低其维护费用。
面向对象程序可维护性的优点
●通过继承,可以大幅减少冗余的代码,并扩展现有代码的用途。
●可以在标准模块上(“标准”指程序员之间彼此达成的协议)构建自己的程序,而不必一切从头开始,从而减少软件开发时间并提高生产效率。
●数据隐藏的概念帮助程序员们保护程序免受外部代码的侵袭。
●允许一个对象的多个实例同时存在,而且彼此之间不会相互干扰。
●允许将问题空间中的对象直接映射到程序中。
●基于对象的工程,可很容易地分割为独立的部分;以数据为中心的设计方法,允许用户抓住可实现模型的更多细节。
●面向对象的系统很容易从小到大逐步升级。
●对象间通信所使用的消息传递技术与外部系统接口部分的描述更简单;更便于控制软件复杂度。
最后,不得不说的是,虽然面向对象程序设计有着众多的优点,但是在某些场合下,依然无法和面向过程相抗衡。例如操作系统,90%以上的操作系统实现语言是C语言,而不是 C++语言。这也是 Linux 之父说“C++是个糟糕的语言”的原因。
请谨记
●掌握面向对象和面向过程的差异,不要迷信面向对象万能说。如同面向过程一样,面向对象也有其擅长的和不擅长的。
●明确知道你为什么选择面向对象。记住:语言没有优劣之分,只有合适或不合适。