When designing a class hierarchy, you may face a decision between inheritance (aka IsA ) vs. containment (aka HasA) relation. For instance, if you are designing a Radio class, and you already have the following classes implemented for you in some library: Dial, ElectricAppliance. It is quite obvious that your Radio should be derived from ElectricAppliance. However, it is not so obvious that Radio should also be derived from Dial . How to decide? You can check whether there is always a 1:1 relation between the two, e.g., do all radios have one and only one dial? You may realize that the answer is “no”: a radio can have no dial at all (a transmitter/receiver adjusted to a fixed frequency) or may have more than one (both an FM dial and AM dial). Hence, your Radio class should be designed to have Dial(s) instead of being derived from it. Note that the relation between Radio and ElectricAppliance is always 1:1 and corroborates the decision to derive Radio from ElectricAppliance