Д. Биемен и Б. Кенг предложили метрики связности класса, которые основаны на прямых и косвенных соединениях между парами методов. Если существуют общие экземплярные переменные (одна или несколько), используемые в паре методов, то говорят, что эти методы соединены прямо. Пара методов может быть соединена косвенно, через другие прямо соединенные методы. Для формализации модели вводятся понятия абстрактного метода и абстрактного класса.
Абстрактный метод АМ(М) — это представление реального метода М ввиде множества экземплярных переменных, которые прямо или косвенно используются методом. Экземплярная переменная прямо используется методом М, если она появляется в методе как лексема данных. Экземплярная переменная косвенно используется методом М, если: экземплярная переменная прямо используется другим методом М', который вызывается (прямо или косвенно) из метода М; или экземплярная переменная, прямо используемая методом М', находится в том же объекте, что и М.
Абстрактный класс АС(С) — это представление реального класса С в виде совокупности абстрактных методов, причем каждый абстрактный метод соответствует видимому методу класса С. Отметим, что АМ-представления различных методов могут совпадать, поэтому в АС могут быть дублированные элементы. В силу этого АС записывается в форме мультимножества (двойные квадратные скобки рассматриваются как его обозначение).
|
|
Локальный абстрактный класс LAC(C) — это совокупность абстрактных методов, где каждый абстрактный метод соответствует видимому методу, определенному только внутри класса С. Пусть NP (C) — общее количество пар абстрактных методов в AC (C). NP определяет максимально возможное количество прямых или косвенных соединений в классе. Если в классе С имеются N методов, тогда NP (C) = N*(N- l)/2. Обозначим:
· NDC (C) — количество прямых соединений AC(Q;
· NIC (C) — количество косвенных соединений в АС(С).
Тогда метрики связности класса можно представить в следующем виде:
o сильная связность класса (Tight Class Cohesion (ТСС)) определяется относительным количеством прямо соединенных методов:
ТСС (С) = NDC (С) / NP (С);
o слабая связность класса (Loose Class Cohesion (LCC)) определяется относительным количеством прямо или косвенно соединенных методов:
LCC (С) = (NDC (С) + NIC (С)) / NP (С).
Очевидно, что всегда справедливо следующее неравенство:
LCC (C) >=TCC (C).
Метрики ТСС и LCC индицируют степень связанности между видимыми методами класса. Видимые методы либо определены в классе, либо унаследованы им. Конечно, очень полезны метрики связности для видимых методов, которые определены только внутри класса — ведь здесь исключается влияние связности суперкласса. Очевидно, что метрики локальной связности класса определяются на основе локального абстрактного класса. Отметим, что для локальной связности экземплярные переменные и вызываемые методы могут включать унаследованные переменные.