какие показатели показывают разницу между объектно-ориентированным и процедурным кодом

Какие показатели могут помочь указать, что у меня есть процедурный код вместо объектно-ориентированного кода? Я хотел бы иметь набор простых метрик, которые с высокой вероятностью указывают на то, что анализируемый код содержит скрипты процедурных транзакций и анемичную модель предметной области, вместо того, чтобы следовать здравым принципам объектно-ориентированного проектирования.

Буду рад любому набору полезных метрик и инструментов для измерения.

Спасибо, Томас!


person herrwieger    schedule 19.03.2010    source источник
comment
Как насчет количества токенов классов в исходном коде?   -  person Ira Baxter    schedule 06.04.2011


Ответы (2)


Некоторые просто не в моем уме

  • относительное количество интерфейсов, абстрактных классов и т. д. (больше ОО)
  • использование переменных-членов для каждого метода (больше ООП)
  • количество методов, в которых используется одна и та же переменная-член (больше OO)
  • количество статических переменных и методов (более процедурные, особенно статические методы (применяются некоторые исключения, например фабрики))
  • строк кода на класс (более процедурный)

Это не гарантирует, что ваш код будет более объектно-ориентированным или более процедурным, но может помочь им.

person Samuel Carrijo    schedule 19.03.2010

Сплоченность и сцепление


Показатели, ориентированные на связность и взаимосвязь, должны дать хорошее представление о том, что ваши классы настоящие, а не наборы функций. Существует очень читаемая статья здесь, которую я цитирую ниже, чтобы показать, почему я считаю сплоченность хорошим показателем:

«Связность означает связанность» компонентов модуля. Высокосвязный компонент — это компонент с одной основной функцией. Должно быть трудно разделить сплоченный компонент. Сплоченность можно классифицировать по порядковой шкале, которая варьируется от наименее желательной категории (случайная сплоченность) до наиболее желательной (функциональная сплоченность)".

Классическим показателем сплоченности является отсутствие сплоченности в методах Чидамбера и Кемерера (LCOM). Вы также можете посмотреть Ответ для класса (RFC), который измеряет связь между методами в классе.

Вы можете рассмотреть проектные показатели, такие как NOC и DIT, но мой собственный опыт показывает, что они слишком грубы и их легко спутать с классами в сторонней структуре.

Вы не сказали, какой язык вы используете, но есть несколько инструментов, созданных для Eclipse, поэтому быстрый поиск в Интернете объектно-ориентированных метрик на основе Eclipse должен дать что-то полезное.

person Chris McCauley    schedule 22.03.2010