|
Feature Oriented Programming (FOP) or Feature Oriented Software Development (FOSD) is a general paradigm for program synthesis in software product lines. FOSD arose out of layer-based designs and levels of abstraction in network protocols and extensible database systems in the late-1980s. A program was a stack of layers. Each layer added functionality to previously composed layers and different compositions of layers produced different programs. Not surprisingly, there was a need for a compact language to express such designs. Elementary algebra fit the bill: each layer was function (program transformation) that added new code to an existing program to produce a new program, and a program's design was modeled by an expression, i.e., a composition of transformations (layers). The figure below illustrates the stacking of layers h, j, and i (where h is on the bottom and i is on the top). The algebraic notations i(j(h))and i•j•h express these designs. Over time, the idea of layers was generalized to features, where a ''feature'' is an increment in program development or functionality. The paradigm for program design and synthesis was recognized to be a generalization of relational query optimization, where query evaluation programs were defined as relational algebra expressions, and query optimization was expression evaluation. A ''software product line (SPL)'' is a family of programs where each program is defined by a unique composition of features, and no two programs have the same combination. FOSD has since evolved into the study of feature modularity, tools, analyses, and design techniques to support feature-based program synthesis. Further advances in FOSD arose from recognizing the following facts: Every program has multiple representations (e.g., source, makefiles, documentation, etc.) and adding a feature to a program should elaborate each of its representations so that all representations are consistent. Additionally, some of these representations could be generated (or derived) from other representations. In this article, the mathematics of the three most recent generations of FOSD, namely GenVoca,〔 AHEAD, and FOMDD〔〔 are described, and links to product lines that have been developed using FOSD tools are provided. Also, four additional results that apply to all generations of FOSD are presented elsewhere: MetaModels, Program Cubes, Feature Algebras, and Feature Interactions. == GenVoca == ''GenVoca'' (a meld of the names Genesis and Avoca)〔 is a compositional paradigm for defining programs of product lines. Base programs are 0-ary functions or transformations called ''values'': f -- base program with feature f h -- base program with feature h and features are unary functions/transformations that elaborate (modify, extend, refine) a program: i • x -- adds feature i to program x j • x -- adds feature j to program x where • denotes function composition. The ''design'' of a program is a named expression, e.g.: p1 = j • f -- program p1 has features j and f p2 = j • h -- program p2 has features j and h p3 = i • j • h -- program p3 has features i, j, and h A ''GenVoca model'' of a domain or software product line is a collection of base programs and features (see MetaModels and Program Cubes). The programs (expressions) that can be created defines a product line. Expression optimization is ''program design optimization'', and expression evaluation is ''program synthesis''. : Note: GenVoca is based on the stepwise development of programs: a process that emphasizes design simplicity and understandability, which are key to program comprehension and automated program construction. Consider program p3 above: it begins with base program h, then feature j is added (read: the functionality of feature j is added to the codebase of h), and finally feature i is added (read: the functionality of feature i is added to the codebase of j•h). : Note: not all combinations of features are meaningful. Feature models (which can be translated into propositional formulas) are graphical representations that define legal combinations of features. : Note: A more recent formulation of GenVoca is ''symmetric'': there is only one base program, 0 (the empty program), and all features are unary functions. This suggests the interpretation that GenVoca composes program structures by ''superposition'', the idea that complex structures are composed by superimposing simpler structures. Yet another reformulation of GenVoca is as a monoid: a GenVoca model is a set of features with a composition operation (•); composition is associative and there is an identity element (namely 1, the identity function). Although all compositions are possible, not all are meaningful as mentioned above. GenVoca features were originally implemented using C preprocessor ( #ifdef feature ... #endif ) techniques. A more advanced technique, called mixin layers, showed the connection of features to object-oriented collaboration-based designs.抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「Feature-oriented programming」の詳細全文を読む スポンサード リンク
|