介绍
在他们的开创性著作《生成性编程》中,Czarnecki和艾森内克(C&E公司))描述如何构建特征模型[C&E 4.4],包括特征图加上语义、基本原理和其他属性。然后使用特征模型驱动设计周期最终导致手动或自动装配配置。
特征模型提供了一种描述库的语言boost.org中经常出现的可变性问题讨论。沃尔夫假设:“语言决定方式我们思考,并决定我们可以思考什么适用。在讨论图书馆可变性问题时,我们有由于缺乏良好的语言而陷于瘫痪。对于功能模型,我们现在有了一种语言来进行对话。
C&E提供的图形特征图以适合电子邮件讨论的形式boost.org取决于于。功能图的层次结构可以是由简单的基于文本的特征图语言表示。A类特征模型也可以利用超链接HTML固有的。
功能图语言的语法表示为扩展Bakus-Naur形式;::=代表生产,[…]表示选项,{…}表示零个或多个实例,并代表备选方案。
功能模型::=概念名称详细信息{feature}功能::=功能名称[详细信息]details::=“(”feature-list“)”//所需功能|“[”feature-list“]”//可选功能feature-list::=元素{“|”元素}//仅一个|元素{“+”元素}//一个或多个|元素{“,”元素}//all//[a+b]等价于[a,b]元素::=功能|详细信息概念名称::=名称feature-name::=名称
通常的词汇惯例适用。名称是区分大小写,由前导字母组成,后跟字母、数字、下划线或连字符,不带空格允许。
每个名称的至少一个实例应超链接到相应的功能描述.
虽然语法是为了书面交流在人与人之间,它也可能是普通的机器解析以供使用使用自动工具。
描述性信息与每个概念或功能。根据[C&E 4.4.2],这包括:
- 语义描述。
- 理论基础。
- 利益相关者和客户计划。
- 示例系统。
- 约束和默认依赖关系规则。
- 可用性站点、绑定站点和绑定模式。
- 打开/关闭属性。
什么是功能?
特性[C&E 4.9.1]是“任何用户或客户端程序可能想控制一个概念。因此,在特征建模,我们不仅记录功能特征。。。还有实现功能。。。,各种优化,替代实现技术等。”
例子
特殊容器(组织,性能,接口)//所有要求组织[有序+索引]//零个或更多(4个配置)indexed[hash-function]//零或一(2个配置)性能(快速|小型|平衡)//正好一个(3种配置)接口(STL样式+光标样式)//一个或多个(3种配置)
应该有以下功能描述一些控制者、组织、有序、索引,哈希函数、性能、快速、小型、平衡、接口、,STL样式和光标样式
.
可能的配置数量为(2+2*2)*3*3=54,假设没有约束。
有等效的表示。例如:
特殊容器(组织[有序+索引[哈希函数]],性能(快速|小型|平衡),界面(STL样式+光标样式)
工具书类
Krzysztof Czarnecki和Ulrich W。Eisenecker,有创造力编程,Addison-Wesley,2000,ISBN 0-201-30977-7