магазин ткани в москве
|
Методы анализа - Коммуникативная связность |
Страница 16 из 42
Коммуникативная связность
При коммуникативной связности элементы-обработчики модуля используют одни и те же данные, например внешние данные. Пример коммуникативно связного модуля: Модуль Отчет и средняя зарплата используется Таблица зарплаты служащих сгенерировать Отчет по зарплате вычислить параметр Средняя зарплата вернуть Отчет по зарплате. Средняя зарплата Конец модуля Здесь все элементы модуля работают со структурой Таблица зарплаты служащих. С точки зрения клиента проблема применения коммуникативно связного модуля состоит в избыточности получаемых результатов. Например, клиенту требуется только отчет по зарплате, он не нуждается в значении средней зарплаты. Такой клиент будет вынужден выполнять избыточную работу — выделение в полученных данных материала отчета. Почти всегда разбиение коммуникативно связного модуля на отдельные функционально связные модули улучшает сопровождаемость системы. Попытаемся провести аналогию между информационной и коммуникативной связностью. Модули с коммуникативной и информационной связностью подобны в том, что содержат элементы, связанные по данным. Их удобно использовать, потому что лишь немногие элементы в этих модулях связаны с внешней средой. Главное различие между ними — информационно связный модуль работает подобно сборочной линии; его обработчики действуют в определенном порядке; в коммуникативно связном модуле порядок выполнения действий безразличен. В нашем примере не имеет значения, когда генерируется отчет (до, после или одновременно с вычислением средней зарплаты).
Процедурная связность
При достижении процедурной связности мы попадаем в пограничную область между хорошей сопровождаемостью (для модулей с более высокими уровнями связности) и плохой сопровождаемостью (для модулей с более низкими уровнями связности). Процедурно связный модуль состоит из элементов, реализующих независимые действия, для которых задан порядок работы, то есть порядок передачи управления. Зависимости по данным между элементами нет. Например: Модуль Вычисление средних значений используется Таблица-А. Таблица-В вычислить среднее по Таблица-А вычислить среднее по Таблица-В вернуть среднееТабл-А. среднееТабл-В Конец модуля Этот модуль вычисляет средние значения для двух полностью несвязанных таблиц Таблица-А и Таблица-В, каждая из которых имеет по 300 элементов. Теперь представим себе программиста, которому поручили реализовать данный модуль. Соблазнившись возможностью минимизации кода (использовать один цикл в интересах двух обработчиков, ведь они находятся внутри единого модуля!), программист пишет: Модуль Вычисление средних значений используется Таблица-А. Таблица-В суммаТабл-А := 0 суммаТабл-В := 0 для i := 1 до 300 суммаТабл-А := суммаТабл-А + Таблица-А(i) суммаТабл-В :- суммаТабл-В + Таблица-В(i) конец для среднееТабл-А := суммаТабл-А / 300 среднееТабл-В := суммаТабл-В / 300 вернуть среднееТабл-А, среднееТабл-В Конец модуля Для процедурной связности этот случай типичен — независимый (на уровне проблемы) код стал зависимым (на уровне реализации). Прошли годы, продукт сдали заказчику. И вдруг возникла задача сопровождения — модифицировать модуль под уменьшение размера таблицы В. Оцените, насколько удобно ее решать.
|