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