博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
炒菜模型——各种编程范式
阅读量:5936 次
发布时间:2019-06-19

本文共 1567 字,大约阅读时间需要 5 分钟。

  版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址  http://www.cnblogs.com/Colin-Cai/p/9431665.html   作者:窗户  QQ/微信:6679072  E-mail:6679072@qq.com

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

 

过程式编程

 

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

  如果现在有一些刚从超市买回来的菜,要吃进肚子,按照过程式编程,可以如下表示:

 

    洗()

    切()

    炒()

    吃()

 

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

 

 

函数式编程

 

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

  于是我们换个思想,我们所要做的实际上都是不断的改变菜的状态:

  1) 先是通过洗这个动作把菜变成干净的菜,()则得到干净的菜;

  2) 然后干净的菜再通过切这个动作得到切好的菜,注意,这里干净的菜是切这个动作的对象,而(菜)则是得到干净的菜,换句话说是切这个动作的对象是(),所以这里的整体动作是(());

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

  4) 最后吃的是炒好的菜,整体的动作是(((())))。

 

  于是代码就是

    吃(((())))

 

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

 

 

逻辑式编程

 

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

  代码可能长这样:

 

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

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

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

    吃菜 <- (炒好的菜)

     吃菜 <- 脏的菜

 

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

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

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

 

 

面向对象编程

  

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

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

  炒菜整体围绕着菜来,那么我们可以将围绕菜的一切看成一个对象,用面向对象描述,可能如下:

    

    .()

    .()

    .()

    .()

 

 

回到计算机

 

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

  上面列举的各种编程范式,思维的重心彼此都有明显差异,我们学习不同的范式实际上也是为了不同角度的看待问题,以求思路更加宽广。

转载于:https://www.cnblogs.com/Colin-Cai/p/9431665.html

你可能感兴趣的文章
jQuery操作数组函数
查看>>
Hive中的所有Join
查看>>
CM cluster 之间trunk
查看>>
SqlServer系列笔记——字符串函数
查看>>
军哥讲IE之道,如何考取IE的第一步:笔试
查看>>
SVN源码服务器搭建-详细教程
查看>>
SSL/TLS协议运行机制的概述
查看>>
openstack Nova、Cinder、Neutron资源配额设置
查看>>
三种备份方式的区别
查看>>
创建 OVS flat network - 每天5分钟玩转 OpenStack(134)
查看>>
我的友情链接
查看>>
linux 常用基本命令之 touch cp file rm mv cat 的介绍与使用
查看>>
Ext.grid.gridpanel
查看>>
JSRender模板一
查看>>
Oracle 11g 64位,PLSQL Developer无法登录
查看>>
清理mysql-bin日志
查看>>
我们如何了解技术的真相?
查看>>
Rails开发细节《八》Rails应用的安全
查看>>
ruby笔记《二》类定义
查看>>
Javascript实例:Select的OnChange()事件
查看>>