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