面向过程和面向对象

在关于编程的第一篇文章,我没有写比如c、python之类的编程语言的知识,而是从面向对象这种编程的开发思路开始。一开始我实习了才学习编程,看了一点java的教程,学会了一些基础就直接针对工作需求写代码了,一开始还好,后来发现代码太啰嗦,那时候还没有真正理解什么叫面向对象编程,而是用了面向过程的方法。所以我觉得先理解什么样的思路去编写代码更高效规范,对编程的学习是有帮助的。

说了那么多,就开始讲一下什么算面向过程什么算面向对象吧。这里给一个问题作为例子,假如现在有一个盲人要从a点走到b点,那么我们应该怎么教他走,好了,一下子就出现在脑海里的想法,一般来说都是往前走十步,然后往右走五步(假设这个说法能让盲人正确到达终点)。好,这个说法没问题,我们也可以编写出这样一段程序,这段程序有什么特点?那就是我们会分析为了解决问题,应该怎么做,把解决的过程拆分成一个个步骤,然后写成代码,这就是面向过程。

这样的代码有问题吗,就这样看当然没问题(就不要考虑代码运行的效率高不高这么高深的问题了),主要有一个毛病,万一现在来了一个更麻烦的问题,要这个盲人,先从a点去b点打卡,然后再去c点打卡,最后去到d点,那么如果要写成代码,岂不是很长,很麻烦?麻烦的事我是很讨厌的,怕麻烦是人类的天性,所以才会有科技的进步,有了面向对象的出现,所以我们怎么用面向对象减少代码的编写数量?

首先我们来看看这个盲人走路的过程吧,可以发现,不论他去哪,我们只需要叫他往前走,左右拐(一般来说是不需要的考虑往回走的,除非盲人走多了,就不考虑那么多因素先了),然后就是走多少步,还有一个就是每个指令的顺序,比如说在一个总的指令里面,出现了两次往右走,第一次出现在第三次指令,第二次出现在第五次指令,这些就是通过观察提炼出来的这堆指令里面的一些共性,如果我们把这些共性放在一个百宝袋里,每次遇到问题的时候,拿出这个百宝袋,那么是不是足够解决这类型的问题呢?答案肯定是对的,不然怎么写下去。

有了这个百宝袋,就看看怎么用它解决问题吧。假如每次使用这个百宝袋,都要喊一个咒语,这个咒语包含了六个数组(或者数字),前三个分别是往前走、往右走、往左走的步数,后三个分别是他们的次序,那么针对第一个问题,我们要喊的就是10,5,0,1,2,0,喊完之后,盲人就走到终点了(其实也可以在这个百宝袋里面加一个判断语句,看一下盲人每次走完一段路都看看有没有到达目的地,如果是就返回一句"恭喜你走对了",否则就显示"还没到哦"),假如又有一个问题,需要盲人往前走十步,往左走五步,再往前走十步,那么喊的就是(10,10),0,5,(1,3),0,2,不用检查我有没有喊错了,肯定是对的。所以说,一开始一堆又长又啰嗦的代码,通过面向对象,就变成了一个百宝袋,和一句句咒语了。