c++_面向过程与面向对象的理解

  c语言是比较偏结构化和模块化的语言,适合处理规模较小的程序。对于复杂的问题,规模较大的程序,需要高度抽象和建模时,c语言则不是很合适。时代在进步,软件也越来越复杂,为了解决这一问题,计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。

  1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

  面向对象和面向过程到底有哪些区别,为什么要提出面向对象的思想……

  首先我们来看看一个简单的洗衣服过程,面向过程的思想和面向对象的思想是如何实现的:
在这里插入图片描述

  乍一看,两边的过程也没啥区别呀,步骤还是没变(其实面向对象的底层依旧是面向过程),好像只是把函数封装在了类中,我们实例化成对象之后再进行使用。貌似这样调用还变得更加复杂了呢。(虽然确实复杂了,但是好处肯定也变多了)

  大家可以明显的看到,面向过程中都是动词(把我们想干的事情按照步骤写下去就行),而面向对象中都是名词(我们把面向过程中的主体对象抽离出来,把函数封装在其抽象的类里面,通过对象.动作的方式来进行调用),面向对象的思想就是,把一份工作通过对象之间的交互来完成,因为这样分工会很明确,各个过程之间的耦合性(依赖性)会大大降低,便于维护和部分修改(洗衣服的例子有点简单,有点难以体现易维护和易修改的好处)。

  给大家举一个我在别处看到的例子,面向过程就像蛋炒饭,有些人不喜欢吃蛋,有些人喜欢米软一点,但是你把蛋炒饭做好之后,因为依赖性很高,这些东西很难改变了,只能重新炒一份。。。面向对象就像盖浇饭,想吃什么菜,就盖什么菜,饭不行就换饭,菜不行就换菜。。。饭菜的分离(封装思想以及对象间交互的工作方式),提高了灵活性,也提高了维护性。

  我们也不能说面向过程和面向对象谁好谁不好,只能说各有优缺点。面向过程没有实例化的一些步骤,开销较小,性能会较强。因为面向对象有封装,继承,多态的特性,所以有易维护,易扩展,易复用的好处。

  那么肯定就有人就会问了,对象到底是什么,我们为什么要把代码封装在类中,然后实例化成对象再使用呢?难道不能直接使用吗?

  大家可以这样理解,类就是数据与功能,是写给电脑看的,对象是实际物品,是实例化给人用的。比如说,你要给你的电脑描述一下洗衣机,你会怎么告诉它?端着电脑站在你家的洗衣机旁边指给它看嘛?当然不行。电脑是一个虚拟的世界,没有实际物品,只有数据。我们可以通过用属性加功能的方式把洗衣机转换成数据描述给电脑。长宽高都是一米,前面有个小门,能洗衣服,能注水,能甩干,能响铃,能排水。电脑把这些属性和功能保存在一个类中,并且起名字为洗衣机类。以后如果电脑碰见一个物品,它具有这些属性和功能,那么电脑就会知道这个物品就是洗衣机了。封装在类里面的好处有很多,比如说,我们可以只给外界展示我们想展示的接口,部分内部接口我们可以选择不展示。在继承方面,我觉得你这个类功能有点少,我继承之后,我还可以自己再更新一些新的功能加进去来使我更加方便的去使用……

  那么问题又来了,为什么把类实例化之后才能使用呢,类不能直接去使用吗?你想想,你想洗衣服,难道你用一堆数据去洗吗?你肯定要用这一堆数据造(实例化)出来的东西(洗衣机)去洗。我们有一个人的类,你在大街上,看见了你的好朋友小明,你会说,“嗨,人”,还是,“嗨,小明”,所以说,先实例化,才能再使用。

最后总结关于类的两句话:
  类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。
  封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

越努力,越幸福!

原创文章 6 获赞 21 访问量 280

猜你喜欢

转载自blog.csdn.net/chenzhanpeng_/article/details/105786662