admin 管理员组文章数量: 1087139
2024年4月16日发(作者:socket 10053)
2018-09-29 概念性的文章,主要理清思路。
编程范式
概念解读
指令式编程
过程式编程
面向对象编程
声明式编程
函数式编程
元编程
编程范式
编程范型、编程范式或程式设计法(英语:Programming paradigm),(范即模范、典型之意,范式
即模式、方法),是一类典型的编程风格,是指从事软件工程的一类典型的风格。
编程范式一般包括三个方面:学科的逻辑体系(规则范式)、心理认知因素(心理范式)、自然观/世界
观(观念范式)。
注:个人认为,自然观/世界观,首先是第一位的;然后从心理认知因素,逐步完善成学科。也就是
说:之所以使用锤子,因为眼中的世界只有钉子。
简单来说,编程范式是程序员看待程序应该具有的观点。
严谨点说,编程范式应该分为两个方面:语言看待世界的观点、开发者看待世界的观点。
注:“语言看待世界的观点”如 Java 认为一切都是对象,“开发者看待世界的观点”,开发者仍
然能将Java代码写成命令式的风格。在某些语言中,由于使用了强制机制,可能是两者合一的。
编程范式的分类:
命令式编程:重在 how
过程式编程,如 C
对象式编程,如 Java
声明式编程:重在 who/when/where/why/what
函数式编程,如 Haskell
逻辑式编程,如 Prolog
此外,还有一些似是而非的概念,如:响应式编程、面向事件编程、分布式编程等。
注:以上这些,我认为更多的是语言实现功能的机制,而非语言本身。例如:面向事件编程,不管
是GUI还是Node,其实,都与语言本身的关系不大。
一些编程语言专为某个范型设计(如 smalltalk 支持面向对象),有些编程语言支持多种编程范式(如
Javascipt 支持对象、过程、函数)。
【一张来自Wiki的范式图】
M
a
r
k
u
p
l
a
n
g
u
a
g
e
s
(
o
n
l
y
D
a
t
a
s
t
r
u
c
t
u
r
e
s
)
More declarative
Paradigms
Unnamed state
(sequencial or concurrent)
record
Descriptive
declarative
programming
More Imperative
Paradigms
Undeterministic
state
Named
state
procedure
First-order
functional
programming
closure
Functional
programming
T
u
r
i
n
g
c
o
m
p
l
e
t
e
L
a
n
g
u
a
g
e
s
unification
(equality)
Deterministic
logic programming
by-need
synchronization
Lazy
functional
programming
continuation
Continuation
programming
thread
single assignment
Monotonic
dataflow
programming
Declarative
concurrent
programming
name (unforgetable
constant)
Abstract data type
functional
programming
cell (state)
Imperative
programming
search
Relational & logic
programming
Abstract data type
imperative
programming
Shared state
search
port (channel)
Event-loop
programming
Imperative
search
programming
closure
Sequential
object-oriented
programming
Stateful
functional
programming
solver
Constraint (logic)
programming
Lazy
dataflow
programming
Lazy
declarative
concurrent
programming
Functional
nondeterministic
choice
Nonmonotonic
dataflow
programming
Concurrent logic
programming
nondetermined State
thread
Concurrent
constraint
programming
Multi-agent
dataflow
programming
Dataflow and
message passing
thread
Multi-agent
programming
Message-passing
concurrent
programming
thread
Concurrent
object-oriented
programming
Shared-state
concurrent
programming
by-need
synchronisation
Lazy concurrent
constraint
programming
Logic and
constraints
local cell
synchronisation on
partial termination
Functional reactive
programming
Weak synchronous
programming
Active object
programming
Object-capacity
programming
Dataflow and
Message passing
Observable
Nondeterminism
log
Software
transactional
memory (STM)
Shared state
instantaneous
computation
Strong synchronous
programming
概念解读
指令式编程
指令式编程(英语:Imperative programming),是一种描述计算机所需做出的行为的编程范式。 指
令式编程的概念,与计算机硬件的工作方式相近,更容易具体表现于硬件。大部分编程语言都支持指令
式编程。
大部分的高级语言都支持4种基本的语句:
运算语句,一般表现了保存在内存中的数据进行运算并存储的行为。
循环语句,允许反复执行某些语句。
条件分支语句,允许当某些条件成立时执行某些区块,否则就忽略。
无条件分支语句,允许执行顺序转移到程序的其他部分。包括 GOTO 等。
循环、条件分支和无条件分支,都是控制流程。
过程式编程
过程式程序设计(英语:Procedural programming),又称程序式编程、程序化编程,有时被视
为“命令式”编程的同义词。
衍生自结构化编程(Structured programming),主要采用程序调用(procedure call)或函数调用
(function call)的方式进行流程控制。 流程则由包含一系列运算步骤的程序(Procedures),语句
(routines),子程序(subroutines),方法(methods)或函数(functions)来控制。
面向对象编程
面向对象程序编程(英语:Object-oriented programming,缩写:OOP)是一种具有对象概念的编程
范式,同时也是一种程序开发的抽象方法。 面向对象编程将对象作为程序的基本单元,将数据封装其
中,每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象。
面向对象编程的特征:封装、继承、多态。
并不总是同时具有。
面向对象的实现,有几种:基于类(如Java)、基于原型(如Javascript)。
声明式编程
声明式编程,描述目标的性质,而非流程。声明式编程通常被看做是形式逻辑的理论,把计算看做推
导。通常用作解决人工智能和约束满足问题。
声明式编程通过函数、推论规则或项重写规则,描述变量之间的关系。其语言解释器采用了一个固定的
算法,以便从这些关系产生结果。
声明式编程是一个大的概念,其下包含一些有名的子编程范式:
约束式编程: 变量之间的关系是在约束中说明的,定义了问题的解的范围。这些约束然后被应用程序
来求解,以使得每个变量获得一个值,并让最多的约束得到满足。约束式编程经常被用作函数式编
程、逻辑编程甚至命令式编程的补充。
领域专属语言: 一些著名的声明式领域专属语言(DSLs)包括yacc语法分析器,编译说明语言
Make,Puppet管理配置语言,正则表达式和SQL的一些子集(例如Select queries等)。DSLs有
时非常有用,并且不需要是图灵完全的,这往往让其很容易以一种纯宣告式的方式来表达。很多文
本标记语言例如HTML、MXML、XAML和XSLT往往是声明式的。
函数式编程: 函数式编程,特别是纯函数式编程,尝试最小化状态带来的副作用,因此被认为是宣告
式的。大多数函数式编程语言,例如Scheme、Clojure、Haskell、OCaml、Standard ML和
Unlambda,允许副作用的存在。
逻辑式编程: 逻辑式编程语言如Prolog声明关系并且对关系进行提问。同函数式编程一样,许多逻辑
编程语言允许副作用的存在。
函数式编程
函数式编程(英语:functional programming)或称函数程序设计,又称泛函编程,将计算机的运算视
为数学上的函数计算,并且避免使用程序状态以及易变对象。
函数式编程最重要的技术是λ演算(lambda calculus)。而且λ演算的函数可以接受函数作为输出或输
出。
典型的函数式编程語言
纯函数式编程語言
强静态类型:Concurrent Clean,Haskell,Miranda
弱类型:Lazy K
非纯函数式编程語言
强静态类型:F#,ML,OCaml,Scala
强动态类型:Erlang,LISP,LOGO,Scheme,Clojure,Mathematica,R
弱类型:Unlambda
其他函数式编程語言:APL,XSLT
1980年代末期,集函数式编程研究成果於大成的Haskell发布。
元编程
元编程(英語:Metaprogramming),又称超编程,是指某些计算机程序能够编写和操纵其他程序
(或者自身),或者在运行时完成部分本应在编译时完成的工作。
编写元程序的语言称之为元语言。被操纵的程序的语言称之为「目标语言」。 一门编程语言同时也是自
身的元语言的能力称之为「反射」或者「自反」。反射是促进元编程的一种很有价值的语言特性。支持
泛型编程的语言也使用元编程能力。
元编程通常通过两种方式实现。
通过应用程序编程接口(APIs)将运行时引擎的内部信息暴露于编程代码。
另一种是动态执行包含编程命令的字符串表达式。因此,“程序能够编写程序”。虽然两种方式都
能用于同一种语言,但大多数语言趋向于偏向其中一种。
版权声明:本文标题:编程范式 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1713273507a626964.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论