We propose two new constructs for object oriented programming that significantly increase polymorphism. Consequently, code
may be reused in ways unaccounted for by existing machinery. These constructs of type correspondence and partial inheritance are motivated from metaphors of natural language and thought. They establish correspondences between types non of which is (necessarily) a subtype of
the other. As a result, methods may operate on objects — and may receive arguments — of types different than the ones originally
intended for. The semantics of the proposed constructs generalizes that of ordinary inheritance, thereby establishing the
latter as a special case. We show that the incorporation of these constructs in programming supports the process of natural
software evolution and contributes to a better conceptual organization of the type system.