除了代码,编程还有什么?

还有的是思想

前面说到,代码不是编程的全部,只是砌墙的砖头,那么除了代码,编程还有什么呢,答案,是思想。 究竟是什么东西指导着代码一行行写出来呢,我打算说两种编程里面最广为人知的思想,一种名为面向过程的编程思想,一种名为面向对象的编程思想。我这样抛出来两个名词大家肯定心存疑惑,不要着急,且听我慢慢道来。

面向过程

面向过程的编程思想其实是比较容易理解的,因为它所遵守的就是我们解决问题时候的基本思路,只不过更加精确和具体。 就像它的名字一样,面向过程的编程思想就是以过程为导向的,一堆数据,该怎么处理就怎么处理,一项一项来,有先有后。就像那个搞笑的问题——如何把大象放到冰箱里一样,面向过程就是那样思考并解决问题的,所以这里我们也可以给出我们很细化的一个答案的版本

  1. 先打开冰箱门
  2. 选择一个可以放下大象的格子
  3. 然后托起大象
  4. 把大象放到之前确定的格子内
  5. 关上冰箱 这种思想指导下的代码相对来说是比较容易读的,因为它完全依照了人思考问题的方法,按照逻辑一步一步地执行下去即可,所以这种编程思想比较适合编程的初学者,同时也比较适合解决一些数学和简单的控制问题。

但在这里也可以提一些其他的一些编程本身的特性,也可以算作面向过程的编程方法的特点。

对于电脑而言,它最擅长的事情就是计算了,尤其是重复性计算,我们只要指定它重复的次数,它就可以一次又一次的重复运行我们让它运行的东西。这其实是计算的一种很基础的特性,那就是循环,循环就是让计算机把一段指令重复执行我们指定的次数,或许你听起来没什么,但是循环才是计算机强大的根源之一,正是因为计算机可以循环不断地一遍又一遍的执行程序,才极大地提高了计算效率、解放了人们的双手。

再有就是条件判断,这也是编程中很基本的一部分,简单来说,就是让计算机对于运行的数据作判断,如果满足条件采取一种措施,不满足采取另一种措施,条件判断使得人们可以对数据作出筛选,是代码的重要组成部分。

面向对象

相比之下,面向对象的编程可能大家会摸不着头脑了,但这是现今非常主流的一种编程思想,也是大型软件开发的主要指导思想。

那到底何为面向对象呢,难道是着自己的男/女朋友编程?哈哈哈哈,肯定不是啦。要解释这个,首先要举一些例子,比如说,我们人,首先我们是动物,为什么说我们是动物,因为,我们可以动,我们具备一切动物都有的特征,同时,我们是哺乳动物,为什么,因为我们的繁殖需要哺乳,再往下,我们还可以继续把人类想更具体的方向划分,那这种划分是如何来的呢?可以说是对同一种事物的共有属性的抽象和概括,就像我们说的动物,这个词所指代的东西就是我们对所有会动的自然界的生物的共有属性的概况,其他的划分,像哺乳动物也是这样划分的。

而在编程界也学习和继承了这种思想,面向对象的编程思想就认为,世界上的万事万物都可以被抽象成某一个类(class)——就像我们划分出动物一样,然后这个类就有着一切动物应当有的属性,会动,会吃…而当我们提到一些更具体的,比如说哺乳动物,它们的范围比动物更小,但是所有动物有的特点它们都有,所以我们便把哺乳动物叫做动物的继承,在拥有动物的所有属性的基础上,还拥有了自己独特的属性,同理,猫科动物也是哺乳动物的一个继承。

这反映到了代码中,就是选择自己要用的一类事物,然后抽象出这类事物的共有特征,但其实并不需要把它所有的属性都列出来,只需要列出我们会用到的就行了,随便举个例子,比如钥匙类,每把钥匙都有自己的材质,大小,重量,对应的锁的类型,但我们现在是为一套房子设计钥匙,那材料、重量就没有那么重要,相比之下,一把钥匙对应于哪个门上的锁则更加重要,所以要再加个对应的门的位置的属性,这时候我们就可以设计出一个钥匙类了。

这时我们就要讨论下一个问题了,那就是,我们设计出来的这个类是什么?为什么这样问,因为想想看,这样的一钥匙类,它是钥匙本身吗,不是,为什么不是,因为我们说它有这个属性时,其实是在说它应该有 xx 属性,我们是在制定一个规则,它规定了一个合乎我们要求的钥匙应该是什么样子的,就像我们向电脑这个工匠提出我们的要求,那我们怎样才能获得一把钥匙呢?

可以想象,我们想要在计算机中获得一把“真实”的钥匙——这把钥匙满足我们制定的所有规则也就是拥有这个类的所有属性,在编程中,我们把这把钥匙称为由这个钥匙类所定义的对象,其实际过程就是在硬盘上开辟一块空间来存储这把所谓的钥匙,假如人是一个类的话,那么我质子就是这个人类下的一个对象,我在地球这个大硬盘里占据着属于我的物理空间,所以,这被称为面向对象的编程方法,而不是面向“对象”的编程。

说到这里,我相信大家应该知道什么是类和对象了,但不知道你们是否有疑问——我在这里说了这么多,有什么用呢,我在这里再怎么造对象又造不出真的对象,假的对象在这里也没什么卵用啊,“对象”虽然是没有的,但是我们造出来的对象其实是很有用的,只是我没还没讲完。

动物会动、会吃、可以看,这些都是动物可以做的事情,因此,当我们在编写一个动物类的时候,这个类不仅应该包括我们对它的限定——也就是其自身的属性,还应该包括它能做的事情,在编程中,我们把能做的事情成为方法或者说函数(method/function),一个方法就代表这个类所规定的对象可以做的一件事情。所以,假如我们写了人这样一个类,那我们就可以为其添加走(walk)、吃(eat)、睡觉(sleep)之类的方法,而如果我们写的是一个鸟类,那么它就可以有飞(fly)、啄(peck)之类的方法。

不知道大家有没有感觉到,这种编程的感觉就像造物主在构建自己的世界一样,虽然说的有些夸张,但其实也近似,只不过,在实际的开发过程中,与其说造世界,其实不如说是在造一个结构复杂、精密的机器,为了造出这台机器,我们需要为它制作许多零件供使用,而无论是要造这些零件,要编写一个个的类,然后通过这些类去生成任意数量的你所想要的这些零件去拼装最终的那台机器,假如这台机器可以良好地运转,并解决了我们最初想要解决的问题,那就算功德圆满了。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
May Breeze Bless U
Built with Hugo
Theme Stack designed by Jimmy