A Component-Based Approach To Modelling Software Product Families With Explicit Variation Points