Парадигмы программирования

Парадигма в переводе с греческого “пример, модель, образец”.
В программировании - это набор принципов и методов, которые определяют стиль написания программ и взаимодействие с данными. Она устанавливает основные правила и подходы к решению задач, влияет на способ организации кода, структуру данных и алгоритмы

Процедурное программирование

подробнее

Программа написанная в процедурном стиле ожидает на вход какие-то данные, выполняет ряд каких-то процедур и возвращает какой-то результат.

Функциональное программирование

подробнее

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

Основные принципы функционального программирования:

  1. Чистые функции (Pure Functions)
    Чистая функция:
    • Всегда возвращает одинаковый результат для одинаковых аргументов
    • Не имеет побочных эффектов (не изменяет внешнее состояние)
    • Не зависит от внешнего состояния
  2. Неизменяемость (Immutability)
    • Данные не изменяются после создания
    • Вместо изменения создается новая версия данных
  3. Функции высшего порядка (Higher-Order Functions)
    Функции, которые:
    • Принимают другие функции как аргументы
    • Возвращают функции как результат
  4. Композиция функций
    • Создание сложных функций из простых
  5. Рекурсия вместо циклов

Функциональные концепции в Python:

  • Встроенные функции высшего порядка:
numbers = [1, 2, 3, 4, 5]

# map - применяет функцию ко всем элементам
squared = list(map(lambda x: x**2, numbers))
print(squared)  # [1, 4, 9, 16, 25]

# filter - фильтрует элементы
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens)    # [2, 4]

# reduce - сворачивает список в одно значение
from functools import reduce
sum_all = reduce(lambda x, y: x + y, numbers)
print(sum_all)  # 15
  • List comprehensions (частично функциональные):
# Функциональный стиль
squares = [x**2 for x in range(10) if x % 2 == 0]
# Эквивалентно:
squares = list(map(lambda x: x**2, filter(lambda x: x % 2 == 0, range(10))))
  • Lambda функции:
# Анонимные функции для краткости
points = [(1, 2), (3, 1), (5, 4)]
sorted_points = sorted(points, key=lambda point: point[1])
print(sorted_points)  # [(3, 1), (1, 2), (5, 4)]

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

подробнее

Объектно-ориентированное программирование (ООП) — это парадигма программирования, в которой программа строится вокруг объектов, которые объединяют данные (атрибуты) и поведение (методы).