Абстрактность - это мера жесткости программной системы. Чем выше абстракция, тем меньше жесткость (или больше гибкость) и наоборот. Если компоненты системы зависят от абстрактных классов или интерфейсов, такую систему легче расширять и изменять, чем если бы она напрямую зависела от конкретных классов.
Стабильность - это мера толерантности к изменениям, а также то, насколько хорошо система программного обеспечения позволяет вносить изменения, не нарушая их. Это определяется путем анализа взаимозависимостей компонентов системы.
Статья Роберта Мартина о метриках ОО описывает эти понятия в более количественном выражении.
Выдержка из статьи:
Ответственность, независимость и стабильность категории могут быть измерены путем подсчета
зависимости, которые взаимодействуют с этой категорией. Три метрики были определены:
Ca: Afferent Couplings: количество классов вне этой категории, которые зависят от классов в этой категории.
Ce: эфферентные связи: количество классов в этой категории, которые зависят от классов вне этой категории.
I: нестабильность: (Ce ÷ (Ca + Ce)): этот показатель имеет диапазон [0,1]. I = 0 обозначает максимально стабильную категорию. I = 1 обозначает максимально нестабильную категорию.
A: Абстрактность: (# абстрактных классов в категории ÷ всего # классов в категории). Этот диапазон метрик равен [0,1]. 0 означает бетон, а 1 - полностью абстрактный.
В любой программной системе, особенно большой, баланс имеет решающее значение. В этом случае система должна сбалансировать абстрактность со стабильностью, чтобы быть «хорошей». Положение на графике A-I показывает это. Пожалуйста, прочитайте статью для объяснения.