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