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),也就是面向元数据解析的编程。我们可以比较一下几种常见的编程模型,来加深理解。
分享到:
相关推荐
函数式编程(FP)是一种软件开发风格,它注重不依赖于编程状态的函数。函数式代码易于测试和复用,容易实现并发,且不容易受到bug的攻击。Scala是一种能很好支持函数式编程的新兴JVM语言。《Scala函数式编程》是针对...
函数式编程(FP)是一种软件开发风格,它注重不依赖于编程状态的函数。函数式代码易于测试和复用,容易实现并发,且不容易受到bug的攻击。Scala是一种能很好支持函数式编程的新兴JVM语言。《Scala函数式编程》是针对...
课程下载——C#+WPF上位机开发课程(模块化与反应式编程)
开放式工业控制系统的软件开发技术—— CODESYS V3 基础编程指南
开放式控制系统编程技术.pptx
C#链式编程示例主要给大家介绍了关于C#管道式编程的介绍与实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值
《开放式工业控制系统的软件开发技术CODESYS V3 基础编程指南》Part1.pdf.pdf
函数式编程有许多优势,由此越来越受欢迎。然而每个编程范式 (paradigm) 都有自己唯一的术语,函数式编程也不例外。我们提供一张术语表,希望使你学习函数式编程变得容易些。
RxJava提供了一系列操作符和扩展,使得开发人员可以以声明式方式编写异步代码,并能够轻松地处理异步任务、事件和数据流。 响应式编程是一种编程范式,它强调在数据流系统中,以流式方式处理异步事件。与传统的命令...
C++与Golang对插件式编程的实现示例,旨在了解插件式编程的思想,共同进步
Java函数式编程是指利用函数式编程的思想和特性来开发Java应用程序。函数式编程强调将计算过程视为数学函数的求值,侧重于函数的组合、映射、过滤等操作,同时避免了可变状态和可变数据。 在Java中,函数式编程主要...
Eclipse的使用 模块和模块的常用方法 函数式编程 yield 三元运算 Lambda表达式 内置函数 常用模块 装饰器 作业
这些示例展示了函数式编程范式的优雅和威力,是掌握这一变革性软件开发方法的指南。通过深入理解和实践这些示例,您将学会如何利用函数式编程的原则和技巧来构建高效、模块化的程序。这本教程不仅仅是一个代码示例...
开放式工业控制系统的软件开发技术—— CODESYS V3 基础编程指南 ,codesys入门书籍,入门必看
Mixly软件,傻瓜式编程,让一个新手小白都学会编程的软件,直观易懂
一个基于函数式编程思想开发的Javascript工具库,所有的函数都没有副作用,拥有非常多的实用性功能,比如函数的防抖,节流,柯里化,日期格式化,解析地址等等。
App Inventor积木式编程能够降低编程的难度和复杂性,使学生更容易学习和掌握。 四、结论 基于App Inventor积木式编程的设计与实现,以天气预报APP为例,能够提高青少年学习积木式编程的兴趣,培养学生的计算思维...