产生式编程(Generative Programming,GP)

产生式编程(Generative Programming,GP)
黄国强 2005/10/31

    从2004年我开始学习产生式编程,到现在已经有一年多的时间,其间用这种编程和设计方法写了数万行C++代码。充分认识到其巨大的优势,同时也对其适用的范围有了一些认识。特别是后者,往往是一个人是否真正掌握一个方法的标志。从这点来说,这一年多时间的学习,效果还是不错的。
    工业革命从手工作坊到自动装配线用了大约二百年的时间。所以,从60年代提出软件工程的概念以来,软件工业化开发的进展非常缓慢也情有可原。全世界的软件研究者在这方面的探索从来没有停止过。产生式编程也就是在这种背景下提出的。我个人体会,使用产生式编程(简称GP)开发最大的好处就是其领域知识在整个开发过程以致开发结束都以清晰的模型方式得以保存,显然这非常有价值。因为我们平时写程序一个非常大的苦恼就是领域知识已经深深的隐藏在代码中,而任何一个领域知识的变动对程序来说就是无休止的改动和调试。而产生式编程却可以做到以代码的形式清晰的表现领域模型。
    比如参考书目[1]的P410银行储蓄帐号的例子:
" typedef  CalenderYear< CashOut< CashIn< NoCredit < PersonalAccount> > > > Account ";
    虽然,这章我已经好长时间没有看了,但是一看到这段定义,立刻就想起这个Account所包括的领域知识。即:该储蓄帐号是按年结算(CalenderYear),可以储蓄和支出(CashOut、CashIn),不能透支(NoCredit),属于私人帐号(PersonalAccount)等。
    显然,这个非常容易理解。当然,前提是你会泛型(template)。(什么?从来没有写过泛型,那你确实要努力了,否则你就要被淘汰:-)。)泛型技术是一个非常有用的技术,花点时间学习一下绝对值的。它不仅仅能写出高性能的程序(过去我也只认为它仅有这个好处而忽略了它),它还可以构建出一个完全符合依赖倒置原则(DIP Dependency-Inversion Principles)的系统[2]。当然,参考书目[2]使用的是多态技术来构件一个符合DIP原则的系统。
    关于产生式编程更进一步的知识可以参阅参考书目[1]。
    下面谈一下我认识到的产生式编程的局限性。
    由于产生式编程的复用级别是代码,所以不管从安全角度、信息隐藏和管理角度都是不太合适的。业内有一句名言,重用粒度即为发布粒度。所以对于大型系统的架构还是基于组件或类似技术比较好。比如微软的组件(com)技术,其发布的形态为动态链接库,所以其复用比较容易而且复用的程度非常高。当然,组件也存在一些问题,这里就暂时不涉及了。我们使用这些开发技术一定要做到扬长避短,否则,不恰当的运用这些技术反而会给我们带来伤害。

参考书目
[1] [德]Krzysztof Czarnecki and Ulrich W. Eisenecker 《产生式编程--方法、工具与应用》中国电力出版社
[2] [美]Robert C. Martin  敏捷软件开发 原则、模式与实践 清华大学出版社


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

acloud_csu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值