约束编程

科技工作者之家  |   2020-11-17 17:44

约束编程(Constraint programming)是一种编程典范,在这种编程范式中,变量之间的‘关系’是以约束的形式陈述(组织)的。这

简介约束编程(Constraint programming)是一种编程典范,在这种编程范式中,变量之间的‘关系’是以约束的形式陈述(组织)的。这些‘关系(约束)’和命令式编程语言元素不同的是:它们并非明确说明了要去执行的步骤中的某一步,而是规范其解的一些属性。这样看来,约束编程是一种声明式的编程范式。1

编程范型编程范型编程范式程序设计法(英语:Programming paradigm),(即模范、典范之意,范式即模式、方法),是一类典型的编程风格,是指从事软件工程的一类典型的风格(可以对照方法学)。如:函数式编程、程序编程、面向对象编程、指令式编程等等为不同的编程范型。

编程范型提供了(同时决定了)程序员对程序执行的看法。例如,在面向对象编程中,程序员认为程序是一系列相互作用的对象,而在函数式编程中一个程序会被看作是一个无状态的函数计算的序列。

正如软件工程中不同的群体会提倡不同的“方法学”一样,不同的编程语言也会提倡不同的“编程范型”。一些语言是专门为某个特定的范型设计的(如Smalltalk和Java支持面向对象编程,而Haskell和Scheme则支持函数式编程),同时还有另一些语言支持多种范型(如Ruby、Common Lisp、Python和Oz)。

很多编程范型已经被熟知他们禁止使用哪些技术,同时允许使用哪些。例如,纯粹的函数式编程不允许有副作用;结构化编程不允许使用goto。可能是因为这个原因,新的范型常常被那些习惯于较早的风格的人认为是教条主义或过分严格。然而,这样避免某些技术反而更加证明了关于程序正确性——或仅仅是理解它的行为——的法则,而不用限制程序语言的一般性。

编程范型和编程语言之间的关系可能十分复杂,由于一个编程语言可以支持多种范型。例如,C++设计时,支持过程化编程、面向对象编程以及泛型编程。然而,设计师和程序员们要考虑如何使用这些范型元素来构建一个程序。一个人可以用C++写出一个完全过程化的程序,另一个人也可以用C++写出一个纯粹的面向对象程序,甚至还有人可以写出杂揉了两种范型的程序。1

例子结构化编程对比非结构化编程

命令式编程对比宣告式编程

消息传递编程对比命令式编程

程序编程对比函数式编程

Value-level programming对比Function-level programming

流程驱动编程对比事件驱动编程

纯量编程对比阵列编程

基于类编程对比基于原型编程(在面向对象编程的上下文中)

Rule-based programming对比Constraint programming(在逻辑编程的上下文中)

基于组件编程(如OLE)

面向方面编程(如AspectJ)

符号式编程(如Mathematica)

面向表格编程(如Microsoft FoxPro)

管道编程(如Unix命令中的管道)

Post-object programming

面向主题编程

自省编程或称反射编程1

本词条内容贡献者为:

王海侠 - 副教授 - 南京理工大学