炒菜模型——各类编程范式

  版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址

  http://www.cnblogs.com/Colin-Cai/p/9431665.html 

  做者:窗户

  QQ/微信:6679072

  E-mail:6679072@qq.com

  我这里以炒菜为例来给出各类编程范式的示例。html

 

过程式编程sql

 

  生活的经验告诉咱们如下的物理现实,事情是按照时间的顺序一个步骤接一个步骤的发展。编程里有一个范式就模拟了这样的经验,就是过程式编程。编程

  若是如今有一些刚从超市买回来的菜,要吃进肚子,按照过程式编程,能够以下表示:微信

 

    洗()函数式编程

    切()函数

    炒()学习

    吃()人工智能

 

  以上的代码中,括号外为动词,括号内为名词。熟悉过程式的咱们都知道,这里动词对应于函数,名词对应于函数的参数。spa

 

 

函数式编程htm

 

  咱们观察上述的过程式编程对于炒菜这个问题描述,不难发现,这四步的名词都是菜,但动词却不同。

  因而咱们换个思想,咱们所要作的实际上都是不断的改变菜的状态:

  1) 先是经过洗这个动做把菜变成干净的菜,()则获得干净的菜;

  2) 而后干净的菜再经过切这个动做获得切好的菜,注意,这里干净的菜是切这个动做的对象,而(菜)则是获得干净的菜,换句话说是切这个动做的对象是(),因此这里的总体动做是(());

  3) 而后切好的菜经过炒这个动做作成熟的菜,从而到这里的总体工做是((()));

  4) 最后吃的是炒好的菜,总体的动做是(((())))。

 

  因而代码就是

    吃(((())))

 

  以上的代码和过程式编程有很大差异,它突出的是把对象经过动做不断的变换,而这里的动词其实就是函数。因此这种类型的编程叫函数式编程。

 

 

逻辑式编程

 

  逻辑式编程是从另一个思路去编程。它强调的是咱们事先知道一系列事实,而后经过这些事实自动推出合理的结果。

  代码可能长这样:

 

    洗干净的菜 <- (脏的菜)

    切好的菜 <- (洗干净的菜)

    炒好的菜 <- (切好的菜)

    吃菜 <- (炒好的菜)

     吃菜 <- 脏的菜

 

  以上就输出吃菜的步骤,问号是咱们具体须要查询的目的,而其余的都是事先已经知道的事实,这些事实的排列顺序无所谓。

  看看这个像不像人的行为?人先学会一堆看起来彼此独立的知识,而后用这些知识去本身解决遇到的问题,解决问题的过程其实是人脑在已知的知识中不断搜索。

  因此这种编程范式用于早期的人工智能。 

 

 

面向对象编程

  

  面向对象编程并不是是一个孤立的编程范式,它通常和以上几种编程范式绑定在一块儿。咱们最多见的面向对象编程一般主要基于过程式编程。

  面向对象的思想是把处理抽象为数据、方法,再把数据、方法打包抽象为对象,在对象的基础上提取共性抽象为类,这些则为封装,再引入继承、多态等性质来体现类与类之间的关系。

  炒菜总体围绕着菜来,那么咱们能够将围绕菜的一切当作一个对象,用面向对象描述,可能以下:

    

    .()

    .()

    .()

    .()

 

面向对象+函数式

  

  面向对象也会常常和函数式结合在一块儿,明确了程序中的数据对象,而函数则是对象的方法,而对象方法的调用流体现了对象的转换。

    

    .().().().()

 

  上述每一个方法的调用都会返回一个新的对象,从而又可使用方法。这种方始的编程目前很流行。

 

回到计算机

 

  计算机不少东西实际是来源于生活,可是大多时候,咱们在生活中的不少经验是表达的不够规范的。而计算机中咱们要学习的其实是把这些经验形式化、规范化,引入更加抽象化的元素,好比数学,以便反复应用乃至推广。

  上面列举的各类编程范式,思惟的重心彼此都有明显差别,咱们学习不一样的范式实际上也是为了避免同角度的看待问题,以求思路更加宽广。

相关文章
相关标签/搜索