天天看点

产生式编程(Generative Programming)方法介绍

  在软件中,向自动化制作软件的方向转变需要经历两个步骤:

把焦点从开发一个系统转移到开发一个系统族上来:开发出正确的共性组件

使实现组件的装配自动化:使用产生器达到自动化

  我感觉它可以作为产品线工程的一种软件工程方法,产生式编程就是设计实现组件,使之适应于通用产品线结构,同时对配置知识建模,强调如何把抽象的需求转变成特定的组件群,并且使用产生器实现配置知识,通过这些工作来解决前面说的高复杂性、高效率和高质量等问题。

  Generative Programming is a software engineering paradigm based on modeling  software  system  families  such  that,  given  a  particular  requirements specification, a highly customized and optimized intermediate or end-product can be automatically manufactured on demand from elementary, reusable implementation components by means ofconfigurations knowledge [CE00]. 

产生式领域模型

  GP的目标集中于系统族,而不是一种一个的系统(one-of-a-kind system),它不是从头构造一个单独的系统族成员,而是基于一个通用的产生式领域模型。模型由三部分组成:

指定系统族成员(问题空间 problem space)

组装出每一个成员的实现组件(解空间 solution space)

在问题空间和解空间之间的配置知识映射关系(配置知识)

为重用而开发以及使用重用的开发

确定一个系统族范围

  为重用而进行的开发目标集中于系统族,它的第一步包括确定感兴趣的家族范围,就是说,决定应该包括哪个特征,不应该包括哪些特征。这就要求分析项目风险承担者和他们的目标、当前和潜在的市场、技术预测等等。

  特征模型代表了领域工程对软件工程的重要贡献,并且对产生式程序设计来说是必须的。确定系统族范围的下一步就是确定家族成员的共同特征和差异特征,以及差异特征之间的依赖,也就是分析出产品的721。特征建模可以让我们以一种结构化的方式来记录分析的结果,支持可变性管理。它具有以下优点:

以明确的方式表示可变点(variation point)和它们之间的依赖性。这种表示提供了取得一个系统族的视线组件类别的基础,并提供了指定家族成员和配置知识的方法。

区分在一个家族成员内部和家族成员之间的差异

提供了一种与实现无关的表示差异性的方法,这使得可以在分析模型之外做出关于差异性机制的决策

领域工程

1.        纵向领域(verticaldomain):根据系统类别而组织的领域。如预算软件、材料管理、合同管理、企业报表系统等。

2.        横向领域(horizontaldomain):根据软件部件的类别而组织的领域。比如数据关系计算引擎、报表引擎、工作流系统等。

3.        领域之间有3中类型的关系:

a)        包含:比如成本管理软件包含了材料管理系统

b)        使用:比如公司大部分软件都使用了报表引擎

c)        类似:领域之间侧重点不同,但有很多的相似性,通过深入研究一个领域,可以取得对另一个领域的更好理解。比如报表引擎中对于表达式解析和索引部分可能与数据关系计算引擎类似。

应用工程

应用工程是基于领域工程的结果构建系统的过程。对一个新的具体应用做需求分析的时候是利用已有的领域模型,通过领域分析提供的各种通用功能、支持的 变量配置、提供的扩展等来描述客户需要。如果新的需求在领域模型中不存在,则可以定制,或者反馈到领域工程来扩充领域的支持范围。

领域分析

  目的

选择和定义要解决的领域

收集相关的领域信息,把它整合成一个一致的领域模型

通常的领域分析活动

领域设计

目的:开发用于领域中系统族的一个架构,并设计一个制作计划。生产计划的实现可能需要编写开发人员指南、实现领域特定的语言和订购GUI、产生器和一个支持组件检索、鉴定、分发等结构的重用结构,并且建立应用程序的生产过程

领域实现

使用合适的技术来实现架构、组件和过程计划

领域范围界定

特征建模和概念建模

设计一个通用架构和识别实现组件

为”定制“系统指定领域规范意义

指定配置知识

实现那些实现组件

实现领域特定符号

使用产生器实现配置知识

GP还提供的其他一些技术,这些东西我有些看不懂,下面知识罗列一下备忘而已:

动态库和可扩展编程环境

元程序设计和产生器

面向方面的变成

泛型编程

协同工作的产生器

 本文转自 jingen_zhou 51CTO博客,原文链接:http://blog.51cto.com/zhoujg/403114,如需转载请自行联系原作者

继续阅读