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

Не пропустіть Хто відкриє другий фронт у війні України з росією

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

Що потрібно знати для початку

  • Імперативне програмування – це форма програмування, у якій програміст дає вказівки машині, як змінити її стан, а потім описує дії та отримані результати.

  • Процедурне програмування групує інструкції в процедури та має певний набір кроків для виконання. Під час виконання програми можна викликати будь-яку процедуру з будь-якого місця.

  • Об'єктно-орієнтоване програмування групує інструкції з частиною стану, з якою вони працюють, та розглядає програму як множину "об'єктів", що взаємодіють між собою.

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

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

  • Логічне програмування – це коли відповіддю на запитання про набір фактів і правил є бажаний результат. Він заснований на з'ясуванні того, як отримати нові факти з даних фактів, дотримуючись набору правил.

  • Оптимізація – це процес, у якому бажаний результат формулюється як рішення оптимізаційної задачі, яка полягає у виборі найкращого елемента (за певним критерієм) із набору варіантів.

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

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

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

Цікаво Контрнаступ ЗСУ раптово перевиховав сіячів "русского міра"

Які основні поняття об'єктно-орієнтованого програмування

Об'єктно-орієнтоване програмування (ООП) – це парадигма програмування, в якій основними поняттями є об'єкти і класи. Парадигма вперше виникла в 1960-х роках, але широко використовувалася лише в 1990-х роках. З появою комп'ютерів і комп'ютерних мереж почалося створення програмного забезпечення, яке потребувало великої кількості методів структурування програм.

У центрі ООП перебуває поняття об'єкта. Об'єкт – це сутність, екземпляр класу, якому можна надсилати повідомлення та який може відповідати на них, використовуючи свої дані. Дані об'єкта приховані від решти програми. Приховування даних називається інкапсуляцією.

Наявності інкапсуляції достатньо для об'єктивності мови програмування, але ще не означає її об'єктної орієнтованості, тому для цього необхідна наявність успадкування.

Слід зазначити, що часто стверджують, що абстракція є ще однією важливою рисою ООП, яку слід висвітлити. Офіційно поняття не входило до обов'язкових ознак ООП, але не варто його списувати.

Абстракція – це спосіб виокремлення сукупності суттєвих ознак об'єкта, виключаючи з розгляду несуттєві. Відповідно, абстракція – це сукупність усіх таких характеристик.

Інкапсуляція – це властивість системи, яка дозволяє об'єднати дані та методи, які з ними працюють, у класі та приховати деталі реалізації від користувача.

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

Поліморфізм – це здатність системи використовувати об’єкти з однаковим інтерфейсом, незалежно від їх типу чи основної структури.

Клас визначається на основі типу доступу і може мати одне з таких значень:

  • Public (використовується для будь-якої точки програми за межами цього класу).

  • Private (лише для інших членів цього класу).

  • Protected (у членах цього класу та його похідних).

  • Internal (застосовується до типів в одній колекції).

Які основні поняття функціонального програмування

Функціональне програмування (ФП) – це парадигма програмування, де програми будуються шляхом застосування та компонування функцій. Імперативне програмування наголошує на змінах стану та виконанні серії інструкцій, а функціональне програмування наголошує на застосуванні функцій.

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

Ось кілька найпоширеніших мов функціонального програмування: Haskell, Clojure, Scala, Erlang, F#, Lisp.

Серед ключових елементів ФП варто виділити такі:

  • Функція як об'єкт першого класу (функцію можна побудувати в часі виконання, передавати як параметр, повертати і навіть отримати певне значення).

  • Функція вищого порядку (може приймати функції як параметри та повертати функції як значення).

  • Чиста функція (приймає і повертає те ж саме значення, що і вхідне значення без будь-яких змін даних).

  • Анонімна функція (функція без назви, зазвичай використовується протягом короткого періоду).

  • Рекурсія (дозволяє писати стислі алгоритми на основі вхідних даних до функцій).

  • Стійка структура даних (структура даних зберігає свою попередню версію під час модифікації).

  • Нестроге обчислення (оцінка функції, коли вона викликається).

Ключові відмінності функціонального та об'єктно-орієнтованого програмування

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

Коли ми аналізуємо два типи програмування, ми пам'ятаємо, що вони належать або до декларативної моделі (ФП), де код служить описом того, що ви прагнете зробити, або до імперативної моделі (OOП), яка використовує кілька команд, відповідальних за певну дію.

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

Основна відмінність між двома парадигмами полягає в концепціях. Основним фокусом розробки програми у функціонально-орієнтованому контексті є сама функція. Замість того, щоб зосереджуватися на функціях, об'єктно-орієнтоване програмування акцентує увагу на даних і способах їх використання. В об’єктно-орієнтованому програмуванні об'єкти – це одиниці, які зберігають дані та можуть швидко змінюватися.

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

Про головне ЗСУ вломили по-повній: як правда про втечу росіян з Харківщини спливає у їхніх некрологах

Суттєві властивості парадигм об'єктно-орієнтованого та функціонального програмування наведено в порівняльній таблиці.

Характеристика

ФП

ООП

Фокус

На оцінці функції

На понятті об'єктів

Дані

Незмінні

Змінні

Модель

Декларативна

Імперативна

Паралельне програмування

Дозволяє

Дозволяє без високорівневих абстракцій

Виконання

У певному порядку

Рандомно

Ітерація

Використання рекурсії

Використання циклів

Основний елемент

Функції

Об'єкти та класи

Висновок

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

Тому, незважаючи на те, що парадигми програмування відрізняються одна від одної, основні принципи розробки програмного продукту близькі.

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