Чем отличаются императивная, объектно-ориентированная и функциональная парадигмы программирования?

Ответ

Это три разные парадигмы, определяющие стиль написания и структуру программ.

1. Императивное программирование

Описывает процесс вычислений в виде последовательности команд, изменяющих состояние программы. Код отвечает на вопрос "как" достичь результата.

  • Ключевая идея: Пошаговые инструкции.
  • Управление состоянием: Прямое изменение переменных.

Пример (Python):

# Задача: удвоить каждый элемент списка
numbers = [1, 2, 3]
doubled_numbers = []

for num in numbers:
    doubled_numbers.append(num * 2)
# doubled_numbers теперь [2, 4, 6]

2. Объектно-ориентированное программирование (ООП)

Частный случай императивного программирования, где код организуется вокруг объектов, которые объединяют данные и методы для работы с ними. Это помогает структурировать сложные системы.

  • Ключевая идея: Взаимодействие объектов.
  • Управление состоянием: Состояние инкапсулировано внутри объектов.

Пример (Python):

class NumberList:
    def __init__(self, numbers):
        self._numbers = numbers

    def double(self):
        # Метод изменяет состояние объекта
        self._numbers = [n * 2 for n in self._numbers]

    def get_values(self):
        return self._numbers

num_list = NumberList([1, 2, 3])
num_list.double()
# num_list.get_values() вернет [2, 4, 6]

3. Функциональное программирование (ФП)

Описывает вычисления как оценку математических функций и избегает изменяемого состояния. Код отвечает на вопрос "что" нужно сделать.

  • Ключевая идея: Применение функций к данным.
  • Управление состоянием: Избегание изменяемого состояния, данные неизменяемы (immutable).

Пример (Python):

# Задача: удвоить каждый элемент списка
numbers = [1, 2, 3]

# Функция map применяет lambda-функцию к каждому элементу
doubled_numbers = list(map(lambda x: x * 2, numbers))
# doubled_numbers теперь [2, 4, 6]

Итог: Императивный подход — это основа, ООП добавляет структуру через объекты, а ФП предлагает декларативный подход с фокусом на неизменяемость и чистые функции.