drools技巧 宣告式關係程式設計

2021-08-29 08:42:18 字數 1803 閱讀 7430

宣告式關係程式設計

.(討論:odbms

有時是比o/r對映更好的選擇

)引申而來

物件導向的深層圖模型——pojo規範,難以通過宣告進行推論,雖然它可以在命令式程式設計中有良好表現。隨著wsc完成描述邏輯的標準化定義owl-dl(一種面向語義web的知識表示標記語言,具有較強的知識表達能力並適合大規模應用的推理效率)並將其與宣告式推論系統如drools結合(將在4.0之後增加基於模型的描述邏輯),你已經在應用開發方面有了一種更有力的方式(雖然可能沒有框架式/子系統式開發)——不考慮owl-full,它是一種演習,並且rdf(資源描述框架)三元組是不合適的, 但可以幸運的被考慮成一種傳輸機制。宣告式關係程式設計顯然有一種更接近於1對1的資料庫對映。[譯者注:這段話涉及owl的理論定義,為了更好的理解,請翻閱

看乙個我們提供的簡單示例conways game of life(將很快被更新到規則流,代替agenda group,使其更具有宣告性)。在這個例子中,我們有乙個巨大的nxn的**單元物件,之前的方法是對每一格cell有乙個圍繞在它周圍的cell的乙個hashset。要計算圍繞在周圍的死亡/生存單元格的數量,只能通過對每乙個cell的hashset進行命令式的迭代。這將產生重複多餘的工作,因為我們不知道那裡有/沒有變化,我們可以進行跟蹤,但是接著會帶來更多的用於跟蹤的命令式**。更新的conways例子將使用關係方法,沒有巢狀的物件(雖然仍然沒有dl,它在4.0中提供),代替的是我們使用乙個neighbour類對每乙個圍繞的cell進行雙向的關聯;這意味著我們簡單的宣告想要它對死亡/生存的cell進行跟蹤,系統將根據它對關係的理解以及什麼有/沒有變化的情況,為我們完成剩下的工作。

rule "calculate live"

agenda-group "calculate"

lock-on-active

when

thecell: cell(cellstate == cellstate.live)

neighbor(cell == thecell, $neighbor : neighbor)

then

$neighbor.setliveneighbors( $neighbor.getliveneighbors() + 1 );

$neighbor.setphase( phase.evaluate );

modify( $neighbor );

end

rule "calculate dead"

agenda-group "calculate"

lock-on-active

when

thecell: cell(cellstate == cellstate.dead)

neighbor(cell == thecell, $neighbor : neighbor )

then

$neighbor.setliveneighbors( $neighbor.getliveneighbors() - 1 );

$neighbor.setphase( phase.evaluate );

modify( $neighbor );

end

我也建議你看一下"register neighbor"規則,你可以了解neighbour關係怎樣被設定宣告,開發在cell中的column與row欄位的叉集。

這只是乙個使用建議邏輯的簡單例子,你可以將這些關係開發的更多,尤其工作在資料集和一階邏輯中的'collect', 'accumulate' ,'forall'情況時。更多的資訊請看what's new in jboss rules 4.0

,它會在下個月中旬發布。

宣告式程式設計與命令式程式設計

先統一一下概念,我們有兩種程式設計方式 命令式和宣告式。我們可以像下面這樣定義它們之間的不同 命令式程式設計 命令 機器 如何去做事情,告訴它如何去做。宣告式程式設計 告訴 機器 你想要的是什麼,讓機器自己去做。宣告式程式設計和命令式程式設計的 例子 舉個簡單的例子,假設我們想讓乙個陣列裡的數值翻倍...

宣告式程式設計和命令式程式設計

宣告式程式設計是一種程式設計正規化,它關注的是你要做什麼 what 而不是如何做 how 也就是你只需要告訴 機器 你想要的是什麼 what 讓機器想出如何去做 how 舉例 想要顯示乙個p標籤 this is a textp 查詢學生中年齡大於18對的學生的資訊 select from stude...

命令式程式設計和宣告式程式設計區別

我是個新手,雖然在某個領域還算可以,但是在net,還算個新手。還需要向各位學習。今天做了個例子,是把相同地域的學生進行分組。想看看2種方式的區別,有很多不懂地方,還要向大俠請教。有個方法是別人幫我編寫的,還有些不懂。請教下。例項 1 public class student24 public str...