Отсутствие сцепления в методах (LCOM)



Отсутствие сцепления в методах (Lack Cohesion Of Methods-LCOM) позволяет оценить зависимость методов класса друг от друга. Эта метрика позволяет установить, не решают ли методы одного класса "несколько задач". Для вычисления этой метрики подсчитывается количество пар методов, которые не используют общие атрибуты класса. Затем подсчитывается количество пар методов, которые используют общие переменные. Метрика LCOM равна разности между первым числом и вторым. Если при этом получается получается отрицательное число, то значение метрики считается раным 0.

Вероятное влияние метрики на характеристики системы:

· Отсутствие сцепления методов в классе желательно, поскольку увеличивает инкапсуляцию атрибутов в классе.

· Отсутствие сцепления методов увеличивает вероятность его расщепления на два подкласса.

· Большое сцепление методов класса увеличивает вероятность их ошибочного поведения.

 В литературе отмечается, что определение метрики как число компонентов связности подграфа, соответствующего точкам внутри круга-вершины и связям между ними в промежуточной модели взаимодействия обеспечивает метрику с порядковой шкалой. Иногда предлагается метрика недостаток прочности класса, обеспечивающая шкалу отношений. В соответствии с представленным ниже определением для каждого класса рассматривается множество полей класса (n штук) и множество методов (Ai), связанных с каждым i-ым полем класса. Метрика определяется следующим образом:

, где m – число методов класса.

Ai – множество точек-методов, связанных дугами с точкой-полем, n – число точек-полей, m – число точек-методов. Метрика связана с сопровождаемостью программ, поскольку низкая связность увеличивает сложность программ, а недостаток связности говорит о том, что, возможно, класс должен быть разбит на два или более классов.

Пример:

Рассмотрим программу:

class Edge : public View { Point *start, *end; Node *node1, *node2; Node getNode1() { return node1; } Node getNode2() { return node2; } void setArea(Point p1, Point p2){   start = p1;   end = p2; }; void draw(Graphics *g){   Point c1 = node1->getCenter();   Point c2 = node2->getCenter();   g->drawLine(p1, p2);   setArea(p1, p2); }

};

Подсчитаем сцепление пар методов:

· N(getNode1, getNode2) = 0

· N(getNode1, setArea) = 0

· N(getNode1, draw) = 1, общий атрибут node1.

· N(getNode2, draw) = 1, общий атрибут node2.

· N(getNode2, setArea) = 0.

· N(setArea, draw) = 2, общие атрибуты node1 и node2 .

Пар, которые не используют общих атрибутов, 3. Использующих общие атрибуты 3. В результате LCOM = 0.

Количество строк текста на класс (KLOC)

Количество строк текста на класс в килобайтах (Lines Of Class in K-KLOC) позволяет оценить сложность реализации класса.

Число методов в классе (NM)

Число методов в классе (The number of methods - NM) - длина списка операций вершины в промежуточной модели наследования, соответствующей классу т.е. число методов, как определенных в классе, так и унаследованных от суперклассов. Кроме этого определения метрики существует и другое, в соответствии с которым принимаются во внимание только методы с различными именами. В терминах модели такое определение “звучит” как число уникальных имен операций в списке операций вершины модели, соответствующей классу. Шкала значений абсолютная.

Метрика связана с повторным использованием программ. Классы с большим числом методов могут ограничивать возможность повторного использования. Кроме того, чем больше число методов в классе, тем больше их потенциальное влияние на потомков, наследующих все методы класса.

Число новых методов в классе (NNM)

Число новых методов в классе (The number of new methods - NNM) - длина списка операций вершины в промежуточной модели наследования минус число входящих в вершину дуг со значением атрибута тип, равным наследование метода. Шкала значений абсолютная.

 


Дата добавления: 2021-03-18; просмотров: 97; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!