编程范式学习总结-编程本质&逻辑编程


《Algorithms + Data Structures = Programs》
算法 + 数据结构 = 程序

Algorithm = Logic + Control

任何算法都会有两个部分, 一个是 Logic 部分,这是用来解决实际问题的。另一个是 Control 部分,这是用来决定用什么策略来解决问题。Logic 部分是真正意义上的解决问题的算法,而 Control 部分只是影响解决这个问题的效率。程序运行的效率问题和程序的逻辑其实是没有关系的。我们认为,如果将 Logic 和 Control 部分有效地分开,那么代码就会变得更容易改进和维护。

编程的本质
Programs = Algorithms + Data Structures
Algorithm = Logic + Control
第一个表达式倾向于数据结构和算法,它是想把这两个拆分,早期都在走这条路。他们认为,如果数据结构设计得好,算法也会变得简单,而且一个好的通用的算法应该可以用在不同的数据结构上。

第二个表达式则想表达的是数据结构不复杂,复杂的是算法,也就是我们的业务逻辑是复杂的。我们的算法由两个逻辑组成,一个是真正的业务逻辑,另外一种是控制逻辑。程序中有两种代码,一种是真正的业务逻辑代码,另一种代码是控制我们程序的代码,叫控制代码,这根本不是业务逻辑,业务逻辑不关心这个事情。

Program = Logic + Control + Data Structure

Control 是可以标准化的。比如:遍历数据、查找数据、多线程、并发、异步等,都是可以标准化的。
因为 Control 需要处理数据,所以标准化 Control,需要标准化 Data Structure,我们可以通过泛型编程来解决这个事。
而 Control 还要处理用户的业务逻辑,即 Logic。所以,我们可以通过标准化接口 / 协议来实现,我们的 Control 模式可以适配于任何的 Logic。
正则表达式的高效算法的论文 Regular Expression Matching Can Be Simple And Fast

有效地分离 Logic、Control 和 Data 是写出好程序的关键所在!

代码复杂度的原因:

业务逻辑的复杂度决定了代码的复杂度;
控制逻辑的复杂度 + 业务逻辑的复杂度 ==> 程序代码的混乱不堪;
绝大多数程序复杂混乱的根本原因:业务逻辑与控制逻辑的耦合。
分离 control 和 logic:
State Machine
状态定义
状态变迁条件
状态的 action
DSL – Domain Specific Language
HTML,SQL,Unix Shell Script,AWK,正则表达式……

编程范式
面向对象:委托、策略、桥接、修饰、IoC/DIP、MVC……
函数式编程:修饰、管道、拼装
逻辑推导式编程:Prolog
编程的本质:
Logic 部分才是真正有意义的(What)
Control 部分只是影响 Logic 部分的效率(How)
逻辑编程范式
逻辑编程的要点是将正规的逻辑风格带入计算机程序设计之中。
逻辑编程建立了描述一个问题里的世界的逻辑模型。
逻辑编程的目标是对它的模型建立新的陈述。
通过陈述事实——因果关系。
程序自动推导出相关的逻辑。
Prolog Tutorial
Learn Prolog Now!

编程范式:

分成这几类:声明式、命名式、逻辑的、函数式、面向对象的、面向过程的。

中间两个声明式编程范式(函数式和逻辑式)偏向于你定义要什么,而不是怎么做。
而两边的命令式编程范式和面向对象编程范式,偏向于怎么做,而不是要做什么。

基本上来说,就是两大分支,一边是在解决数据和算法,一边是在解决逻辑和控制。


四大编程范式的类别,以及它们的特性和主要的编程语言。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值