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
.
If you have a hot tip and we publish it, we'll pay you. However, due to accounting overhead we no longer pay $10 for a single tip submission. You must accumulate 10 acceptable tips to receive payment. Be sure to include a clear explanation of what the technique does and why it's useful. If it includes code, limit it to 20 lines if possible.
Submit your tip here.