FeatureGluonJ: A FOP Language with Family Polymorphism
FeatureGluonJ is a feature-oriented programming language, aiming at modularity for implementing features. The modularity includes code reuse and interfaces among feature modules. FeatureGluonJ is developed by extending an aspect-oriented programming language, GluonJ. Thus, it is also an extention to Java.
Recommended documents to learn feature-oriented software product lines:
- Feature-oriented domain analysis (FODA) feasibility study, K. C. Kang et al. CMU/SE-90-TR-021, 1990
- Modularity in the Context of Product Line Variability!, keynote talk by Prof. Kang at AOSD 2013
- An Overview of Feature-Oriented Software Development, S. Apel and C. Kästner, JOT vol. 8, 2009
Publications
- A Study on Implementations of Feature Interaction in Software Product Lines
- Fuminobu Takeyama
- Ph.D. Dissertation, Tokyo Institute of Technology
- December 2013
- Get Copy (book ver.)
- Implementing Feature Interactions with Generic Feature Modules
- Fuminobu Takeyama and Shigeru Chiba
- Software Composition, LNCS 8088, Springer, pp. 81-96, June 2013
- Proceedings of 13th International Conference on Software Composition (SC 2013)
- Get Copy Get Slides
- Feature-Oriented Programming with Family Polymorphism
- Fuminobu Takeyama, Shigeru Chiba
- Proceedings of the 3rd international workshop on Variability & Composition (co-located with AOSD 12)
- 26 March 2012, Potsdam, Germany
- Get Copy Get Slide
The FeatureGluonJ compiler
The compiler binary and a sample project
The sample project is a MobileMedia SPL refactored from
FeatureHouse version
not
MobileMedia Lancaster.
Introduction to FeatureGluonJ
to be updated
The syntax
Although FeatureGluonJ provides its own syntax added to ones of standard Java, for supporting to edit source code in FeatureGluonJ on IDEs, it also provides annotations for representing constructs unique to FeatureGluonJ. For example, the following code:
package p;
feature f;
class C overrides D {
}
is semantically equivalent to:
package p;
import jp.ac.titech.is.csg.fgj.runtime.annotation.*;
@Feature("f") @Overrides
class C extends D {
}