编程范式 |
核心概念 |
关键突破 |
主要目的 |
代表语言 |
运行机制 |
实现原理 |
常见应用 |
命令式/过程式 (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等 |
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92167 人正在系统学习中 相关资源:软件开发范型(Paradigm)-清华大学郑人杰_殷仁昆教授_《软件工程…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!