Architecting and designing
  
Generalization
An abstraction that enables the user to separate a class from one or more refined versions of the class.