Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TP_Book_Nizhyn.doc
Скачиваний:
74
Добавлен:
03.12.2018
Размер:
3.4 Mб
Скачать

3. Формалізація програмних понять

Перейдемо до побудови математичних уточнень введених програмних понять – до їх формалізації.

Згідно принципу розвитку від абстрактного до конкретного, можна побудувати різні формалізації поняття програми. Найпростіша формалізація відповідає тріаді основних програмних понять: дане – функція – ім’я функції. Задаючи деякий клас даних D, програму можна уточнити як пару (fn, ), де fn – ім’я програми, а f: DD – функція, що задає семантику програми. Клас програм тоді задається як певний клас таких пар і називаються інтерпретованим класом програм.

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

Які ж формалізми можна використовувати для подання програмних систем?

3.1 Теоретико-функціональна формалізація

Традиційно для формалізації поняття програми використовують теоретико-множинний підхід, часто в дуже специфічній формі. Наприклад, такі методи формальної розробки програм, як Z [19] та B [20], безпосередньо спираються на аксіоматичну теорію множин Цермело-Френкеля. Тому часто під формальною семантикою розуміють теоретико-множинну семантику. Водночас, незважаючи на наявний багатий позитивний досвід теоретико-множинних формалізацій, починаються спроби проводити формалізацію програмних понять не тільки на основі поняття множини, а на основі поняття функції (відображення). Аргументація переваг такого теоретико-функціонального підходу може бути знайдена, наприклад у [21]. Стосовно поняття програми, теоретико-функціональний підхід підтримується принципом аплікативності (функціональності) програм. У рамках композиційно-номінативного підходу також будемо орієнтуватися на теоретико-функціональну формалізацію. Відразу ж відзначимо, що поняття функції і множини нерозривно пов'язані одне з одним, тому коли мова йде про використання теоретико-функціонального підходу то основна увага буде приділятися поняттю функції, а не поняттю множини. В зв'язку з цим сформулюємо наступний принцип.

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

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

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

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

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