什么是面向对象编程?面向对象和面向过程有什么区别?

纵饮孤独 提交于 2019-12-02 12:45:55

面向对象

面向对象的程序设计(Object-Oriented Programming,简记为OOP),是当下最流行的程序设计方式之一。在面向对象的设计思想中,将程序视为多个对象共同协作的结果。程序被划分为多个子模块,再由多个对象完成各自模块最终实现程序的功能。

我们来看一个例子(部分代码):
班级要举办元旦晚会演出,有三名同学报名了歌舞表演环节,分别是唱歌的小明、唱歌的小李和跳舞的小红。

public static void main(String[] args) {
    //创建对象
    People 小明 = new People();
    People 小李 = new People();
    People 小红 = new People();

    //对象完成任务
    小明.sing();
    小李.sing();
    小红.dance();
}

如果你是第一次接触java,也许会对这部分代码存有一些疑问,new是啥?怎么还有中文?我们暂时先不管这些,本文目的是带大家认识接触面向对象,至于java的细节和面向对象的特性将在其他文中介绍。

运行结果:

小明唱了一首歌,真好听!
小李唱了一首歌,真好听!
小红跳了一支舞,真好看!

在示例中,歌舞环节由三个对象(小明、小李和小红),每个对象实现各自的模块(小明唱歌、小李唱歌、小红跳舞),由此实现了程序的功能。
这便是一个较为典型的面向对象设计程序的例子。

面向对象与面向过程的比较

面向过程的程序设计(Procedure-Oriented Programming)是一种以过程为中心的设计方式。在该方式中,将目标功能的实现分为多个步骤。程序依据步骤的过程一步步执行,最终实现程序功能。

举一个不是特别准确但能体现思想的例子:某天你决定要清理一下地板,然后再把衣服洗了,最后再吹吹风休息一会

面向过程的解决步骤:

  1. 扫地:
    1.1 拿扫把和扫帚
    1.2 将垃圾汇集到某处
    1.3 将垃圾扫进扫帚
    1.4 将扫帚的垃圾倒进垃圾桶
  2. 洗衣:
    2.1 拿盆接好水,倒入洗衣液
    2.2 放入衣服并浸泡
    2.3 揉搓衣服
    2.4 换清水漂洗
  3. 吹风:
    3.1 拿出扇子
    3.2 给自己扇风

在经历这么多步骤后,你终于把活干完了,但是自己已经精疲力尽,多么希望有人能帮忙分担一点呀!如果有个对象帮忙该多好…(狗头保命)。

面向对象的解决步骤:

  1. 扫地:
    1.1 拿出扫地机器人
    1.2 扫地机器人!开始干活!
  2. 洗衣:
    2.1 找到洗衣机,放入衣服和洗衣液
    2.2 洗衣机!开始干活!
  3. 吹风:
    3.1 拿出电风扇
    3.2 电风扇!开始干活!

干完活后,你坐在窗边看着夕阳,感叹生活真是太美好了!
这里的扫地机器人、洗衣机、电风扇扮演着对象(Object)。
特别提示:此对象(Object)非彼对象(girlfriend),虽然在此例中它们像生活女朋友一样体贴,但你真的愿意拿电风扇当对象吗?!

比较总结:

  1. 面向过程编程中,开发者注重于程序功能实现的过程,编程过程中扮演类似执行者的角色
  2. 面向对象编程中,开发者注重于对象的创建和调用,编程过程中扮演类似指挥者的角色
  3. 面向过程编程中,开发者可以精准把控程序执行的每一步和每一个细节(比如:手洗衣服过程中,衣服的哪个部位需要多搓一会,扇扇子的时候多扇头还是扇脚)
  4. 面向对象编程中,开发者无需知道对象的每一个细节,对象如何工作交给对象的设计者完成(当然开发者常常扮演设计者的角色,同时已经有很多东西已经被设计好了)
  5. 面向过程设计方式在中小型项目中更有优势。开发者只需要想好步骤,再依据步骤写下来即可。
  6. 面向对象设计方式在大中型项目中更有优势。开发者设计好对象后,只需调用对象完成任务使得代码更简洁易懂易于维护。
  7. 面向对象设计方式在宏观上是面向对象的,在微观上依旧是面向过程的。 在每个对象的内部有着它们的行为属性(扫地、洗衣服、吹风),设计者在设计如何让它们工作的过程中依旧是按照面向过程的思想让程序按照步骤执行。由此可见:面向过程是程序设计的基本方式

写在最后

面向对象和面向过程不存在绝对的优劣之分,在不同的场景选用不同的设计方式才是明智之举。
面向对象为传统编程提供了一个新的思维方式,这和面向过程是完全不同的。它亦非短时间便能完全掌握的东西。在学习的不同时期,我对面向对象也有着不同的看法。
关于面向对象的三大特性(继承、封装、多态),我将在后文中更新,掌握了三大特性,才是真正的敲开了面向对象编程思想的大门

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!