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),也就是面向元数据解析的编程。我们可以比较一下几种常见的编程模型,来加深理解。
分享到:
相关推荐
总之,声明式编程借助C#的特性,使得开发者能够以更加直观和声明性的方式描述代码的意图,而不仅仅是指令。这种编程方式提高了代码的可读性和可维护性,同时也简化了诸如元编程、AOP、DI等复杂编程任务的实现。通过...
6. **错误处理**: 响应式编程中的错误处理是声明式的,可以通过订阅者链上的错误处理器进行处理,确保错误不会传播并导致整个系统的崩溃。 7. **转换和组合**: Reactor提供了丰富的操作符,如map、filter、flatMap...
本指南将深入探讨JavaScript的高效编程和函数式编程这两个重要主题,帮助开发者提升技能,实现更优雅、更可维护的代码。 《Effective JavaScript(中文版).pdf》这本书是JavaScript编程的经典之作,它包含了68个具体...
傅若愚将函数式编程与其他编程范式如面向对象、过程式和声明式进行了比较,指出了它们之间的差异和各自的特点。例如,面向对象编程强调通过对象和类来封装数据和行为,而过程式编程则强调通过程序流程和变量来实现...
这本指南不仅涵盖了函数式编程的基础理论,还详细介绍了如何在实际开发中应用这些理论,使之成为提高编程实践水平和深化编程理解的有力工具。通过学习和应用这些函数式编程技巧,开发者可以更好地理解和运用...
对于已经熟悉Java的开发者来说,学习JavaScript函数式编程不仅可以拓宽视野,也有助于提升在前端开发领域的专业技能。阅读相关书籍,例如"javascript函数式编程",将帮助你更好地掌握这些概念并应用于实际项目中。
函数式编程(FP)是一种软件开发风格,它注重不依赖于编程状态的函数。函数式代码易于测试和复用,容易实现并发,且不容易受到bug的攻击。Scala是一种能很好支持函数式编程的新兴JVM语言。《Scala函数式编程》是针对...
综上所述,这份《开放式工业控制系统的软件开发技术——CODESYS V3基础编程指南.pdf》不仅对CODESYS V3的使用进行了全面的介绍,而且深刻阐述了工业控制系统软件开发的相关技术和方法。通过学习这份指南,工程师不仅...
在JavaScript开发中,函数式编程的概念可以帮助我们编写出更简洁、可读性更强、易于测试和维护的代码。 纯函数是函数式编程的核心概念之一。一个纯函数的输出仅依赖于其输入参数,不产生任何副作用,比如修改全局...
函数式编程(FP)是一种软件开发风格,它注重不依赖于编程状态的函数。函数式代码易于测试和复用,容易实现并发,且不容易受到bug的攻击。Scala是一种能很好支持函数式编程的新兴JVM语言。《Scala函数式编程》是针对...
本文将探讨两种主要的编程范式——函数式编程和声明式编程,以及它们在AI框架中的应用。 首先,我们要理解函数式编程和声明式编程的核心概念。函数式编程强调计算过程为纯函数,即无副作用,相同输入永远产生相同...
"开放式控制系统编程技术" 开放式控制系统编程技术是指使用现代编程技术来实现控制系统的技术。这种技术强调使用标准的、通用的和可互操作的硬件和软件来实现控制系统。其主要内容包括控制原理、编程技术、网络通信...
函数式编程是一种编程范式,它强调使用纯函数和不可变数据结构来进行软件开发。本指南旨在帮助读者深入理解函数式编程的基本概念及其在JavaScript中的应用。 #### 第1章: 我们在做什么? ##### 介绍 在这一章节中...
Java函数式编程是一种将函数作为一等公民的编程范式,它强调使用函数来构造程序,减少...通过理解和熟练掌握上述知识点,开发者可以更好地利用Java 8及以后的版本进行高效、简洁的函数式编程,提升代码质量和开发效率。
在某些场景下,即使函数式编程在运行效率上略逊于命令式编程,但由于其能够大幅缩短开发周期,仍然被认为是一种更具竞争力的选择。 #### 六、结论 综上所述,函数式编程之所以能够在近年来迅速崛起,主要是由于...
函数式编程是一种编程范式,它以数学中的函数为基础概念,强调使用函数来解决问题。在函数式编程中,函数是...随着越来越多的开发者开始欣赏函数式编程带来的好处,这种编程范式已经成为现代软件开发不可或缺的一部分。
《开放式工业控制系统的软件开发技术CODESYS V3 基础编程指南》是一本专注于 CODESYS V3 版本的基础编程技术的指南书,从软件的安装、编程模型、公用元素、变量、编程语言、指令系统、程序结构到基础编程进行了全面...
与传统的命令式编程不同,函数式编程强调不可变性和纯函数的概念,即函数的结果只依赖于输入参数,并且在执行过程中不会改变外部状态。 #### 二、函数式编程的历史背景 函数式编程的历史可以追溯到古希腊哲学家...