Lifecycle and refactoring patterns that support evolution and reuse

Software development can be characterized in terms of prototype (or initial design) phases, expansion phases and consolidation phases. During a consolidation phase, some relationships, initially modeled using inheritance, may be evolved to aggregations. Also, during consolidation, abstrasct classes are sometimes de ned to capture behavior common to two or more existing classes. In this paper, we de ne high-level patterns for the prototype, expansion and consolidating programs. We also de ne supporting patterns for evolving aggregations from inheritance hierarchies and for creating abstract classes.