您的位置:首页 > 其它

面向过程和面向对象的区别

2019-03-15 17:52 127 查看

先来看生活中的一个例子。

想必每个人都下过五子棋吧?在下棋的整个过程中可以有两种不同的思路来实现

1、按步骤来看

(1)、开始游戏,(2)、黑子先走,(3)、绘制画面,(4)、判断输赢,(5)、轮到白子,(6)、绘制画面,(7)、判断输赢,(8)、返回步骤(2),(9)输出最后结果

2、按组成模块来看
  (1)、黑白双方模块,(2)、棋盘模块,(3)、规则模块

以上两种完全不同的设计思路,正好对应于编程中完全不同的两种思想:前者侧重于游戏步骤的设计,对应于编程中的面向过程思想;后者着重于分层,有模块化设计理念,对应于编程中的面向对象思想。可以很明显地看出:面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

C语言是典型的 “面向过程”设计语言。面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。“面向过程”是一种以过程为中心的编程思想。“面向过程”也可称之为“面向记录”编程思想,它们不支持丰富的“面向对象”特性(比如继承、多态)。如下图:

Java是 典型的“面向对象” 设计语言。“面向对象”是一种以事物为中心的编程思想。是把构成问题的事物分解成各个对象,建立对象的目的不是为了完成某一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。如下图:

面向过程适合于一个人的小量工作,而面向对象更侧重于团队合作,需要很多人完成的大量工作。面向过程思想是我们每一个人天生具备的。在编程时,我们总会不自觉的去考虑怎么来完成某一需求,分析出具体的步骤,然后按照步骤来一步步实现。但是在现实生活当中,并不是每一件事都可以自己独立来完成,我们需要团队,需要合作才可以完成某一项复杂的工作。这样来看的话,面向对象思想似乎更符合人们的做事方式,也更生活化。是的呢,不管是生活中,亦或是编程中,面向对象才是我们更应该具备的一种思想,先来看几组概念。

对象:对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看做对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件等。
:具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例化是对象,类实际上就是一种数据类型。
面向对象三大特征封装继承多态

封装:封装是一种把代码和代码所操作的数据捆绑在一起,使这两者不受外界干扰和误用的机制。封装可被理解为一种用作保护的包装器,以防止代码和数据被包装器外部所定义的其它代码任意访问。
继承:继承是指一个对象从另一个对象中获得属性和方法的过程。它支持按层次分类的概念,如果不使用层次的概念,每个对象需要明确定义各自的全部特征,通过层次分类方式,一个对象只需要在它的类中定义使它成为唯一的各个属性和方法。
多态:多态是指同一个实体同时具有多种形式。同一操作作用于不用的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的引用,来调用实现派生类中的方法。

面向过程

优点:性能比面向对象高。
缺点:没有面向对象易维护、易复用、易扩展。

面向对象

优点:易维护、易复用、易扩展。由于面向对象有封装、继承、多态性的特征,可以设计出低耦合的系统,使系统更加灵活,更加易于维护和扩展。
缺点:性能比面向过程低。



针对于上面的面试问到的知识点我总结出了有1到5年开发经验的程序员在面试中涉及到的绝大部分架构面试题及答案做成了文档和架构视频资料免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习,也可以关注我一下以后会有更多干货分享。

资料获取方式 搜索“708701457” 备注“csdn” 即可免费领取

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: