****************************************
Feature Oriented Software Development
****************************************

*Feature Oriented Software Development (FOSD)* is a paradigm to develop 
*Software Product Lines*.
A Software Product Line(SPL) consists of a set of software systems that 
share some of their code.
Each software system of that set is called a product of the SPL.

FOSD introduces the concept of a *feature*. A SPL provides a set of features.
Each product can be constructed by composing a subset of the SPL's features.
A *Feature Model(FM)* captures the interdependencies between all features and 
regulates how features can be composed.

In the following, a short overview over FOSD will be given.
For a more thorough investigation, the reader is referred to the following scientific papers:



What is a feature?
====================

A feature is a structure that extends and modifies the structure of
a given program in order to satisfy a stakeholder’s requirement,
to implement and encapsulate a design decision,
and to offer a configuration option [ALMK]_ .

Now, what does that mean:

- a feature provides some functionality
- it provides that functionality by extending or modifying a program
- you can either select or omit the feature for a specific product

However, a feature is not a plugin!
TODO: Why not?



.. [ALMK] S. Apel, C. Lengauer, B. Möller, and C. Kästner.
    An Algebra for Features and Feature Composition.
    In Proceedings of the International Conference on 
    Algebraic Methodology and Software Technology (AMAST),
    volume 5140 of Lecture Notes in Computer Science,
    pages 36–50. Springer-Verlag, 2008.

Program Composition
=======================

Products are automatically generated by a feature composer that takes a set of features as input
and returns the composed product.

Feature Structure Trees
------------------------


Composers for other languages
==============================

Here is a list of feature composers for different programming languages:

- Fuji - a feature oriented compiler for JAVA
- FeatureHouse's FSTComposer - FeatureHouse supports composition of JAVA, C-Sharp, ... FeatureHouse itself is language independent and unsupported languages can be added by providing a parser and a pretty-printer.
- AHEAD Tool Suite

featuremonkey tries to provide FOP support for Python.
However, as Python is a very dynamic language feature composition can 
be acheived at runtime without the need for code generation.
This opens up some new possibilities , but also creates some problems.

