文本和HTML中的特性模型图
作者:Beman Dawes
简介
在他们的开创性著作《泛型编程》中,Czarnecki 和 Eisenecker (C&E)) 描述了如何构建特性模型 [C&E 4.4],该模型由特性图以及语义、原理和其他属性组成。特性模型随后被用于驱动设计周期,最终导致配置的手动或自动组装。
特性模型提供了一种语言来描述库的可变性,这在 boost.org 的讨论中通常是一个问题。“语言塑造了我们的思维方式,并决定了我们能思考什么”的沃尔夫假说似乎适用。在讨论库可变性问题时,我们因缺乏良好的语言而束手无策。有了特性模型,我们现在有了一种语言来进行对话。
C&E 提出的图形特性图不适合 boost.org 依赖的电子邮件讨论。特性图的层次结构可以用简单的基于文本的特性图语言表示。特性模型还可以利用 HTML 中固有的超链接。
语法
特性图语言的语法用扩展巴科斯-诺尔范式表示;::= 表示产生式,[...] 表示选项,{...} 表示零个或多个实例,| 表示备选项。
feature-model ::= concept-name details { feature } feature ::= feature-name [details] details ::= "(" feature-list ")" // required features | "[" feature-list "]" // optional features feature-list ::= element { "|" element } // one only | element { "+" element } // one or more | element { "," element } // all // [a+b] equivalent to [a,b] element ::= feature | details concept-name ::= name feature-name ::= name
通常的词法约定适用。名称不区分大小写,由一个前导字母组成,后跟字母、数字、下划线或连字符,不允许有空格。
每个名称的至少一个实例应该超链接到相应的 特性描述。
虽然该语法旨在用于人与人之间的书面交流,但它也可能被自动工具轻松解析以供使用。
描述性信息与每个概念或特性相关联。根据 [C&E 4.4.2],这包括
- 语义描述。
- 原理。
- 利益相关者和客户端程序。
- 示例系统。
- 约束和默认依赖规则。
- 可用性站点、绑定站点和绑定模式。
- 打开/关闭属性。
什么是特性?
特性 [C&E 4.9.1] 是“用户或客户端程序可能希望控制的关于概念的任何内容。因此,在特性建模期间,我们不仅记录功能特性...还记录实现特性...各种优化、替代实现技术等等。”
示例
special-container ( organization, performance, interface ) // all required organization [ ordered + indexed ] // zero or more (4 configurations) indexed [ hash-function ] // zero or one (2 configurations) performance ( fast | small | balanced ) // exactly one (3 configurations) interface ( STL-style + cursor-style ) // one or more (3 configurations)
应该有 some-container、organization、ordered、indexed、hash-function、performance、fast、small、balanced、interface、STL-style 和 cursor-style
的特性描述。
假设没有约束,可能的配置数量为 (2 + 2*2) * 3 * 3 = 54。
存在等效的表示形式。例如
special-container ( organization[ ordered+indexed[ hash-function ]], performance( fast|small|balanced ), interface( STL-style+cursor-style ) )
参考文献
Krzysztof Czarnecki 和 Ulrich W. Eisenecker,《泛型编程》,Addison-Wesley,2000 年,ISBN 0-201-30977-7