В первую очередь вспомним термин «парадигма» — это способ мышления, способ восприятия чего-то. Человеческий мозг просто не может воспринимать окружающий мир целиком со всеми его проявлениями. Мозг упрощает получаемую информацию, приводит ее к какой-то системе. Чтобы что-то понять, вы должны это упростить. Постепенно вы будете углубляться в знаниях, но в начале вам нужно понять общую схему. Так вот парадигма программирования – это общая схема, которая показывает, каким способом человек превращает техническое задание в программный код.
Процесс превращения ТЗ в код происходит следующим образом: человек берет задание, затем делит его в голове на какие-то части (на какие именно части, как раз и описывает парадигма) и потом эти части превращает в программный код.
Процедурная парадигма
Самая простая парадигма программирования, которую вы, скорее всего, встречали на уроках информатики в школе, это процедурная парадигма – последовательное алгоритмическое проведение каких-то действий. Пример такой парадигмы – любой рецепт. Чтобы приготовить борщ, нужно 1) взять кастрюлю 2) набрать в нее воды 3) поставить на плиту 4) положить в нее продукты… и так далее. Последовательное алгоритмическое выполнение каких-то действий – это самая простая парадигма, поэтому первые программы были написаны именно по ней. Но у такой парадигмы есть один большой минус – если вам нужно описать что-то реально сложное, например, работу целого завода, запихнуть все шаги в рамках одной процедуры практически невозможно. Программа будет становиться все сложнее и сложнее, в какой-то момент она станет сложнее, чем способен понять человек. В этом случае она перестает быть поддерживаемой, ее придется выбросить и писать новую, более понятную.
Объектно-ориентированная парадигма
ООП – одна из первых парадигм в программировании. Она достаточно простая и решает главную проблему – что делать со сложной предметной областью и сложным кодом. Кроме того, такая парадигма еще и универсальна. Именно поэтому ООП так хорошо прижилась.
Суть парадигмы объектно-ориентированного программирования – воспринимать всю предметную область в виде объектов. Объект – это нечто, имеющее свое состояние и поведение. Человеку очень легко мыслить в категориях объектов, потому что мы живем в мире объектов. Вот стул, вот компьютер, вот рука. Все это объекты. В отличие от функциональной парадигмы, которая требует перестраивания мышления, чтобы представить всю задачу в виде функций, ООП отлично ложится на привычное мышление человека.
Принцип работы ООП
Объектно-ориентированное программирование рассматривает всю систему в виде объектов, которые каким-то образом друг с другом взаимодействуют. То есть мы декомпозируем задание в виде объектов. Например, у нас есть задача сварить борщ. В процедурной парадигме разделение задачи выглядит так: сходить в магазин, купить ингредиенты, почистить их, положить в кастрюлю, залить водой, сварить. В ООП парадигме это же задание будет выглядеть иначе. Первым делом мы выделяем объекты: объект магазин, объект продукты (разных видов), объект кастрюля, есть объект — финальный борщ. Можно выделить намного больше объектов. Эти объекты каким-то образом друг с другом взаимодействуют. У магазина мы будем вызывать методы «купить товары». У товаров, полученных из магазина, будем вызывать методы «очистить». У кастрюли вызовем методы «сложить продукты в кастрюлю». У плиты вызовем метод «подогреть» и так далее.
Прозрачная структура программы
Поскольку человеческому мозгу легче мыслить объектами, мы автоматически понимаем, что и у какого объекта должно быть. Человеку легко понять, где расположить те или иные методы в коде. Поэтому с ООП мы получаем наиболее понятную структуру программы, а то, что понятно — надежно. Обычно программа становится не поддерживаемой, потому что программист не понимает, куда положить следующий кусок кода или где искать ранее написанный. А ООП обеспечивает очень легкую и прозрачную структуру расположения кода.
ООП — универсальная парадигма
Есть и другие парадигмы программирования, которые возникли позже. Но на сегодняшний день только объектно-ориентированная парадигма является абсолютно универсальной. Подавляющее число задач на ней решается максимально эффективно. Почему возникли другие парадигмы? Программировать мы начинаем все больше и сейчас при помощи программ решаются такие задачи, которые раньше казались невозможными. Но есть задачи, которые не решаются при помощи ООП. Например, потоковая обработка данных, когда нужно быстро обработать большие объемы информации. Это может быть какая-то статистика, данные по посещениям, события, принятые с датчиков и т.д. Для решения таких задач лучше использовать функциональные парадигмы.
Чем дальше будет развиваться программирование и чем больше новых ниш бизнеса будет существовать, тем больше появится задач, для решения которых потребуются другие парадигмы. Это нормально. Но на мой взгляд ООП по-прежнему будет подходить к большему числу задач, просто потому что она: 1) простая 2) достаточно универсальная. К ООП языкам относятся Java, Python, Ruby, C#, C++, Kotlin и другие.