Процедурный подход подразумевает четкое разделение программы на данные и функции, обрабатывающие эти данные. Это важное для вычислений разделение, т.к. данные и функции обладают разными свойствами: данные пассивны, но при этом живут долго и сохраняются в памяти; функции активны, но нигде не “существуют”, а только лишь “происходят/случаются/выполняются”.
Информационную систему, построенную по этому методу, часто сложно поддерживать. Основная
сложность в том, что функции должны знать структуру данных. Различные структуры
могут иметь отличающиеся форматы, поэтому функции содержат if-else
и switch
операторы, не относящиеся к функциональности. Небольшие изменения в структуре
данных могут приводить к значительным изменениям в функциях.
Кроме того, связь между данными и функциями получается односторонней: можно легко понять, от каких типов структур данных зависит функция, но сложно узнать, какие функции зависят от конкретной структуры. К тому же число функций, зависящих от структуры данных, принципиально не ограничено, поэтому такие неявные связи данных и функций могут распространиться по всей программе.
На этапе моделирования такое деление является неверным, надуманным и механическим, в отличие от декомпозиции по местам естественного сочленения (по поведению). См. Object thinking - West, David - идеи Платона о полезной декомпозиции и Два вида анализа в науке - противопоставление двух видов анализа в науке.
Неэффективность обусловлена ошибочным предположением - данные и функции напрямую соответствуют объектам и их изменениям в реальном мире. Это неверно, прямых аналогов в реальном мире у данных и функций нет, к тому же они и не должны соответствовать чему-то в реальном мире, т.к. такое соответствие - это задача бизнес-модели, а не компьютерной системы.
Данные и функции в информационной системе не отражают реальные вещи и изменения