распределить различные инициализирующие операции по нескольким модулям, которые в
большей степени отвечают за соответствующие действия.
Коммуникационная связность возникает, когда элементы (или методы класса) объединены
в модуль, поскольку они имеют доступ к одним и тем же устройствам ввода/вывода.
Модуль работает как администратор устройства.
Последовательная связность возникает, если элементы модуля должны активизироваться
в определенном порядке. Эта связность часто является следствием попытки избежать
зацепления по управлению. Опять-таки, обычно находится лучшая схема, если поднять
уровень абстракции. (Конечно же, необходимость выполнять действия в определенном
порядке должна быть выражена на некотором уровне абстракции. Важно скрыть эту
необходимость от других уровней абстракции.)
Функциональная связность желательна. При ее наличии все элементы модуля связаны
выполнением единой задачи.
Наконец, связность на уровне данных возникает в модуле, когда он внутренним образом
определяет набор данных и экспортирует подпрограммы (процедуры, функции, методы),
которые манипулируют этой структурой данных. Связность по данным возникает, если
модуль используется для реализации абстрактного типа данных.
Часто можно оценить степень связности модуля, если кратко сформулировать
предложение, описывающее его предназначение (вспомните CRC-карточки из главы 2).
Следующий набор тестов был предложен Константайном:
1. Если предложение, которое описывает предназначение модуля, составное, то есть
содержит запятую и более одного глагола, то модуль (скорее всего) выполняет
более одной функции. Вероятно, он обладает последовательной или
коммуникационной связностью.
2. Если предложение содержит слова, имеющие отношение ко времени (такие, как
«первый», «следующий», «затем», «после», «когда», «начать»), то модуль,
вероятно, обладает последовательной или временной связностью. Например:
«Подождать, пока экземпляр не получит сигнал, что пользователь вставил
электронную карту, затем запросить индивидуальный идентификационный номер».
3. Если предикат предложения не содержит единого, конкретного объекта,
следующего за глаголом, то модуль, вероятно, обладает логической связностью.
Например, утверждение «редактировать все данные» обладает логической
связностью. Высказывание «редактировать исходные данные» может обладать
функциональной связностью.
4. Если предложение содержит слова вроде «инициализировать» или «обновить», то
модуль скорее всего обладает временной связностью.
17.1.3. Зацепление и связность в ООП
В главе 1 мы отметили несколько аспектов, на основании которых классы могут
рассматриваться как логическое продолжение модулей. Тем самым правила разработки
для модулей легко переносятся на объекты. Различные классы должны быть зацеплены
как можно меньше — не только для большей понятности, но также и для того, чтобы их
легче было извлечь из одного приложения и повторно использовать в новых проектах. С
другой стороны, каждый объект класса должен иметь конкретную цель, а методы обязаны
способствовать этой цели тем или иным способом. То есть объект должен быть связным.
PDF created with pdfFactory Pro trial version www.pdffactory.com