Хоча термінологія далеко не стандартизована, загальний спосіб класифікувати основні парадигми програмування
- Процедурний
- Функціональний
- Логічні
- Об'єктно-орієнтована
- Родовий
Ви, здається, вже знаєте, що таке процедурне програмування.
У функціональних мовах функції розглядаються як об'єкти першокласного рівня. Іншими словами, ви можете передати функцію як аргумент іншій функції, або функція може повернути іншу функцію. Функціональна парадигма ґрунтується на обчисленні лямбда, а приклади функціональних мов - LISP, Scheme та Haskel. Цікаво, що JavaScript також підтримує функціональне програмування.
У логічному програмуванні ви визначаєте предикати, які описують відносини між сутностями, такими як president(Obama, USA)
або president(Medvedev, Russia)
. Ці предикати можуть бути дуже складними і включати змінні, а не лише буквальні значення. Після того, як ви вказали всі свої предикати, ви можете задавати питання вашої системи та отримувати логічно послідовні відповіді.
Велика ідея логічного програмування полягає в тому, що замість того, щоб розповідати комп’ютеру, як обчислювати речі, ви розповідаєте, що це таке . Приклад: PROLOG.
Об'єктно-орієнтована парадигма є певним чином розширенням процедурного програмування. У процедурному програмуванні ви маєте свої дані, які можуть бути примітивними типами, такими як цілі числа та поплавці, типи сполук, як масиви чи списки, а також визначені користувачем типи, як структури. Ви також маєте свої процедури, які працюють на даних. Навпаки, в ОО є об'єкти, до яких відносяться як дані, так і процедури. Це дозволяє вам мати такі приємні речі, як капсулювання, успадкування та поліморфізм. Приклади: Smalltalk, C ++, Java, C #.
Узагальнене програмування вперше було введено в Ада в 1983 році, і набуло широкого поширення після впровадження шаблонів на C ++. Це ідея, що ви можете писати код, не вказуючи фактичні типи даних, над якими він працює, і компілятор повинен це визначити. Наприклад, замість того, щоб писати
void swap(int, int);
void swap(float, float);
....
ти б написав
void swap(T, T);
один раз, і компілятор згенерує конкретний код для будь-якого T
, коли swap()
він фактично використовується в коді.
Загальне програмування підтримується в різній мірі за допомогою C ++, Java та C #.
Важливо зазначити, що багато мов, такі як C ++, підтримують кілька парадигм. Вірно також, що навіть коли мова говорить про підтримку певної парадигми, вона може не підтримувати всі риси парадигми. Не кажучи вже про те, що існує велика незгода щодо того, які особливості потрібні для певної парадигми.