`
jgtang82
  • 浏览: 397914 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(转) 开发式编程,声明式编程和产生式编程

阅读更多
Programmatic programming, Declarative programming and Generative programming
开发式编程,声明式编程和产生式编程
Author:Anders小明

开发式编程是编码的,如:Java, C#
声明式编程是解析的,如:ANT(spring等的xml不一样,它们是静态描述型的,不那么verb)
产生式编程是生成的,如:AOP(AspectJ),DSL(Drools)

开发式编程是聚合的,
声明式编程是声明的,
产生式编程是组合的,

声明式编程和产生式编程看起来很像:
1.声明式编程需要一个解析器,产生式编程需要一个生成器;
2.产生式编程(正统的)需要一个编辑器,声明式编程也可以有(如jbpm)。
3.产生式编程有一个元模型,声明式编程也可以定义。

本质的区别在于
1.产生式是自底向上,而声明式是自顶向下。即产生式编程用的思路是组合概念(用小粒度的概念组合生成大粒度的概念),
而声明式编程是解析概念,用统一的概念来理解,把不同差异性交由具体程序解析。
2.声明式编程的编辑器生成的是xml文件,将由框架程序解析;而产生式生成程序代码,不做解析运行。
3.由于1,导致元数据模型不一样,产生式是相对细粒度的,而声明式是粗粒度的(不能直接比较大小,定义的是无差异性的概念)。如Ant,jbpm都是很大的概念。

前段时间javaeye上有关普元的黄柳青谈中国软件开发情况:"目前,国内传统大型企业应用软件有两种方式居多:编码式开发方式和一次开发方式。值得注意的是,两种方式都有致命的缺陷---编码式开发方式使得企业级应用软件的快速开发和实施难以实现;一次性开发持续运行的方式,则导致软件的严重僵化和应用的不适应。尽管有时两种方式的操作者会彼此攻击,但在用户看来,它们之间并无显著不同" // 有高度,有深度,有水平!更多构件相关内容请参考:http://gocom.primeton.com/

buaawhl老大说:"Interpreter is over Code Generator。meta programming的最高层次是 语言级别直接解决,比如,smalltalk, ruby, python, 还有其他reflection 支持的非常好的语言。甚至 STL 等 template 技术,也可以算作语言级别。Code Generation 是最低级别的meta programming解决方案。技术含量也最低。这个级别必须超越,才能够真正达到质变,完全跳出概念炒作的层次。"

// My comment: 代码生成器这样的东西层次较低,STL等template技术优之,编程语言解决(把源码看成是metadata)最优

我一直以为:其实代码生成也没有那么坏,关键在于生成什么东东,如果是生成结构性的代码,就很容易被人bs,因为这种代码是大都可以用template完成的,同时因为这种代码往往不是最终的产物,就存在同步维护问题。
但如果生成的是功能性代码,这类代码是最终执行代码,那么通常就把用于设计的代码看作是最终产物,最明显的例子是DSL。

结构性 与 功能性 代码 的区别:
结构性代码就是出于底层框架要求生成的,或者是通过某种建模工具生成的基本类以及接口的代码。
前者如:生成一些Action或者EventHandler的代码,但是具体的method都是空的;
后者如:通过数据表结构生成所谓贫血的domain object代码,需要加很多domain logic,除非设计就是这样,否则就是结构性代码。

myNetWeaver认为:
从概念上看,WebDynpro是基于MVC的声明式编程(declarative programming),也就是面向元数据解析的编程。我们可以比较一下几种常见的编程模型,来加深理解。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics