НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ


Мова програмування Java. W3Schools українською. Уроки для початківців від hyperskill

En

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


Теорія

Різні задачі програмування можна вирішувати по-різному: може знадобитися написати функцію, створити окремий клас із методами тощо. Усі такі варіанти обєднуються в різні підходи програмування, які також називаються парадигмами. Нижче ми розглянемо концепцію парадигм і проаналізуємо дві основні парадигми: імперативну та декларативну та їх типи.

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

Майже всі сучасні мови є мультипарадигмальними. Вони легко поєднують можливості імперативного та декларативного підходів. Проте, у розділі про кожну парадигму ми наведемо список мов, де, серед інших парадигм, також реалізована та, що обговорюється в розділі.


§1. Імперативна парадигма

Імперативна парадигма є однією з найстаріших парадигм програмування. Вона тісно пов’язана з архітектурою машини. Наказова програма подібна до наказів, виражених наказовим способом у природних мовах. Це послідовність інструкцій, які процесор повинен виконувати крок за кроком. Основна увага цієї парадигми зосереджена на тому, як досягти мети. Парадигма складається з кількох інструкцій, і після виконання їх усіх результат зберігається або відображається.

Наприклад, ви хочете відобразити фразу "Привіт, <ім’я користувача>!" на екрані. Як програма повинна це робити? За допомогою наступних кроків:

  1. запитати ім’я користувача
  2. прочитати та запам’ятати ім’я користувача
  3. показати результат

Імперативне програмування поділяється на три великі категорії: парадигма процедурного програмування, об’єктно-орієнтоване програмування та підхід до паралельної обробки. Поговоримо про них докладніше.


§2. Парадигма процедурного програмування

Парадигма процедурного програмування базується на концепції викликів процедур, у яких інструкції структуровані в процедури, також відомі як підпрограми або функції. Вони являють собою список інструкцій, які повідомляють комп’ютеру, що робити крок за кроком. Іншими словами, комп’ютер приймає вхідні дані та обробляє їх послідовно, запам’ятовуючи кожну нову зміну.

Процедурне програмування підходить для програмування загального призначення для виконання типових завдань. Отже, це може бути невелика обчислювальна проблема, наприклад обчислення факториалу, або знаходження площі фігури, або відображення деякої інформації/фрази, як-от «Привіт, світ!». Крім того, код можна повторно використовувати в різних частинах програми без необхідності його копіювання.

Мовами програмування, у яких реалізована парадигма процедурного програмування, є C, Java, C++, Kotlin, ColdFusion та Pascal.


§3. Об’єктно-орієнтоване програмування

Об’єктно-орієнтоване програмування або ООП – це парадигма, у якій програма написана як набір класів. Кожен клас має екземпляри, які називаються об’єктами.

Клас — це спосіб загального опису сутності, визначення звичайного стану та поведінки, яка залежить від цього стану, а також звичайні правила взаємодії з цією сутністю. Формально клас розглядається як набір даних, таких як поля, атрибути, члени класу та функції, тобто методи для роботи з ними.

Наприклад, у нас є сутність cat (кіт), і ми хочемо описати її за допомогою класу. Отже, cat буде об’єктом відповідного класу Cat. У cat є деякі атрибути, наприклад, хвіст, лапи, кігті, морда, вуха, вуса. Cat (кіт) поводиться так, як він зазвичай, наприклад, він може бігати, стрибати, нявкати, їсти, здирати шпалери. Усе це будуть cat методи.

ООП може вирішувати майже всі типові проблеми реального життя, де потрібно моделювати типові об’єкти та працювати з ними.

Мовами програмування, які реалізували парадигму ООП, є Ruby, Kotlin, Java, C++, Python, Simula (перша мова ООП), Smalltalk, Visual Basic .NET та Objective-C.

Ви могли помітити деяке перекриття між списками мов для процедурної парадигми та ООП. Це не означає, що всі мови ООП є процедурними, і навпаки. Як було сказано раніше, більшість сучасних мов програмування можуть працювати з кількома парадигмами.


§4. Підхід до паралельної обробки

Паралельна обробка допомагає скоротити час виконання інструкцій. Це робиться шляхом спільного використання або розпаралелювання інструкцій між кількома процесорами. Сенс підходу можна сформулювати однією фразою: «розділяй і володарюй». Прикладами мов програмування, які підтримують паралельну обробку, є NESL (одна з найстаріших) та C / C++ (також підтримується завдяки деяким функціям бібліотеки).


§5. Декларативна парадигма

Декларативное програмування - це парадигма програмування, в якій важливо визначити проблему та очікуваний результат її вирішення. Тобто на відміну від імперативної парадигми, де необхідно відповісти на запитання "Як це зробити?" потрібно поставити питання "Що потрібно зробити?" та "Який буде результат роботи?". Отже, замість того, щоб надавати покрокові інструкції, ви повідомляєте системі, що вам потрібно, і дозволяєте їй спробувати знайти рішення.

Імперативне та декларативне програмування

Декларативне програмування поділяється на типи парадигми логічного, функціонального та бази даних. Ми опишемо їх нижче.


§6. Парадигма логічного програмування

Логічне програмування — це парадигма програмування, яка значною мірою базується на формальній логіці. Будь-яка програма, написана мовою логічного програмування, — це набір речень у логічній формі, які виражають факти та правила щодо певної проблемної області.

Отже, основні твердження логічного програмування такі:

  • Факти — це фундаментальні твердження про предметну область, як-от «Сократ — людина».
  • Правила дозволяють робити висновки щодо фактів у домені («Усі люди смертні»).
  • Запити – це запитання щодо цього домену («Чи смертний Сократ?»)

Загалом тут стоїть завдання знайти відповідь на запит на основі фактів і правил.

Основні сімейства мов логічного програмування включають Пролог (Prolog), програмування набору відповідей (Answer Set Programming - ASP) і журнал даних (Datalog).


§7. Парадигма функціонального програмування

Функціональне програмування – це парадигма програмування, у якій процес обчислення інтерпретується як обчислення значень функцій. Функція в такому випадку схожа на математичну. Тобто функція, у якій на вході є незмінений масив, а на виході – новий масив із новими даними. Цим математична функція відрізняється від функції процедурного програмування, де функція — це послідовність дій, які змінюють вихідні дані.

Ось простий приклад: у вас може бути функція, яка приймає список чисел як вхідні дані та повертає новий список із квадратами цих чисел. Це не змінює вихідний список чисел.

Мовами програмування, у яких реалізована парадигма функціонального програмування, є JavaScript, Haskell, Scala, Erlang, Lisp, ML, Clojure, OCaml та F#.


§8. Парадигма програмування бази даних

Ця методологія програмування базується на роботі з даними. Дані зберігаються в базі даних, і запити до цієї бази виконуються спеціальною мовою, наприклад, SQL. За допомогою цих мов ви можете отримати доступ до даних для фільтрації, перетворень, обчислення статистики тощо. Програмні інструкції визначаються даними, а не жорстко закодованою серією кроків.

Програма бази даних є серцем бізнес-інформаційної системи, що дозволяє створювати файли, вводити дані, оновлювати, надсилати запити та створювати звіти.


§9. Висновок

Підсумовуючи,

  • Різні підходи до створення програм називаються парадигмами.
  • Існує дві основні парадигми програмування: імперативна та декларативна.
  • Імперативна парадигма зосереджена на досягненні результату за допомогою покрокових інструкцій, які послідовно обробляють дані.
  • Імперативна парадигма включає парадигму процедурного програмування, об’єктно-орієнтоване програмування та підхід до паралельної обробки.
  • Декларативна парадигма зосереджується на завданні та намагається отримати очікуваний результат.
  • Декларативна парадигма включає логічну, функціональну парадигму та парадигму бази даних.

Ви повинні пам’ятати, що більшість сучасних мов програмування можуть працювати з кількома парадигмами. У розділах вище ми перерахували мови, які зазвичай асоціюються з певною парадигмою. Але це не означає, що їх можна використовувати лише з однією певною парадигмою.


Практичні завдання та відповіді

Даються завдання та варіанти відповідей. Правильний варіант виділений синім кольором.

№1. Виберіть парадигму

Питання: Програми, написані в цій парадигмі, послідовно змінюють вхідні дані відповідно до заданих інструкцій. Як називається ця парадигма?

Виберіть один варіант зі списку:

  • Функціональна
  • Паралельна
  • Процедурна ✔
  • База даних

№2. Виберіть парадигму

Питання: Програми, написані в цій парадигмі, засновані на об’єктах реального життя. Як називається ця парадигма?

Виберіть один варіант зі списку:

  • Логічна
  • База даних
  • Об’єктно-орієнтована ✔
  • Процедурна
  • Паралельна
  • Функціональна

№3. Зіставте означення

Питання: Як виглядає програма, написана в наступних парадигмах?

  • Функціональна - Програма - це обчислення значень функцій.
  • Процедурна - Програма - це список покрокових дій.
  • ООП - Програма - пишеться як набір класів.
  • Логічна - Програма - це набір логічних речень, які виражають факти та правила щодо певної проблеми

№4. Основні твердження логічного програмування

Питання: Установіть відповідність між основними твердженнями логічного програмування та їхніми значеннями.
Установіть відповідність між елементами лівого та правого стовпчиків:

  • факт - Окунь — це риба.
  • правило - Всі риби вміють плавати.
  • запит - Чи вміє окунь плавати?

№5. Об’єктні методи

Програміст моделює сутність car (автомобіль), яка є об’єктом класу Car. Що з наведеного буде Car методом?

Виберіть один або кілька варіантів зі списку:

  • двигун
  • відчинити двері ✔
  • змінити швидкість ✔
  • трансмісія

Підказка: В об’єктно-орієнтованому програмуванні методи — це функції, які належать до класу і можуть отримувати доступ або змінювати стан об’єкта цього класу. Зазвичай вони представляють дії або поведінку, які може виконувати об’єкт. Виходячи з наданих параметрів, відкриття дверей і зміна швидкості можуть бути методами автомобіля, оскільки це дії, які може виконувати об’єкт автомобіля, і вони можуть впливати на стан автомобіля (наприклад, його положення або швидкість). Трансмісія і двигун, швидше за все, є атрибутами автомобіля, оскільки це властивості або характеристики, які має об’єкт автомобіля).


№6. Парадигми програмування

Питання: Які дві основні парадигми програмування?

Виберіть один або кілька варіантів зі списку:

  • оклична
  • імперативна ✔
  • питальна
  • декларативна ✔

№7. Імперативна парадигма

Питання: В основі імперативної парадигми лежить:

Виберіть один варіант зі списку:

  • логічні функції та інструкції
  • прогнозування результатів за доступною статистикою
  • база даних загальних знань
  • покрокові інструкції, що змінюють дані послідовно ✔

Пояснення: В основі імперативної парадигми лежать покрокові інструкції, що змінюють дані послідовно. Ця парадигма описує, як потрібно виконувати певну послідовність дій для досягнення певної мети. Код написаний в імперативному стилі містить послідовність інструкцій, які виконуються розпорядником програми.


№8. Типи декларативних парадигм

Питання: Які типи програмування входять до декларативної парадигми?

Виберіть один або кілька варіантів зі списку:

  • ООП
  • Логічний ✔
  • Функціональний ✔
  • Процедурний

Ви також можете переглянути Урок на сайті hyperskill.org.