c++为什么要面向对象?

前言

  c和c++的区别是什么?不可置否,最重要的就是c++的编程思想是面向对象,而c的编程思想是面向过程,这是它们的本质区别,如果你在使用c++编程时使用的还是面向过程的编程思想,那么还不如使用c,因为这样的做法已经丢掉了c++的思想精髓。在学习一门语言时,最重要的是学习它的设计思想,因为语法都是大同小异的,很快便可以掌握。那么面向过程和面向对象编程的发展历史如何,区别是什么,各自的优缺点是什么,且听我一一道来。

  

一、“自顶向下,逐步求精”的面向过程程序设计

   面向过程程序设计的思想即这样的一种解决思路 - 提出问题,分析问题的处理流程,将大问题分解为小问题,如果小问题比较复杂,就继续划分小问题为更小的问题,然后通过小模块一一解决小问题,最后再根据整个业务流程将这些小问题串在一起(调用函数),这样就达到了解决所有问题的目的,如下:

                        

  于是,这样从问题出发,自顶向下、逐步求精的开发思想我们称之为“面向过程程序设计思想”,因为它主要是解决问题中的一个个过程。这种思想也是最早的编程语言的思想,因为它比较符合我们解决问题的方法,其他语言比如早期的Fortran、JavaScript等都是如此。它的优点如下:

优点1:程序结构简单 - 仅由三种基本结构组成

  面向过程编程的思想在程序实现上只需要三种控制结构,即顺序、选择、循环。通过这三种基本结构,我们就可以解决任何问题,所以我们可以专注于程序逻辑的实现,不需要学习、记忆更多的控制结构。 

优点2:分而治之,各个击破

  当我们在解决复杂问题时,通常采用的就是“分而治之”的策略,即把大问题分解为小问题,然后再各个击破这些小问题,这样整个大问题就得到了解决。所以,面向过程程序设计思想也是采用这种“分而治之”的策略,把较大的程序按照业务逻辑划分为多个子模块,然后在分工逐个完成这些子模块。最后按照业务流程把他们组织起来,最终使得整个问题得到解决。按照一定的原则,把大问题细分为小的问题然后“各个击破”,符合人们思考问题的一般规律,其设计结构更易于理解,同时这种方法也易于人们掌握,通过分解问题,降低了问题的复杂度,使得程序易于实现和维护,另外,部分分解后的小问题(子模块)可以重复使用,从而避免了重复开发,而多个子模块也可以由多人分工协作完成,提高开发效率。 

  

优点3:自顶向下,逐步求精

  面向过程程序设计思想倡导的方法是“自顶向下,逐步求精”,即从宏观角度考虑,按照功能或者业务逻辑划分程序的子模块,定义程序的整体结构,然后再对各个子模块逐步细化,最终分解到程序语句为止。这种方法可以使程序员全面考虑问题,使程序的逻辑关系清晰明了。它让整个开发过程从原来的考虑 “怎么做” 变成考虑 “先做什么,再做什么”,流程就更加清晰了。 

  

缺点:

  但是,一件事物必定有优点也有缺点,面向过程的程序设计当然也躲不过这种规律,并且缺点的凸显往往是在程序的复杂性越来越高时才会出现的,那么这种设计思想的缺点是什么呢?   

  在面向过程程序设计时,数据和操作往往是分离的,这就导致如果数据的结构发生了变化,那么操作数据的函数不得不重新改写,这个代价是非常高的。并且,数据往往不具有封装性,很多变量都会暴露在全局,加大了被任意修改的风险。另外,一旦涉及到模块的重新划分,往往需要修改原来写好的功能模块。且这种数据和操作相互分离的特点使得一些模块跟具体的应用环境结合紧密,旧有的程序模块就很难在新的程序中得到复用。所以,这些固有的缺点使它越来越难以适应大型的软件项目的开发。正是在这样的历史背景下,一些新的程序设计思想开始不断涌现,而面向对象的程序设计思想就是最重要的一环。

  

二、万般皆对象:面向对象程序设计

  

    

猜你喜欢

转载自www.cnblogs.com/zhuzhenwei918/p/9109917.html