Atitit 编程范式 体系树

目录

1. 编程范型、编程范式或程序设计法(英语:Programming paradigm) 1

2. 编程范式 2

3. 声明式编程体系树 3

3.1. 声明式(对比:指令式,,主要包括 函数式,逻辑式编程) 3

3.2. 声明式编程:表达与运行分离 4

3.3. 不仅表达当下,还表达未来 4

3.4. 不仅表达自己有的,还表达自己没有的 4

4. 元编程 5

4.1. 包括宏,模板, 5

4.2. 反射式 5

5. 结构化(过程 块结构 oo)vs 非结构化(阵列编程) 5

6. Other 6

6.1. 例子[编辑] 6

  1. 编程范型编程范式程序设计法(英语:Programming paradigm

,(即模范、典范之意,范式即模式、方法),是一类典型的编程风格,是指从事软件工程的一类典型的风格(可以对照方法学)。如:函数式编程、过程式编程、面向对象编程、指令式编程等等为不同的编程范型。

编程范型提供了(同时决定了)程序员对程序执行的看法。例如,在面向对象编程中,程序员认为程序是一系列相互作用的对象,而在函数式编程中一个程序会被看作是一个无状态的函数计算的序列。

正如软件工程中不同的群体会提倡不同的“方法学”一样,不同的编程语言也会提倡不同的“编程范型”。一些语言是专门为某个特定的范型设计的(如Smalltalk和Java支持面向对象编程,而Haskell和Scheme则支持函数式编程),同时还有另一些语言支持多种范型(如Ruby、Common Lisp、Python和Oz)。

很多编程范型已经被熟知他们禁止使用哪些技术,同时允许使用哪些。例如,纯粹的函数式编程不允许有副作用[1];结构化编程不允许使用goto。可能是因为这个原因,新的范型常常被那些习惯于较早的风格的人认为是教条主义或过分严格。然而,这样避免某些技术反而更加证明了关于程序正确性——或仅仅是理解它的行为——的法则,而不用限制程序语言的一般性。

编程范型和编程语言之间的关系可能十分复杂,由于一个编程语言可以支持多种范型。例如,C++设计时,支持过程化编程、面向对象编程以及泛型编程。然而,设计师和程序员们要考虑如何使用这些范型元素来构建一个程序。一个人可以用C++写出一个完全过程化的程序,另一个人也可以用C++写出一个纯粹的面向对象程序,甚至还有人可以写出杂揉了两种范型的程序。

  1. 编程范式
  • 指令式(对比:声明式)

    • 过程式
  • 结构化(对比:非结构化)
    • 块结构
    • 模块化
    • 递归
    • 面向对象
      • 基于类
      • 基于原型
      • 多态性
      • 根据关注点分离:
        • 面向方面
        • 面向角色
        • 面向主题
      • 并发面向对象
  • 非结构化(对比:结构化)
    • 阵列
  • 声明式(对比:指令式)
    • 函数式

      • 纯函数式
    • 数据流程
      • 基于流程
      • 响应式
        • 函数式响应
    • 逻辑
      • 溯因逻辑
      • 回答集编程
      • 并发逻辑
      • 归纳逻辑
      • 函数式逻辑
    • 约束
      • 约束逻辑

        • 并发约束逻辑
    • 本体
  • 元编程
    • 模板
    • 反射式
      • 面向属性
  • 泛型
  • 面向语言
    • 领域特定
  1. 声明式编程体系树
  1. 声明式编程:表达与运行分离

如果将命令式编程看作是一种“忠实的”表达(表达了就要执行,而且所表达的正是要执行的内容),那么声明式编程就是相当不老实的表达。

表达了可以不执行,甚至没法执行

声明式编程中延迟计算是一个常见的特性,它极大增加了逻辑组织结构的灵活性。比如在WebMVC架构中

  1. 不仅表达当下,还表达未来

现代编程语言中标配的Promise对象,它表示了未来可以获得的一个值,当我们还未真正得到这个值的时候,就可以把它作为返回值返回,并在程序中作为参数传来传去。

而在传统的命令式编程概念中,函数的返回就表示执行完毕,如果是异步执行,则只能通过回调函数获取通知,在概念层面上我们并无法直接定义和使用“未来的值”。

  1. 不仅表达自己有的,还表达自己没有的

未来的值虽然现在未来,但毕竟未来可期。但如果根本不知道未来是否会来,那能否给它分配一个表达形式呢?

在groovy语言中,提供了类似Ruby的methodMissing机制

整个软件开发生态环境正在不断向着声明式和命令式水乳交融的方向发展。以前,为了突出声明式的部分,我们会选择模板语言,即在描述性内容中嵌入少量的命令式控制逻辑。而在今天,出现了JSX这种直接将描述性内容嵌入到命令式上下文中的技术。更进一步,类似SwiftUI这种基于通用程序语言直接实现声明式表达的技术正快步向我们走来

  1. 元编程 

    1. 模板
    2. 反射式
    • 面向属性

 

  1. 结构化(过程 块结构 oo)vs 非结构化(阵列编程)
  • 结构化(对比:非结构化)

    • 块结构
    • 模块化
    • 递归
    • 面向对象
      • 基于类
      • 基于原型
  • 非结构化(对比:结构化)

包括 阵列编程

在计算机科学中,阵列编程指称允许向作为整体的一组数值同时应用运算操作的一种解决方案。这种方案经常用于科学和工程上的各种场合(settings)。

  1. Other

    1. 例子[编辑]
  • 结构化编程对比非结构化编程

大部分高端程序语言都期望用户进行结构化编程

  •  
  • 命令式编程对比宣告式编程
  • 消息传递编程对比命令式编程
  • 步骤式编程对比函数式编程

后者的着名例子是Haskell

  •  
  • Value-level programming对比Function-level programming
  • 流程驱动编程对比事件驱动编程
  • 纯量编程对比阵列编程

后者的例子包括 R语言 、 MATLAB 及 Perl Data Language 等

  •  
  • 基于类编程对比基于原型的编程(面向对象编程的流派)
  • 规则式编程及以其为基础的约束逻辑编程(逻辑编程的流派)

例子: Prolog

  •  
  • 基于组件编程

例子:OLE

  •  
  • 面向方面编程

例子:AspectJ

  •  
  • 符号式编程

例子:Mathematica、Maxima

  •  
  • 面向表格编程

例子:Microsoft FoxPro

  •  
  • 管道编程

例子:Unix命令中的管道

  •  
  • Post-object programming
  • 面向主题编程
  • 自省编程(或称反射编程)

Ref

编程范式,程序员的编程世界观 -- 简明现代魔法

什么是声明式编程 - 知乎

Atitit 编程范式 体系树 目录 1. 编程范型、编程范式或程序设计法(英语:Programming paradigm) 1 2. 编程范式 2 3. 声明式编程体系树 3 3.1. 声明式(对相关推荐

  1. 《七周七语言:理解多种编程范型》书评整理

    任何一个想在程序开发这条路上走远点的人都应当多了解几门语言,多接触一些编程泛型,才能打开眼界,提高自己. 国内绝大多数程序员可能就知道个OOP,借着javascript的兴起可能有小部分人能够对原型有 ...

  2. “主要的编程范型”及其语言特性关系(多图)

    "主要的编程范型"(The principal programming paradigms)这幅图,其实出现得不算早,作者在2007年完成了该图的1.0版,到2008年更新至v1. ...

  3. python支持的编程范式有_转并修改:Python编程范式(Programming Paradigm)

    编程范式(Programming Paradigm)是某种编程语言典型的编程风格或者说是编程方式.随着编程方法学和软件工程研究的深入,特别是OO思想的普及,范式(Paradigm)以及编程范式等术语渐 ...

  4. 深入剖析Kubernetes--第五章:声明式API与Kubernetes编程范式

    声明式API与Kubernetes编程范式 Istio项目 Dynamic Admission Control 在 Kubernetes 项目中,当一个 Pod 或者任何一个 API 对象被提交给 A ...

  5. Linux系统编程:获取指定目录下指定文件类型的数量

    分析 编程实现对指定目录下的指定文件类型数量的统计.这里涉及到对目录文件的打开和对目录文件下的文件的遍历. 这里主要用的2个库函数,打开目录的 opendir函数,readdir函数.对这2个库函数不 ...

  6. 【note】编程范式(编程范型)的含义和种类,多范式编程语言

    范型 / 范式 = 模式.方法 编程范式 / 编程范型 = 编程的模式.风格 编程范式主要包括:结构化编程.面向对象编程.过程式(程序式)编程.函数式编程(泛函编程).指令式(命令式)编程.泛型编程. ...

  7. html5游戏编程核心技术与实战目录

    html5游戏编程核心技术与实战目录 概述 将书上的代码手工敲一遍,另外由于书出版比较早,有些地方的写法已经过时了,做了一些修改.比如var 改为了let,div上面的属性 align="c ...

  8. VS2010/MFC编程入门教程之目录和总结

    写这套VS2010/MFC编程入门教程历时八个月,时间比较长,都是鸡啄米在工作之余加班加点完成的.虽然有点累,但看到有这么多人过来支持鸡啄米,很是值得. 写每节教程我都力求讲明白,深入浅出的阐述每个知 ...

  9. VS2010/MFC 编程入门教程之目录和总结

    [原地址]:http://www.jizhuomi.com/software/257.html 鸡啄米这个网站不是很了解,但确实有很多好文章.自己工作需要,在vs2010 下学习mfc的知识,发现了这 ...

  10. 功能性,声明式和命令式编程[关闭]

    功能,声明和命令式编程这两个术语是什么意思? #1楼 命令式 - 表达式描述要执行的动作序列(关联) 声明性 - 表达式是有助于程序行为的声明(关联,交换,幂等,单调) 功能 -词汇具有值作为唯一的影 ...

最新文章

  1. 数字类 default 0和 default 0_0秒入住 无感体验 悉点科技引领酒店数字化大潮
  2. confluence 5 mysql_Centos 6.5 安装 Atlassiana Crowd+JIRA+Confluence(Wiki)之一 数据库篇(MySQL5.1)...
  3. vc 中对对话框的几种操作
  4. Hibernate框架之入门配置
  5. 4399元!苹果2020年终极新品上市就遇麻烦:付款3个月才能到货
  6. java token身份认证_java – 基于Spring Security Token的身份验证
  7. 日志分析(shell脚本)
  8. w ndows10怎么没体验指数,Win10没有“Windows体验指数”功能怎么进行系统评分【图文】...
  9. spring事务源码-代理对象生成过程解析
  10. LLVM语言参考手册之标识符、类型与常量
  11. 使用国产化的TongWeb服务器使用手册
  12. 华硕Android原始密码,华硕(ASUS)路由器默认密码是多少? | 192路由网
  13. 2015 年全国电赛题——风力摆控制系统(B 题)
  14. 如何创建GOOGLE ADS的MCC经理账户,有什么好处?
  15. el-menu菜单下划线解决办法
  16. 边框border-radium属性
  17. win7如何开启无线网卡服务器,大神教你win7无线网卡怎么设置wifi
  18. mysql 8.0 新特性 统计直方图 优化执行计划SQL查询
  19. 机器人流程自动化(RPA)术语表
  20. 关于开通《四川省建设工程计价咨询网上预约系统》的通知

热门文章

  1. mysql 5.6一主两从_Centos7 下配置mysql5.6主从复制实例(一主两从)
  2. 算法 python_最全 Python 算法实现资源汇总!
  3. java 当前时间 long_java 获取当前的日期、时间, 日期、字符串、long之间的相互转换...
  4. java关于排版的说法正确是_Java代码规范--排版,命名---以及一个例子
  5. 1、http网络编程——URL、CURL、CURLcode和curl_slist
  6. 使用Automake,Autoconf生成Makefile
  7. java~modelMapper需要注意的几点
  8. 项目cookie优化之cookie数量限制和多页面共享污染数据问题
  9. iOS贝塞尔曲线(UIBezierPath)的基本使用方法
  10. linux下淘宝安全控件问题