Implementing software product lines using traits
Lorenzo Bettini, Ferruccio Damiani, Ina Schaefer

abstract:
A software product line (SPL) is a set of software systems with
well-defined commonalities and variabilities that are developed by
managed reuse of common artifacts. In this paper, we present a
novel approach to implement SPL by fine-grained reuse mechanisms
which are orthogonal to class-based inheritance. We introduce
the FEATHERWEIGHT RECORD-TRAIT JAVA (FRTJ) calculus
where units of product functionality are modeled by traits, a
construct that was already shown useful with respect to code reuse,
and by records, a construct that complements traits to model the
variability of the state part of products explicitly. Records and traits
are assembled in classes that are used to build products. This composition
of product functionalities is realized by explicit operators
of the calculus, allowing code manipulations for modeling product
variability. The FRTJ type system ensures that the products in the
SPL are type-safe by type-checking only once the records, traits
and classes shared by different products. Moreover, type-safety of
an extension of a (type-safe) SPL can be guaranteed by checking
only the newly added parts.