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.