天天看點

産生式程式設計(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,如需轉載請自行聯系原作者

繼續閱讀