[编程范式]以炒菜为例,讲解各种编程范式
过程式编程
生活的经验告诉我们以下的物理现实,事情是按照时间的顺序一个步骤接一个步骤的发展。编程里有一个范式就模拟了这样的经验,就是过程式编程。
如果现在有一些刚从超市买回来的菜,要吃进肚子,按照过程式编程,可以如下表示:
洗(菜)
切(菜)
炒(菜)
吃(菜)
以上的代码中,括号外为动词,括号内为名词。熟悉过程式的我们都知道,这里动词对应于函数,名词对应于函数的参数。
函数式编程
我们观察上述的过程式编程对于炒菜这个问题描述,不难发现,这四步的名词都是菜,但动词却不一样。
于是我们换个思想,我们所要做的实际上都是不断的改变菜的状态:
1) 先是通过洗这个动作把菜变成干净的菜,洗(菜)则得到干净的菜;
2) 然后干净的菜再通过切这个动作得到切好的菜,注意,这里干净的菜是切这个动作的对象,而洗(菜)则是得到干净的菜,换句话说是切这个动作的对象是洗(菜),所以这里的整体动作是切(洗(菜));
3) 然后切好的菜通过炒这个动作做成熟的菜,从而到这里的整体工作是炒(切(洗(菜)));
4) 最后吃的是炒好的菜,整体的动作是吃(炒(切(洗(菜))))。
于是代码就是
吃(炒(切(洗(菜))))
以上的代码和过程式编程有很大差别,它突出的是把对象通过动作不断的变换,而这里的动词其实就是函数。所以这种类型的编程叫函数式编程。
逻辑式编程
逻辑式编程是从另外一个思路去编程。它强调的是我们事先知道一系列事实,然后通过这些事实自动推出合理的结果。
代码可能长这样:
洗干净的菜 <- 洗(脏的菜)
切好的菜 <- 切(洗干净的菜)
炒好的菜 <- 炒(切好的菜)
吃菜 <- 吃(炒好的菜)
? 吃菜 <- 脏的菜
以上就输出吃菜的步骤,问号是我们具体需要查询的目的,而其他的都是事先已经知道的事实,这些事实的排列顺序无所谓。
看看这个像不像人的行为?人先学会一堆看起来彼此独立的知识,然后用这些知识去自己解决遇到的问题,解决问题的过程实际上是人脑在已知的知识中不断搜索。
所以这种编程范式用于早期的人工智能。
面向对象编程
面向对象编程并非是一个孤立的编程范式,它一般和以上几种编程范式绑定在一起。我们最常见的面向对象编程通常主要基于过程式编程。
面向对象的思想是把处理抽象为数据、方法,再把数据、方法打包抽象为对象,在对象的基础上提取共性抽象为类,这些则为封装,再引入继承、多态等性质来体现类与类之间的关系。
炒菜整体围绕着菜来,那么我们可以将围绕菜的一切看成一个对象,用面向对象描述,可能如下:
菜.洗()
菜.切()
菜.炒()
菜.吃()
回到计算机
计算机很多东西实际是来源于生活,但是大多时候,我们在生活中的很多经验是表达的不够规范的。而计算机中我们要学习的实际上是把这些经验形式化、规范化,引入更加抽象化的元素,比如数学,以便反复应用乃至推广。
上面列举的各种编程范式,思维的重心彼此都有明显差异,我们学习不同的范式实际上也是为了不同角度的看待问题,以求思路更加宽广。
转载自:
https://www.cnblogs.com/Colin-Cai/p/9431665.html
转载于:https://www.cnblogs.com/faithfu/p/10144171.html
[编程范式]以炒菜为例,讲解各种编程范式相关推荐
- mysql范式与反范式_给女同事讲解MySQL数据库范式与反范式,她直夸我“技术好”...
1 第一范式 该范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成:每个字段的值都只能是单一值.1971年埃德加·科德提出了第一范式.即表中所有字段都是不可再分的. 1.1 实 ...
- 宁德时代机器人编程开发_全球首例丨可编程的活体机器人已诞生,100%青蛙基因,超级计算机时代,将无所不能?!...
全球首个用细胞做成的活体机器人,已经诞生了! 美国佛蒙特大学计算机科学家和塔夫茨大学生物学家共同创造出100%使用非洲爪蛙DNA的可编程的活体机器人xenobots,这项最新的研究结果已经于1月13日 ...
- python编程中条件句_简单讲解Python编程中namedtuple类的用法
Python的Collections模块提供了不少好用的数据容器类型,其中一个精品当属namedtuple. namedtuple能够用来创建类似于元祖的数据类型,除了能够用索引来访问数据,能够迭代, ...
- Oracle SQL高级编程——分析函数(窗口函数)全面讲解
Oracle SQL高级编程--分析函数(窗口函数)全面讲解 注:本文来源于:<Oracle SQL高级编程--分析函数(窗口函数)全面讲解> 概述 分析函数是以一定的方法在一个与当前行相 ...
- 《编程导论(Java)#183;1.4.1 范式》
这个楼主,是我的学生么?2013年写的! 嗯."编程范式或许是学习不论什么一门编程语言时要理解的最重要的术语".这句话早在2005年出版<Java程序设计>(宋中山,严 ...
- 操作系统之进程调度——优先权法和轮转法(附上样例讲解)
操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...
- 单片机编程软件很简单(八),Keil单片机编程软件辅助功能讲解
单片机编程软件的应用很多,在单片机编程软件的帮助下,我们对单片机的控制才变得如此简单.在市场上流通的单片机编程软件中,小编最为喜爱Keil单片机编程软件.在本文中,小编将为大家介绍Keil单片机编程软 ...
- 以Amazon Braket SDK和QuTrunk为例介绍量子编程框架
概述 在经典计算编程领域,软件框架是一种具有通用软件功能的抽象形式.使用这些软件框架的开发者们可以根据特定的功能需求对框架代码重新改写后,为特 定应用提供定制化的服务.在大数据时代,经典计算的算力在海 ...
- Shell编程之循环语句(详细讲解以及脚本案例)
Shell编程之循环语句(详细讲解以及脚本案例) 文章目录 一.for语句的结构 (一).for语句应用实例 1.示例1--批量添加用户 2.示例2--使用根据IP地址检查主机状态 3.示例3--fo ...
最新文章
- 17个Python小窍门
- 颠覆arXiv等传统论文平台?谷歌大牛强推的Distill进展如何?
- 如何用Python实现多任务版的udp聊天器
- github项目怎么运行_利用 GitHub 从零开始搭建一个博客
- 开源Easydarwin流媒体服务器Windows编译、配置、部署
- HTML5移动端跨平台应用开发框架解析
- Java基础学习总结(146)——开发人员日志实践规范
- 2 image pil 转_「博文连载」RGB888转YCbCr的HDL实现
- .NET简谈特性(代码属性)
- 怎么快速同时给多个 Excel 文档批量添加自定义的文字和图片水印
- 关于新正方教务系统(湖北工程学院)的one day越权漏洞的说明
- CTF Crypto---RSA N不互素
- MindManager2020永久激活版如何绘制思维导图
- 揣着一口袋的阳光满载而归--爱摸鱼的美工(13)
- jQuery播放音乐
- 注意力机制在深度推荐算法中的应用之AFM模型
- socketio单聊,群聊
- 数制转换(二进制、十进制、十六进制转换)
- android游戏引擎汇总
- Arduino 制作PPT红外控制器
热门文章
- 用脑子说话,用心服务
- [unity]使用Unity粒子系统制作跑尘
- city code table广东_【考试|定了!2021年广东高中学考安排来了】招生|高考|普通高中|英语_热点...
- 初入Shell编程,了解规范与变量
- 中国云计算厂商TOP30重磅榜单
- Dynamic Topic Models的Python实现
- linux下安装EJBCA 搭建私有CA服务器----问题处理
- WUSTOJ 1318: 区间的连通性(Java)
- xcode结果边栏_XCode属性面板使用说明
- Ubuntu18右上角输入法图标突然消失,而且无法输入中文