面向对象程序设计(OOP)

面向对象程序设计(OOP)是一种设计程序的模型,也是一种用于程序开发的方法

1 OOP

       OOP:在一个程序中包含多个对象,这些对象彼此之间不相关,每个对象都有一些方法,我们可以调用这些对象的方法来进行编程(需要做什么就调用相关对象的相关方法)。

       与之相对应的是POP ——面向过程,其以过程为中心进行编程,一般先分析解决问题的步骤,对这些步骤用函数来实现,最后依次序调用实现。

       很显然面向对象是重在功能,面向过程重在步骤。

用在知乎上看到的个例子:
 

    用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。所谓盖浇饭,北京叫盖饭,东北叫烩饭,广东叫碟头饭,就是在一碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。我觉得这个比喻还是比较贴切的。

  蛋炒饭制作的细节,我不太清楚,因为我没当过厨师,也不会做饭,但最后的一道工序肯定是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。

  蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。

  到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长。如果大家都不是美食家,没那么多讲究,那么从饭馆角度来讲的话,做盖浇饭显然比蛋炒饭更有优势,他可以组合出来任意多的组合,而且不会浪费。

  盖浇饭的好处就是”菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是”可维护性“比较好,”饭” 和”菜”的耦合度比较低。蛋炒饭将”蛋”“饭”搅和在一起,想换”蛋”“饭”中任何一种都很困难,耦合度很高,以至于”可维护性”比较差。软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。

抽象:简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释问题。

多态:是指由继承而产生的相关的不同的类,其对象对同一消息会做出不同的响应

封装:即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;

继承:继承可以使得子类具有父类的属性方法或者重新定义、追加属性和方法等。

对象:类的具体实现。用法

Class(类) class(对象)=new Class(类)

       举个例子吧,就拿洗衣服来说,假设你非常有钱,你为了洗衣服等东西有俩位工匠——没对象和杨过程。

       在第一次,你让他俩洗衣服。没对象组装了一个洗衣机(类)有四个功能(类的方法)——加水,洗,甩干,倒水,然后按下这四个按钮。而杨过程在洗衣之前考虑了怎么洗,每一步做什么——加水,洗衣服,甩干,倒水,然后开发了一个机器,接着执行每一步操作。现在基本看着一样。

       第二次呢,衣服有油渍,洗衣时要加入一些洗洁精,没对象为洗衣机在继承洗衣功能的后改变洗功能成为了新功能——洗衣有油,然后将加水,洗衣有油,甩干,倒水功能组装成机器洗油衣服机器,执行。而杨过程在洗衣服中加入了一个判断,有油在流水线工具下加入洗洁精。然后执行

       第三次,你需要洗一堆鞋,洗鞋时要用布摩擦,没对象为洗衣机在继承洗衣功能的后改变洗功能成为了新功能——洗鞋,将加水,洗鞋,甩干,倒水功能组装成机器,执行。而杨过程在洗衣服中继续加入了一个判断,如果是鞋的话加入一块硬布摩擦,执行。

       如此过了很多次,没对象获得了很多机器——洗衣机,洗鞋机,洗碗机,用来执行各样的子操作,每次只需要用相应的机器就好,而杨过程的机器则需要每次在洗衣这个步骤里面不断加入东西。

        在少次增加功能内,明显杨过程更占优势。次数多以后,杨过程的机器中洗衣功能的构成过于庞大,甚至导致无法再加入任何洗操作功能了,而没对象在改进洗衣机的洗方法后组装就可以产生一个新机器(继承),这时没对象明显优于杨过程(便于维护和修改)。

        你看没对象的机器时,你所接触的洗衣机只有那几个功能,你看不到这个洗衣功能是如何实现的(封装)。

        在你用没对象的机器时,你点击开始洗,洗鞋机会执行洗鞋的洗操作,洗衣机会执行洗衣的洗操作。同样是洗操作,但洗的过程和洗出来的东西却不相同(多态:是指由继承而产生的相关的不同的类,其对象对同一消息会做出不同的响应)。

        在你需要洗鞋时,你需要找到最恰当的机器——洗鞋机,你不可能用洗衣机来解决。(抽象是简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释问题。)   

 

猜你喜欢

转载自blog.csdn.net/weixin_43435259/article/details/113134114
今日推荐