编程范式及其代表语言

编程范式

核心概念

关键突破

主要目的

代表语言

运行机制

实现原理

常见应用

命令式/过程式

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

你可能感兴趣的:(编程)