Stable Abstractions Principle |

Robert C. Martin proposed the idea that for well designed software there should be a specific relationship between two package measures: the abstractness of a package, which shall express the portion of contained abstract types, and its stability, which indicates whether the package is mainly used by other artifacts (stable) or if it mainly depends on other artifacts (instable). The desired relationship is captured in the By sticking to this principle we avoid getting packages which are used heavily by the rest of the application and which, at the same time, have a low degree of abstraction. Such packages are a constant source of trouble, since they are hard to change or extend. ## Main SequenceLet's get a little bit more detailed now. - The
**Abstractness***A*for package*P*is calculated as the ratio of the number of abstract types contained in*P*to the total number of types in*P*. Thus, the resulting values range from zero (only concrete classes) to one (only interfaces and abstract classes). - The
**Instability***I*for package*P*is calculated as the ratio between the number of classes outside*P*required by*P*and the total number of classes outside*P*related to*P*. As above, the resulting values range from zero (only incoming dependencies) to one (only outgoing dependencies).
What was this good for? Well, given these two metrics, the Abstractness and the Instability, we can place every package of our application in a diagram which shows the unit square with the Abstractness on the horizontal axis and the Instability on the vertical axis. Furthermore, we can restate the Stable Abstractions Principle in graphical terms: packages should not lie too far away from the falling diagonal of the diagram, which is called the The packages which reside in the corners apart from the Main Sequence show specific problems: the lower left corner is called the ## DistanceSo now we've got everything together to define the
Calyculating the Distance this way, we get values between -1 and 1. A zero value means the package lies exactly on the Main Sequence, the sign indicates if the package is located above or below the Main Sequence. A derived metric, the Absolute Distance (|D|), omits the sign, thereby allowing to compute meaningful average values for higher level artifacts.
Distance Chart shows you where your packages live, whether they are located near to the Main Sequence, as desired, or if they tend to drift to the bad corners. Every package is displayed by a bubble, the size of which is determined by the number of classes in the package. The color of the bubble reflects the rating of the package's Distance value, which is, as always, adjustable to your requirements. |

< Prev |
---|