約束編程(Constraint programming)是一種編程典範,在這種編程範式中,變數之間的‘關係’是以約束的形式陳述(組織)的。
基本介紹
- 中文名:約束編程
- 外文名:Constraint programming
簡介,編程范型,例子,
簡介
約束編程(Constraint programming)是一種編程典範,在這種編程範式中,變數之間的‘關係’是以約束的形式陳述(組織)的。這些‘關係(約束)’和命令式程式語言元素不同的是:它們並非明確說明了要去執行的步驟中的某一步,而是規範其解的一些屬性。這樣看來,約束編程是一種聲明式的編程範式。
編程范型
編程范型、編程範式或程式設計法(英語:Programming paradigm),(范即模範、典範之意,範式即模式、方法),是一類典型的編程風格,是指從事軟體工程的一類典型的風格(可以對照方法學)。如:函式式編程、程式編程、面向對象編程、指令式編程等等為不同的編程范型。
正如軟體工程中不同的群體會提倡不同的“方法學”一樣,不同的程式語言也會提倡不同的“編程范型”。一些語言是專門為某個特定的范型設計的(如Smalltalk和Java支持面向對象編程,而Haskell和Scheme則支持函式式編程),同時還有另一些語言支持多種范型(如Ruby、Common Lisp、Python和Oz)。
很多編程范型已經被熟知他們禁止使用哪些技術,同時允許使用哪些。例如,純粹的函式式編程不允許有副作用;結構化編程不允許使用goto。可能是因為這個原因,新的范型常常被那些習慣於較早的風格的人認為是教條主義或過分嚴格。然而,這樣避免某些技術反而更加證明了關於程式正確性——或僅僅是理解它的行為——的法則,而不用限制程式語言的一般性。
編程范型和程式語言之間的關係可能十分複雜,由於一個程式語言可以支持多種范型。例如,C++設計時,支持過程化編程、面向對象編程以及泛型編程。然而,設計師和程式設計師們要考慮如何使用這些范型元素來構建一個程式。一個人可以用C++寫出一個完全過程化的程式,另一個人也可以用C++寫出一個純粹的面向對象程式,甚至還有人可以寫出雜揉了兩種范型的程式。
例子
- 結構化編程對比非結構化編程
- 命令式編程對比宣告式編程
- 訊息傳遞編程對比命令式編程
- Value-level programming對比Function-level programming
- 流程驅動編程對比事件驅動編程
- 純量編程對比陣列編程
- 基於類編程對比基於原型編程(在面向對象編程的上下文中)
- Rule-based programming對比Constraint programming(在邏輯編程的上下文中)
- 基於組件編程(如OLE)
- 符號式編程(如Mathematica)
- 面向表格編程(如Microsoft FoxPro)
- 管道編程(如Unix命令中的管道)
- Post-object programming
- 面向主題編程
- 自省編程或稱反射編程