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


此篇文章来自一个初学Java不久的学生,内容的用词、深度、广度甚至部分理解不够到位,再加上Markdown语法的不熟练,所以排版不够美观。但还是希望有疑问的读者能够读完全文,大家遇到问题可以一起交流。谢谢!

一、引言:

无论是哪种语言,我们最终的目的都是希望设计这个语言来解决我们现实生活需要解决的问题。当然,你也要明白,我们现实生活中出现的软件程序绝不是一个简单的1~100的这样的小算法程序,而是成百上千个这样的小算法集合在一个,共同构成了我们所需要的一个软件程序。

二、面向过程:

以面向过程的C语言为例。当我们面对一个问题时,我们更加侧重以正常人的逻辑思维来理解问题。

1)解决1~100的和:定义一个循环来依次求累计求解各个数字的和

2)解决1-100和的同时也能解决1-200的和:在1)的基础上或许我们会定义一个函数(Java里面称为方法)设置不同的参数来解决这样问题。

3)解决1~100和的同时还能解决100!:此时可能就需要设置两个不同的函数(Java里面叫做方法)来求解问题。

总结:其实我们不难发现,C语言的求解问题,有点类似于那种你需要什么,我就给你解决什么的,你不需要的我就不管,即没有让事情本身没有太多的联系。

三、面向对象:

以面向过程的Java语言为例。当我们面对和C语言一样的问题时候,我们更加的侧重于谁来帮我们解决,而不是我自己去怎么解决的思路。(我最开始理解这句话的时候,是知其然不知其所以然的)我后来的理解就是强调了内在事物的本身联系。同样以上面的三个题目为例。

1)解决1-100的和:不可否认,我们还是需要利用循环来求解问题。但是,这里既然是利用的面向对象的思想特点,那么,在求解问题的时候我们思想就不能够仅仅停留在循环表面。抽取出问题的本质,这是解决一个数字到另一个数字的求和问题。

2)解决1-100和的同时也能解决1-200的和:在1)问题的基础上,我们不难看出,抽取出的问题本质也能够很好的解决这个问题,它只是数字换一下。

3)解决1-100和的同时还能解决100!:确实我们也需要设置两个方法(C语言里面叫做函数)来解决这个问题,但是我们不能仅仅局限于这里,因为他是面向对象的语言。抽取出问题的本质,这是两个不同的问题,但是他们操作的却是同一群数字,只是运算符号不一样。

总结:在解决问题的时候,不是不关注怎么解决问题了(面向过程的语言的解决方式),而是更加侧重于事情内在的联系,将所要解决的问题进行一个合理的归类,用线把他们连在一个。

四、总结两者的联系:

读完前面的两个对不同语言的解读。我相信你已经能够明白,面向对象的语言与面向过程的语言并不是相互排斥。只是在思考问题时,不同语言的占位不同。面向过程侧重解决问题就完事,面向对象侧重抽取事务的本质,来解决更多的类似的问题。笔者认为,在初学编程语言的时候,面向过程的编程语言,更能够让我上手编程,因为没有其他的思维复杂度,看问题的角度就是简单的解决我眼下的问题,也许他是一个循环、一个递归、一个排序。而面向过程的语言,会在此基础上,再来注入一种新思维的方式,让你在解决问题的时候,不停留在问题的表面(为了解决一个普通的算法问题),而是着眼于整个软件程序的设计。

五、面向对象详解:

回到引言中,我们说过,无论是哪种语言,最终的结果就是设计出一款优秀的软件(最终结果肯定不止这一种)。东西是那么个东西,但是怎么才能够做好呢?这里可能就会涉及到很多不同的东西,例如:程序员的级别、编程语言的选择、开发时间的长短、、、、、、如何在这么多选项中依次选择出再组合在一起,这便成了优秀软件的最原始基础。针对其中的开发时间和编程语言来说,我统称为开发效率。这里我还是利用C语言和Java来说明,当我们要设计一个程序的时候,我们肯定会依次解决问题。C语言在解决问题的时候,更多的就是一个一个解决,然后组合在一个,然后形成一个程序。但是Java不同,在解决问题的时候,我们将要解决的问题,抽象到一个点上。举个例子:要去吃饭,要去做作业,又要去打篮球。这里是三个不同的事情,那么主体呢?谁来做这些?你、我还是小明?那么就抽象到一个点上,取名为People,无论是谁都可以代替它,以此来完成各种操作。在做的时候,只需要依靠这个People来调用它的三个方法之一,你要什么我就调用什么。以此来完成这一起的操作。那么问题又来了,编写这个方法和编写C最开始的函数不是一样的,并且还多出这么多的步骤?出于这一点的考虑,Java的开发者在Java中设计了丰富的类库(编写在JDK中)。所以我们在解决程序设计问题的时候,就不会把重心放在怎么去解决问题本身,而在于,利用类库的特性去调用里面的方法,你需要什么你就调用什么。或许你还会去关注怎么让这些问题更好的排版,能够让我的整个程序编写起来更加的舒服。即软件工程中所说的:高内聚低耦合(相关事物之间有很强的联系感,不相关的事物之间很小的影响)。当然这也是为了程序后期的运行维护做准备的。对于开发者没有的方法,我们则需要去自己定义。为什么它不帮我们把所有的方法全部写完,那样我们无论什么都直接调用呢?试想,你的需求多还是它的设计多?举个例子:A用户想要打印:我走路,B用户想要打印:我也走路。你说开发者能帮你写完吗?答案是能的,但是这样设计的意义在哪里?一句简单的话,自己要用,自己定义就行,没有必要为了一句话设计一个打印语句在类库中,让所有的开发者跟着你一起用你那句话。相反,哪些功能就很有必要呢?一句话:基础的算法题。比如:排序、累加、累乘、、、、、、以此让整个程序开发,更加的顺畅,为了不同的侧重点而考虑问题。

六、总结:

面向过程语言是在面向对象语言的基础上建立起来的,它将面向过程所需要的工作进行一个抽取,然后将自己工作的重心放在如何协调整个代码编写的协调性。我只想说面向对象是面向过程的一个升华,人类的智慧,真的很棒!

面向过程编程和面向对象编程的区别相关推荐

  1. python:面向过程编程和面向对象编程思想

    面向对象编程和面向过程编程(函数式编程)都是程序设计的方法,不过稍有区别. 套路 面向过程编程 1. 导入各种外部库2. 设计各种全局变量3. 写一个函数完成某个功能 4. 写一个函数完成某个功能 5 ...

  2. 面向接口编程和面向对象编程的区别

    我想,对于各位使用面向对象编程语言的程序员来说,"接口"这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作为 ...

  3. 什么是面向接口编程、面向过程编程、面向对象编程?

    1.什么是面向接口编程?(IOP) 面向接口编程(Interface Oriented Programming:IOP)是一种编程思想,接口作为实体抽象出来的一种表现形式,用于抽离内部实现进行外部沟通 ...

  4. 深入浅出--面向过程编程与面向对象编程

    浅谈面向过程(pop)与面向对象(oop) 面向过程和面向对象到底是什么?又有什么区别?这是个编程界老生常谈的问题了:不理解的人觉得很可怕,理解的人又觉得很简单,包括写这篇文章之前我还觉得这是一个只可 ...

  5. 【JavaScript高级】看完就理解面向过程编程和面向对象编程,不来了解一下?

    文章の目录

  6. 面向过程与面向对象编程的区别和优缺点

    ■面向过程与面向对象编程的区别 转载至:https://www.cnblogs.com/strivers/p/6681876.html 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步 ...

  7. 面向对象编程 面向过程编程_面向对象的编程真的是死定了

    面向对象编程 面向过程编程 重点(Top highlight) Programming in the 1960s had a big problem: computers weren't that p ...

  8. 函数式编程与面向对象编程的区别

    定义 函数式编程:以函数思维做为核心,在这种思维的角度去思考问题.这种编程最重要的基础是λ演算,接受函数当作输入和输出. 面向对象编程:这种编程是把问题看作由对象的属性与对象所进行的行为组成.基于对象 ...

  9. python对象编程例子-python面向对象编程练习

    练习题 1.面向对象三大特性,各有什么用处,说说你的理解. 面向对象的三大特性: 1.继承:解决代码的复用性问题 2.封装:对数据属性严格控制,隔离复杂度 3.多态性:增加程序的灵活性与可扩展性 2. ...

  10. 面向对象编程设计练习题(1)

    1.面向对象三大特性,各有什么用处,说说你的理解 继承 :继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题继承是一种创建新类的方式在p ...

最新文章

  1. 【网络编程】epoll 笔记
  2. Python高级特性——切片(Slice)
  3. Matlab 实现对 Excel sheet 重命名 合并单元格
  4. 启用系统登录失败处理功能
  5. 网关 Kong 折腾笔记 - 相关技术清单
  6. java 和mysql 时间_java和mysql之间的时间日期类型传递
  7. firefox使用技巧 - 公司内部站点
  8. dell装双系统linux系统,记录DELL灵越7590/7591安装Ubuntu+Win10双系统
  9. 在MyEclipse中配置Tomcat服务器
  10. 2018想要薪资翻倍?你需要掌握这个技能
  11. html之页面元素印射
  12. 青年必读书——民国名流开具的书单
  13. Bootstrap栅格系统(屏幕大小)
  14. Flash地址空间的数据读取
  15. CityEngine -俯视图
  16. 华硕PRIME Z390-P主板设置开启虚拟化技术
  17. 你觉得程序员最需要具备哪些软技能?
  18. TMMi认证有哪些?TMMi认证费用是多少?
  19. 人脸识别之人脸验证(五)--NormFace
  20. 敏捷结果30天之第三天:一日之计在于晨

热门文章

  1. [UESTC SC T4] Chika 的烦恼
  2. Intellij IDEA问题解决合集
  3. php 和 java_Java和php怎么选择??
  4. 流程生产订单和离散生产订单的区别_离散式生产和流程式生产的区别
  5. java json 替换属性值_替换JSONObject某个对象的值
  6. mysql查询每十分钟的数据_sql查询语句查询每10分钟的数据
  7. js微信监听返回_Node.js入门
  8. 去重 属性_亿万级海量数据去重软方法,spark/flink/mr等通用
  9. GSON的用法(处理对象和JSON的相互转化)
  10. 【问题5】什么是 redis 的雪崩和穿透?redis 崩溃之后会怎么样?