Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекція_3_2_2_парадигми_пр.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.16 Mб
Скачать

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

У підсумку одержуємо:

  • значно більшу швидкість розробки додатків,

  • значно менший розмір вихідного коду,

  • легкість запису знань на декларативних мовах,

  • програми, більш зрозумілі за імперативні.

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

Аsm АМ ФП ЛП ПМ I________I_________I_________I_________I

Аsm - асемблер

АМ - алгоритмічні (процедурні) мови

ФП - мови функціонального програмування

ЛП - мови логічного програмування

ПМ - Природні мови (англійська, українська й ін.)

Рис.1. Близькість до природної мови.

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

Також цікавим є погляд на розвиток мов і парадигм програмування в історичному аспекті. За рівнем декларативності та часом появи найвідоміші мови програмування розташовуються відповідно до рис. 2 [Сошников. Парадигма лог. Прогр.].

Рис.2. Еволюція мов програмування.

ДЕКЛАРАТИВНИМИ є функціональні (functional), або аппликативні, і логічні (logic) мови. Головне полягає в наступному:

декларативна програма заявляє (декларує), що повинне бути досягнуте в якості мети, а директивна - пропонує, як її досягти.

Пояснимо це на наступному прикладі: Нехай треба пройти в місті з пункту А в пункт Б.

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

Директивна програма - це список команд, наприклад:

від пункту А по вул. Садовій на північ до пл. Слави, далі по вул. Пушкіна два квартали, потім повернути праворуч і йти до Театрального провулка, по якому ліворуч по правій стороні до будинку 20, що і є пункт Б.

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

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

ФУНКЦІОНАЛЬНЕ ПРОГРАМУВАННЯ припускає достатнім обчислення функцій від вихідних даних і результатів інших функцій, і не припускає явного зберігання стану програми. Найвідоміші мови: LISP, F#, Haskell, Erlang , APL, ML, Scala, Miranda, Nemerle, XQuery, Python.

Концепція функціонального програмування.

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

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

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

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

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

  5. Функціональне програмування досить гарне й іноді в якості першої мови програмування, досліджуваної студентами, обирається Haskell або Lisp. Для успішного оволодіння даним стилем програмування, втім, необхідно досить глибоке розуміння багатьох розділів математики.

ЛОГІЧНЕ ПРОГРАМУВАННЯ  засноване на автоматичному доказі теорем, на теорії й апараті математичної логіки з використанням математичних принципів резолюцій. Найвідомішою мовою логічного програмування є Prolog.

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