编程范式及其代表语言
编程范式 | 核心概念 | 关键突破 | 主要目的 |
代表语言 | 运行机制 | 实现原理 | 常见应用 |
命令式/过程式 (Imperative/Procedural) | 命令/过程 (Command /Procedure) | 突破单一主程序和非结构化程序的限制 | 模拟机器思维,实现自顶向下的模块设计 |
Fortran/Pascal/C | 命令执行 | 引入逻辑控制和子程序 | 交互式、事件驱动型系统;数值计算等 |
函数式/应用式 (Functional/Applicative) | 函数 (Function) | 突破机器思维的限制 | 模拟数学思维,简化代码 |
Scheme/Haskell | 表达式计算 | 引入高阶函数,将函数作为数据处理 | 微积分计算;数学逻辑;博弈等 |
逻辑式 (Logic) | 断言 (Predicate) | 突破逻辑与控制粘合的限制 | 专注逻辑分析,减少控制代码 |
Prolog/Mercury | 逻辑推理 | 利用推理引擎在已知的事实和规则的基础上进行逻辑推断 | 机器证明;专家系统;自然语言处理;语义网(semantic web);决策分析;业务规则管理等 |
对象式 (Object-Oriented) | 对象 (Object) | 突破数据与代码分离的限制 | 迎合人类认知模式,提高软件的易用性和重用性 |
Smalltalk/Java
| 对象间信息交换 | 引入封装、继承和多态机制 | 大型复杂交互式系统等 |
并发式/并行式 (Concurrent/Parallel) | 进程/线程 (Process/Thread) | 突破串行的限制 | 充分利用资源、提高运行效率、提高软件的响应能力 |
Erlang/Oz
| 进程/线程间通讯与同步 | 引入并行的线程模块以及模块间的通讯与同步机制 | 图形用户界面;I/O处理;多任务系统如操作系统、网络服务器等;实时系统;嵌入式系统;计算密集型系统如科学计算、人工智能等 |
泛型式 (Generic) | 算法 (Algorithm) | 突破静态类型语言的限制 | 提高算法的普适性 |
Ada/Eiffel/C++
| 算法实例化 (多发生于编译期) | 利用模板推迟类型指定 | 普适性算法如排序、搜索等;集合类容器等 |
元编程 (Metaprogramming) | 元程序 (Metaprogram) | 突破语言的常规语法限制 | 减少手工编码,提升语言级别 |
Lisp/Ruby/JavaScript | 动态生成代码或自动修改执行指令 | 利用代码生成或语言内建的反射(reflection)、动态等机制,将程序语言作为数据来处理 | 自动代码生成;定义结构化配置文件;IDE;编译器;解释器;人工智能;模型驱动架构(MDA);领域特定语言(DSL)等 |
切面式 (Aspect-Oriented) | 切面 (Aspect) | 突破横切关注点无法模块化的限制 | 实现横切关注点分离 |
AspectJ/AspectC++
| 在接入点处执行建议 | 通过编织(weaving)将附加行为嵌入主体程序 | 日志输出;代码跟踪;性能监控;异常处理;安全检查;事务管理等 |
事件驱动 (Event-Driven) | 事件 (Event) | 突破顺序、同步的流程限制 | 调用者与被调用者在代码和时间上双重解耦 |
C#/VB.NET | 监听器收到事件通知后做出响应 | 引入控制反转和异步机制 | 图形用户界面;网络应用;服务器;操作系统;IoC框架;异步输入;DOM等 |