Что такое процедурное программирование?

«Что такое процедурное программирование?» — вопрос из категории Архитектура, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Процедурное программирование — это парадигма, основанная на концепции вызова процедур (функций, подпрограмм). Программа структурируется как последовательность шагов-инструкций, организованных в функции, которые манипулируют данными. Данные и функции, их обрабатывающие, часто разделены.

Ключевые характеристики в контексте C/C++:

  • Акцент на функциях: Логика инкапсулируется в функции, которые можно вызывать многократно.
  • Поток управления: Используются последовательные операторы, циклы (for, while) и условные переходы (if, switch).
  • Локальные и глобальные данные: Функции работают с данными, переданными через параметры, или с глобальными переменными.

Пример на C++ (стиль процедурного программирования):

#include <iostream>
#include <vector>
#include <numeric>

// Процедуры (функции), оперирующие данными
void printVector(const std::vector<int>& vec) {
    for (int val : vec) {
        std::cout << val << " ";
    }
    std::cout << std::endl;
}

int calculateSum(const std::vector<int>& vec) {
    return std::accumulate(vec.begin(), vec.end(), 0);
}

void scaleVector(std::vector<int>& vec, int factor) {
    for (int& val : vec) {
        val *= factor;
    }
}

int main() { // Главная процедура
    std::vector<int> data = {1, 2, 3, 4, 5};

    printVector(data);
    std::cout << "Sum: " << calculateSum(data) << std::endl;

    scaleVector(data, 2);
    printVector(data);

    return 0;
}

Плюсы:

  • Прямолинейность и простота для небольших задач.
  • Чёткий поток выполнения.
  • Эффективное использование памяти (минимальные накладные расходы).

Минусы:

  • Сложность управления состоянием в больших проектах (риск появления множества глобальных переменных).
  • Слабая связь между данными и функциями, что может привести к "spaghetti-коду".
  • Сложность повторного использования и модификации кода по сравнению с объектно-ориентированным подходом.

В C++ процедурный стиль часто сочетается с другими парадигмами (ООП, обобщённое программирование).