促进 C++库

……其中一个世界。 赫伯·萨特安德烈亚历山德雷斯库,C类++编码标准

文本和HTML格式的要素模型图

贝曼道斯

介绍

在他们的开创性著作《生成性编程》中,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