開發式編程,聲明式編程和產生式編程

來源:互聯網
上載者:User

Programmatic programming, Declarative programming and Generative programming
開發式編程,聲明式編程和產生式編程

Author:Anders小明
同步自:http://www.blogjava.net/AndersLin/archive/2006/08/31/66968.html

開發式編程是編碼的,如:Java, C#
聲明式編程是解析的,如:ANT(spring等的xml不一樣,它們是靜態描述型的,不那麼verb)
產生式編程是產生的,如:AOP(AspectJ),DSL(Drools)

開發式編程是彙總的,
聲明式編程是聲明的,
產生式編程是組合的,

聲明式編程和產生式編程看起來很像:
1.聲明式編程需要一個解析器,產生式編程需要一個產生器;
2.產生式編程(正統的)需要一個編輯器,聲明式編程也可以有(如jbpm)。
3.產生式編程有一個元模型,聲明式編程也可以定義。

本質的區別在於:
1.產生式是自底向上,而聲明式是自定向下。即產生式編程用的思路是組合概念(用小粒度的概念組合產生大粒度的概念),
而聲明式編程是解析概念,用統一的概念來理解,把不同差異性交由具體程式解析。
2.聲明式編程的編輯器產生的是xml檔案,將由架構程式解析;而產生式產生程式碼,不做解析運行。
3.由於1,導致中繼資料模型不一樣,產生式是相對細粒度的,而聲明式是粗粒度的(不能直接比較大小,定義的是無差異性的概念)。如Ant,jbpm都是很大的概念。

前段時間javaeye上有關普元的黃柳青談中國軟體開發情況:"目前,國內傳統大型公司專屬應用程式軟體有兩種方式居多:編碼式開發方式和一次開發方式。值得注意的是,兩種方式都有致命的缺陷---編碼式開發方式使得企業級應用軟體的快速開發和實施難以實現;一次性開發持續啟動並執行方式,則導致軟體的嚴重僵化和應用的不適應。儘管有時兩種方式的操作者會彼此攻擊,但在使用者看來,它們之間並無顯著不同"

其說的以及普元做的,就是這三個開發方式。

buaawhl老大說:"Interpreter is over Code Generator。meta programming的最高層次是 語言層級直接解決,比如,smalltalk, ruby, python, 還有其他reflection 支援的非常好的語言。甚至 STL 等 template 技術,也可以算作語言層級。Code Generation 是最低層級的meta programming解決方案。技術含量也最低。這個層級必須超越,才能夠真正達到質變,完全跳出概念炒作的層次。"

我一直以為:其實代碼產生也沒有那麼壞,關鍵在於產生什麼東東,如果是產生結構性的代碼,就很容易被人bs,因為這種代碼是大都可以用template完成的,同時因為這種代碼往往不是最終的產物,就存在同步維護問題。
但如果產生的是功能性代碼,這類代碼是最終執行代碼,那麼通常就把用於設計的代碼看作是最終產物,最明顯的例子是DSL。

一些雜想,歡迎拍磚!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.