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

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


此篇文章来自一个初学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用户想要打印:我也走路。你说开发者能帮你写完吗?答案是能的,但是这样设计的意义在哪里?一句简单的话,自己要用,自己定义就行,没有必要为了一句话设计一个打印语句在类库中,让所有的开发者跟着你一起用你那句话。相反,哪些功能就很有必要呢?一句话:基础的算法题。比如:排序、累加、累乘、、、、、、以此让整个程序开发,更加的顺畅,为了不同的侧重点而考虑问题。

六、总结:

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

你可能感兴趣的:(Java基础,java)