A descriptor-based approach to OO code reuse