1. Глубина дерева наследования (dit)

Глубина дерева наследования (Depth of Inheritance Tree - DIT) позволяет определить количество классов-предков, которые потенциально оказывают влияние на данный класс.

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

  • Большое количество предков делает поведение класса менее предсказуемым.

  • Глубокие деревья наследования усложняют проект, поскольку включают большее число атрибутов и методов в классах-потомках.

  • Чем глубже положение класса в дереве иерархии, тем больше повторное использование его методов.

Глубина класса в дереве наследования – длина пути в простейшей модели иерархии наследования классов от корня до вершины, соответствующей рассматриваемому классу. Шкала значений абсолютная.

Данное определение справедливо только для ОО проектов и программ, модель иерархии наследования которых представляет собой дерево. В литературе, как правило, не рекомендуется проектировать классы, наследующие свойства и методы сразу от нескольких предков, однако на практике используется так называемое множественное наследование. Для измерения глубины класса в таких случаях должна использоваться метрика глубина класса в графе наследования

Метрика связана с сопровождаемостью и повторной используемостью программ. Во-первых, чем глубже конкретный класс в иерархии, тем более "проработанной" становится проблемная область и выше потенциальное повторное использование унаследованных методов (поскольку их становится все больше и больше). Но, во-вторых, чем глубже класс в иерархии наследования и больше число методов в нем, тем сложнее предсказать поведение объекта–представителя класса (а значит, и разобраться в том, что написано в программе).

Пример:

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

class GrandFather {};

class Father : public GrandFather {};

class Son : public Father {}

В этом случае:

  • DIT(GrandFather) = 0

  • DIT(Father) = 1

  • DIT(Son) = 2.

    1. Количество потомков (noc)

Количество потомков (Number Of Children - NOC) позволяет определить количество непосредственных потомков данного класса. Число дуг в простейшей модели иерархии наследования классов, выходящих из вершины, соответствующей классу.

Шкала значений: абсолютная.

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

  • Чем больше потомков у класса, тем больше повторное использование его методов. Это положительное свойство.

  • Чем больше потомков у класса, тем больше вероятность неправильного использования базового класса-родителя. Это отрицательное свойство.

  • Чем больше потомков у класса, тем большее влияние он оказывает на систему в целом. Такой класс требует более тщательного тестирования.

Пример:

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

class GrandFather {};

class Father : public GrandFather {};

class Mother : public GrandFather {};

class Son : public Father, Mother{}

В этом случае:

  • NOC(GrandFather) = 2

  • NOC(Father) = 1

  • NOC(Mother) = 1

  • NOC(Son) =0.

    1. Ширина иерархии наследования (bih)

The breadth of the inheritance hierarchy (BIH). Максимальное число вершин на одном уровне в простейшей модели наследования классов. Шкала значений: абсолютная. Эта метрика применима только в том случае, когда иерархия наследования представлена деревом.