以文字和 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