首页 理论教育利用产生式编程实现自动化生成的方法

利用产生式编程实现自动化生成的方法

【摘要】:产生式编程寻求对开发过程中的中间产物和最终产品都进行自动化生成。要达到这一目标,第一步就要对产品的系统族进行领域建模,产生式编程的领域模型组成如图3-3所示。图3-3产生式编程的领域模型组成一个问题空间、一个解空间以及在两者之间进行映射的领域特定配置知识构成了产生式编程的领域模型。

产生式编程(generative programming,GP)是一种新型的软件开发范型,符合软件复用的思想,对解决“软件危机”有重要的意义。产生式编程不仅包括一系列的工程开发方法,还对相关实现技术进行了囊括,主要包括泛型编程、基于模板面向组件的开发技术、AOP技术以及产生器技术等。产生式编程的许多理念、方法与后来提出的MDA(model-driven architecture)方法有相似之处,区别是产生式编程的相关理念更为先进,强调区分领域工程和应用工程,需要进行共性和差异性的分析,并通过领域语言加以描述,最后使用产生器(generator)自动装配,而MDA则侧重具体的实现方式,非常重视UML的使用,两者会继续互相借鉴,取得更大的进步。

产生式编程的思想是在给定需求规约后,根据需求开发出基于复用的高度定制构件,将软件开发从面向单一软件的软件开发转而面向相同领域中系统族的软件开发。在遇到新的开发需求时,不是从头重复软件工程的步骤,而是通过之前的可复用构件在相应的产生式领域模型的指导下运用产生器自动化生成软件系统。这种自动化组装的思想已广泛应用于传统工业中,例如目前的汽车工业,以机器人代替人操作相应的装配线来制造车辆。这一思想也会成为未来软件开发的发展方向。

产生式编程寻求对开发过程中的中间产物和最终产品都进行自动化生成。要达到这一目标,第一步就要对产品的系统族进行领域建模,产生式编程的领域模型组成如图3-3所示。

图3-3 产生式编程的领域模型组成

一个问题空间、一个解空间以及在两者之间进行映射的领域特定配置知识构成了产生式编程的领域模型。其中,问题空间主要用于表示定制系统族的需求,对领域中的系统族范围进行界定。该部分主要面向应用程序员和客户。问题空间设计的重要原则是如果没有必要,就不必对太多的细节进行制定。问题空间中包括的特征有三类:(www.chuimin.cn)

(1)具体特征。这类特征直接对应一个具体的组件;

(2)方面特征。这类特征即AOP意义上的方面,一个方面即为一个可影响其他组件的模块;

(3)抽象特征。顾名思义,这类特征不存在直接的实现,它们是具体特征和方面特征的内在需求,如性能、速度、空间。

解空间主要包括系统族实现所需的组件以及组件间的组合、依赖和交互关系,要求尽可能地达到最大可组合性,且组合之间的冗余性要达到最小,尽可能地提高组件的可重用性,这也符合泛型组件的要求。泛型编程的思想可以运用在解空间中。领域特定配置知识则主要用于分离问题空间与解空间。这一行为的好处是可以让两个空间进行各自独立的演化,减少后续修改时的工作量,这不仅降低了实现组件的冗余性和耦合性,而且提高了实现组件的可组合性和可重用性。