超越面向对象编程的革命性进步

  在巴塞罗那举行ServerSide’sJava专题讨论会上MartinFowler和NealFord做了场展示面向语言编程重要报告Fowler曾撰文将面向语言编程定义为“围绕组领域特定语言来构建软件Software编程风格”Fowler和Ford又进步发展了其中些想法(可参见FowleratJaoo2006)并提出了“超越面向对象编程革命性进步”可能性

  面向对象编程以分层结构和树状抽象提供了种有用建模范式然而现实并不总是按层次组织NealFord指出现实“盘根错节彼此联系”是很难用理想化树状画面来勾勒其模型其结果就是现在广泛使用aspects和XML它们渐渐地增加了复杂性并侵蚀了我们实施抽象原意为了弥补这个问题抽象水平应该再次提升因此Ford建议用语言取代分层来作为建模机制

  按照MartinFowler说法面向对象领域建模让我们得以“汇集词汇”但语法——将词汇组合起来思路方法——却是缺失;DSL补足了语法方面因此面向语言编程引导我们“从研究词汇即对象走向种结合了词汇和语法语言观念

  对NealFord来说用DSL来作为种新抽象机制令他特别感兴趣它能填补上下文空缺在缺乏上下文环境中你要“从最基本共识着手并解释所有细节”这就是你和API和框架沟通方式它们没有“任何内建上下文”因此代码中总是不断重复些上下文以致成了干扰相反DSL“总是有着隐含上下文上下文几乎从不露面就算露面也是很少很少通常最多次”因此我们不必再地提供上下文信息于是代码更具可读性也更有表现力

  Fowler和Ford都强调了可读性重要他们认为DSL动机经常被误解并不是为了让业务分析师能够自己写代码而是为了让他们能够阅读和检验代码从而填补专业开发者和业务人员的间罅隙

  有些人厌恶使用面向语言编程风格他们担心维护问题以及增加学习负担特别是在缺乏强大IDE来处理这些纯文字DSL情况下Fowler最近在篇文章中反对说“大框架[……]带来挑战点都不比学门语言少”他再次强调了单语言编写项目复杂性并且NealFord强调说如果门DSL很难读那么它设计就是很糟糕“[使用DSL]目就是为了创造出更容易阅读代码”

  至于IDE支持现今至少有 3家主要厂商正为面向语言编程提供这类工具:CharlesSimonyi开发IntentionalSoftwareMicrosoftSoftwareFactories和JetBrains开发MetaProgramming这些工具MartinFowler称的为语言工作台(LanguageWorkbench)让设计并使用DSL变得更加简单这些工具提高了面向语言编程竞争优势虽然Fowler相信“还要过几年大多数人才会考虑用[语言工作台]来开发实际项目

  你如何看?面向语言编程有机会成为“下位明星”吗?语言工作台能力会在多大程度上影响你在项目中采用DSL决策呢?
Tags:  面向对象的编程语言 面向对象的编程 java面向对象编程 面向对象编程

延伸阅读

最新评论

发表评论