Software Product Lines (SPLs) are sets of software systems that share a common base of features and satisfy the needs of specific market segments. SPLs are developed from a common architecture and share a set of reusable artifacts (designed for a specific domain). Among the main activities in the life cycle of a SPL is the management of variations in all the artifacts that belongs to it. Particularly, the choice of programming techniques that enable variability in implementation artifacts is an activity that deserves much attention. The choice of which technique to use in order to deal with variations in the implementation artifacts of a SPL can result in significant impacts on the quality of these artifacts and also in the resulting products. This book is the result of a master s thesis whose focus was the comparison of variability enabling techniques that are used by the software industry.