Rule A10-4-1 (advisory, design, non-automated)

Hierarchies should be based on interface classes.

Rationale

Software design that provides common and standardized interfaces without committing to a particular implementation:

eliminates of potential redundancy. increases software reusability. hides implementation details. can be easily extended.

facilitates different objects iteration. Well-defined interfaces are less prone to require further reworking and maintenance. See: Interface-Class


## See also
JSF December 2005 [8]: AV Rule 87: Hierarchies should be based on abstract
classes.
C++ Core Guidelines [11]: I.25: Prefer abstract classes as interfaces to class
hierarchies.
C++ Core Guidelines [11]: C.122: Use abstract classes as interfaces when
complete separation of interface and implementation is needed.