快速业务通道

冒号课堂§3.2:超级范式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
法。有人认为LOP是继OOP之后的下一个重要的编程范式,我们不妨拭目以待。”

句号整理了一下头绪:“能不能这么说:如果处理一些复杂、非标准格式的文档,可以考虑用元编程;如果整个业务逻辑复杂多变,可以考虑利用现有的DSL或创造新的DSL来处理业务,即所谓的语言导向式编程。”

“总结得不错,不过当特定格式的文档有了专门的解析器后,这种文档格式标准就可视为一种语言了,不是吗?这本质上就是DSL啊。”冒号出语点化。

句号顿时醒悟:“是啊,就像XML、HTML一样,能被程序认识的格式可不就是一种计算机语言嘛。”

冒号将话题延伸:“我们的想象力可以再狂野些,在文本DSL的基础上裹以图形界面,从而引进图形语言。如果再将部分业务逻辑开放给用户定制,那么你的客户会欣喜地发现,他们的经理只要点点鼠标就可以改变整个业务流程了,而这一切不仅不需要软件开发方或第三方的参与,连本公司的技术人员也免了。这时候倒是你的老板发愁了:你的设计太过完美,客户的后续开发费怕是赚不到啰。”

众人一乐。

问号继续发问:“还有其他元编程的应用吗?”

冒号随口举了几例:“元编程的例子比比皆是:许多IDE如Visual Studio、Delphi、Eclipse等均能通过向导、拖放控件等方式自动生成源码;UML建模工具将类图转换为代码;Servlet引擎将JSP转换为Java代码;包括Spring、Hibernate、XDoclet在内的许多框架和工具都能从配置文件、annotation/attribute等中产生代码。”

引号仍不知足:“这些应用虽然典型,但都是些开发工具、框架引擎之类的基础软件,有没有平时编程就能用到的例子?”

“当然有!”冒号坚定地答复,“有时程序中会出现大量的重复代码,却囿于语法上的限制无法进一步抽象化和模块化。如果采用手工编写或者单纯拷贝的方法,既费时又易错,显为下策。有时可借助IDE内置的代码生成功能,但一方面局限性很大,另一方面无法自动化和版本化。”

问号插问:“什么叫版本化?”

冒号解释:“理想情况下,一个程序员对程序的贡献都应该保存在版本控制系统(version control system)中,以便跟踪、比较、改进、借鉴和再生成。在IDE下自动生成的代码本身可以被记录,但产生代码时的行为却不能被记录,几次简单的鼠标动作就能产生较大的代码差别,使得版本比较的意义大打折扣。顺便说一句,离开IDE就无法编写、编译或调试的程序员,如同卸盔下马后便失去战斗力的武士,是残缺和孱弱的。”

问号有些明白了:“这是因为鼠标行为本身在代码中是没有痕迹的。”

“不仅是鼠标行为,有些需要键盘交互的行为也是没有痕迹的。比如在命令行下用debugger来调试的行为无法被记录,也难以重复和自动化,只能作为权宜之策。相比之下,日志(logging)和单元测试(unit test)具有明显的优势[2]。”冒号答完,立马重返主题,“回到上面的问题,既然有重复的代码,不能从语法上提炼,不妨退一步从文字上提炼。我们可以利用AWK、Perl之类的擅长文字处理的脚本语言,当然也可以用Java、C等非脚本语言,再辅以XSLT之类的模板语言,自动生成重复代码。这样不仅灵活性强,而且生成代码的代码——也就是元程序代码可以被重用,元程序的数据来源也能版本化。”

句号深得要领:“就像Hibernate中的antlr包一样,真正的源码反而不在版本控制中了。一方面没有保存的必要——可以自动生成;另一方面没有比较的必要——元程序的数据来源的变化比实际源码的变化更简明、更直观。”

冒号继续推进:“另外,有时程序的结构需要动态改变,而Java、C++等静态

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号