Type Hierarchies and Crosscutting Concerns in Object Oriented Systems