Inheritance is often portrayed as a fundamental ingredient of object-oriented programming, one which is essential to building extensible software systems. However, inheritance is also a controversial mechanism with many competing and often contradictory interpretations, whose use can even impede extensibility in certain scenarios. Decomposing inheritance into the more basic mechanisms of object...