This is the last of the Principles of Package and Component Design, the Stable-Abstractions Principle (SAP). It says: ”A component should be as abstract as it is stable.”
In the Stable-Dependencies Principle (SDP) post we learned that stability, or in that case Instability, I, can be calculated using the formula I = Ce / (Ca + Ce) where Ca is the number of afferent couplings and Ce is the number of efferent couplings. A component that has many dependencies towards it, but depend only on a few external classes is considered stable, and vice versa.
Conforming to SAP leads to stable components containing many abstract classes, and instable components containing many concrete classes.
The goal of making stable components abstract is to allow for them to be easily extended and avoid them constraining the design.
Instable components on the other hand can contain concrete classes since they are easily changed
Just as for instability we can define a metric that helps us understand how abstract a component is. The formula is very simple:
A = Na / Nc
where Na is the number of abstract classes in the component and Nc is the total number of classes in the component. A component with A = 1 is completely abstract while a component with A = 0 is completely concrete.