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