Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5fan_ru_ПАРАДИГМИ ПРОГРАМУВАННЯ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.32 Mб
Скачать

Тема 5. Парадигма декларативного програмування Лекція 7. Основи парадигми декларативного програмування

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

Парадигма декларативного (описового) програмування розвивалася паралельно з парадигмою імперативного (наказового). Ці дві основні парадигми часто протиставляються, хоча ідеї обох парадигм вже давно тісно переплетені. Так, декларативним є опис Web-сторінок на HTML, XML-документів, опис структур таблиць БД та SQL-запитів тощо. Відповідний стиль програмування також відносять до декларативного, а мови називають доменними, тобто, спеціалізованими для певних областей застосування, або DSL-мовами (Domain Specific Languages).

У програмі, що розробляється в парадигмі декларативного програмування, чітко формулюється мета і результат її роботи, а не алгоритм отримання цього результату. Для обробки структур даних використовуються стандартні алгоритми, які реалізовані у самих цих мовах. Наприклад, при створенні Web-сторінки засобами HTML специфікується, яким чином повинна виглядати сторінка, а трансляція цієї специфікації виконується за допомогою алгоритму, реалізованого у браузері. DSL-мови іноді вбудовуються в універсальні мови, хоча писати програми в декларативному стилі можна і за допомогою імперативних мов, інкапсулюючи “не декларативні” деталі в бібліотечні компоненти.

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

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

Наприклад, в імперативній парадигмі програма представляється як набір операторів, а програма на декларативних мовах - є описом об'єктів, і зв'язків між ними.

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

Розглянемо стисло основні поняття кожної з цих парадигм.

7.2 Основи функціонального програмування

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

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

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

Енциклопедія Wiki дає наступне визначення:

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

Свою історію функціональне програмування веде з 1958 року, коли Джон Маккарті створив мову Лісп (LISP - LISt Processing – мова обробки списків) - першу в світі мову функціонального програмування. До 80-х років минулого століття цей напрям досить добре розвивався. Була створена ціла низка мов функціонального програмування, а також було значно вдосконалено сам Лісп. З появою персональних комп’ютерів (ПК) і поширенням об’єктно-орієнтованої парадигми інтерес до функціонального програмування різко знизився. Перші ПК не мали достатньо обчислювальних ресурсів і, в той же час, вимагали зручного інтерфейсу користувача. Дейкстра зазначав, що поява ПК відкинула програмування на 15 років назад. Програмісти знову почали рахувати байти і такти процесора. Поступово на перший план виходить об'єктно-орієнтоване програмування, яке є дійсно зручним для створення графічних інтерфейсів. Декларативні мови застосовувалися переважно в університетах, наукових центрах, а також в тих компаніях, які займалися складними задачами і мали досить потужні обчислювальні ресурси.

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

Основна особливість функціональних мов – відсутність типів даних. (безтиповість).

Основні характеристики функціонального програмування:

1.) Аплікативність: програма є вираз, який складається із застосування функцій до аргументів.

2.) Настроюваність: оскільки не тільки програма, але і будь-який програмний об'єкт є виразом, можна легко породжувати нові програмні об'єкти за зразком, як значення відповідних виразів.

Настроюваність активно використовується в такому напрямі програмування, як генеруюче програмування (generic programming,). Основна задача, вирішувана в рамках цього напряму - створення максимально універсальних бібліотек, орієнтованих на вирішення задач, які часто зустрічаються (обробка агрегатних даних; потокове введення-виведення; взаємодія між програмами, написаними на різних мовах, універсальні віконні бібліотеки). Ці напрями найбільш яскраво представлені в STL - стандартній бібліотеці шаблонів мови С++ та в реалізації платформи DOT.NET.

Сфера застосування.

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

Найбільш відома мова функціонального програмування – Lisp (1958) і його нащадки, найбільш сучасні з яких - Scheme і Common Lisp.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]