💻 ПРОГРАММИРОВАНИЕ

Парадигмы программирования: четыре разных способа думать о коде

Императивный, объектно-ориентированный, функциональный, декларативный — это не названия языков, а способы мышления. Один и тот же результат можно описать совершенно по-разному, и выбор стиля меняет всё.

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

Зачем вообще разные стили

Парадигма отвечает на вопрос «как мы вообще думаем о программе?». Это как стили в архитектуре: и готический собор, и хрущёвка дают крышу над головой, но исходят из совершенно разных принципов. Понимание парадигм важнее знания конкретного языка: освоив способ мышления, вы переносите его между языками. Многие современные языки к тому же мультипарадигменны — позволяют смешивать подходы.

Императивная: командуй машиной

Самая базовая и интуитивная. Программа — это пошаговый список приказов: сделай это, затем то, измени вот эту переменную. Вы явно управляете тем, как достигается результат. С неё почти все начинают.

total = 0
for i in range(1, 6):
    total = total + i   # шаг за шагом меняем состояние
print(total)  # 15

Объектно-ориентированная: мир из объектов

ООП предлагает моделировать программу как набор объектов, каждый из которых хранит свои данные и умеет что-то делать. Объект «банковский счёт» знает свой баланс и умеет пополняться и снимать. Идея в том, чтобы собрать данные и действия над ними вместе и спрятать внутренние детали. На ООП во многом построены Java, C#, C++, большой пласт Python.

class Schet:
    def __init__(self):
        self.balans = 0
    def popolnit(self, summa):
        self.balans += summa

s = Schet()
s.popolnit(100)
print(s.balans)  # 100

Функциональная: композиция функций

Здесь программа — это сборка из чистых функций, превращающих вход в выход без побочных эффектов и изменяемого состояния. Вместо «измени данные» — «получи новые на основе старых». Этот стиль ценят за предсказуемость; на нём построены Haskell, Elixir, а его приёмы есть почти везде.

numbers = range(1, 6)
total = sum(map(lambda x: x, numbers))
print(total)  # 15 — без единой изменяемой переменной

Декларативная: опиши результат, а не путь

В декларативном подходе вы описываете что хотите получить, а как — забота системы. Ярчайший пример — SQL: вы пишете «дай всех пользователей старше 18, отсортированных по имени», но не указываете, как именно базе их искать и сортировать.

SELECT name FROM users
WHERE age >= 18
ORDER BY name;
ПарадигмаКлючевая идеяГде встречается
ИмперативнаяКоманды по шагамC, Python, любой язык
Объектно-ориентированнаяОбъекты с данными и поведениемJava, C#, C++
ФункциональнаяКомпозиция чистых функцийHaskell, Elixir
ДекларативнаяОписать итог, не путь к немуSQL, HTML

Не религия, а инструменты

Новички иногда воспринимают парадигмы как соперничающие лагеря, где надо выбрать «правильную сторону». На деле это набор линз, и опытный инженер переключает их под задачу: моделирует предметную область объектами, обработку данных пишет в функциональном стиле, а запрос к базе формулирует декларативно — иногда в одной программе. Знать несколько парадигм — значит иметь больше способов посмотреть на проблему. А чем больше углов зрения, тем выше шанс найти простое и красивое решение.

#ООП#основы#парадигмы#стили программирования