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

《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!

编程范式:

在这里插入图片描述
分成这几类:声明式、命名式、逻辑的、函数式、面向对象的、面向过程的。

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

在这里插入图片描述
基本上来说,就是两大分支,一边是在解决数据和算法,一边是在解决逻辑和控制。

在这里插入图片描述
四大编程范式的类别,以及它们的特性和主要的编程语言。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值