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