Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Статический анализ программ.doc
Скачиваний:
32
Добавлен:
01.05.2014
Размер:
82.43 Кб
Скачать

Категории классов: единицы повторного использования и реализации

Редко класс может быть повторно использован изолированно от других классов. Класс Copyпредоставляет хороший пример этого. Он должен повторно использоваться с абстрактными классамиReaderиWriter. Вообще говоря, любой класс имеет группу классов, с которыми он работает в кооперации, и от которых он не может быть легко отделен. Для повторного использования таких классов необходимо повторно использовать всю группу классов. Такая группа классов сильно связна и называется категориейклассов.

Категория классов (далее просто категория) - группа сильно связных классов, которые подчиняются следующим трем правилам:

  1. Классы в пределах категории закрытыот любых попыток изменения все вместе. Это означает, что, если один класс должен измениться, все классы в этой категории с большой вероятностью изменятся. Если любой из классов открыт для некоторой разновидности изменений, они все открыты для такой разновидности изменений.

  2. Классы в категории повторно используются только вместе. Они настолько взаимозависимы и не могут быть отделены друг от друга. Таким образом, если делается любая попытка повторного использования одного класса в категории, все другие классы должны повторно использоваться с ним.

  3. Классы в категории разделяют некоторую общую функцию или достигают некоторой общей цели.

Эти три правила внесены в список в порядке их важности. Правилом 3 может пожертвовать за правило 2, правилом 2 может пожертвовать за правило 1.

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

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

Зависимости между категориями - это то, чем мы должны управлять.

Так как категории являются, и единицей реализации, и единицей и повторного использования, это позволяет сделать следующие выводы: зависимости, которыми мы должны управлять - это зависимости между категориями, а не зависимости внутри категории. Внутри категории классы по определению  будут сильно зависимыми. Такая зависимость не нанесет большого вреда, поскольку классы категории используются повторно вместе, и закрыты вместе от одного и того же вида изменений.

Таким образом, мы можем сместить обсуждение зависимости  на один уровень выше, и обсуждать "Независимость", "Ответственность" и "Стабильность" категорий, а не классов. Категории с самой высокой стабильностью - это те категории, которые являются, и независимыми, и ответственными. Зависимости от устойчивых категорий - "хорошие" зависимости.

Метрики зависимостей

Ответственность, независимость и стабильность категории могут быть измерены путем подсчета зависимостей, которые взаимодействуют с этой категорией. Могут быть определены три метрики :

  • Ca:Центростремительное сцепление (Afferent Couplings). Количество классов вне этой категории, которые зависят от классов внутри этой категории.

  • Ce:Центробежное сцепление (Efferent Couplings).  Количество классов внутри этой категории, которые зависят от классов вне этой категории.

  • I:    Нестабильность (Instability ): I = Ce / (Ca+Ce).  Эта метрика имеет диапазон значений [0,1].I = 0 указывает максимально стабильную категорию.I = 1 указывает максимально не стабильную категорию.