  Many variability management techniques rely on sophisticated language
extension or tools to support it. While this can provide dedicated syntax and
operational mechanism but it struggling practical adaptation for the cost of
adapting new technology as part of development process. We present
Self-composable Programming, a language-driven, composition-based variability
implementation which takes an object-oriented approach to modeling and
composing behaviors in software. Self-composable Programming introduces
hierarchical relationship of behavior by providing concepts of abstract
function, which modularise commonalities, and specific function which inherits
from abstract function and be apply refinement to contain variabilities to
fulfill desired functionality. Various object-oriented techniques can
applicable in the refinement process including explicit method-based, and
implicit traits-based refinement. In order to evaluate the potential
independence of behavior from the object by applying object-orientation to
function, we compare it to Aspect-oriented Programming both conceptually and
empirically.
