Малюнок 2.7. Програма як діалектичне заперечення проблеми 2 страница



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

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

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

Сформульовані принципи та пентада програмних понять утворюють базис композиційно-номінативного підходу до уточнення поняття програми. Використання терміна "композиційний" у назві запропонованого підходу можна пояснити кількома причинами. Серед трьох термінів: "дані", "функція" і "композиція", користувачі зацікавлені насамперед у даних і функціях. Однак, щоб зрозуміти властивості даних і функцій, необхідно вивчити властивості композицій, які визначають структури (а отже, властивості) функцій і даних. Тому основна увага буде приділена вивченню композицій та їх властивостей, в той час як властивості функцій і даних будуть похідними від властивостей композицій. Іншими словами, композиції задають логічну складову програмування, а функції та дані – предметну. Що ж стосується терміна "номінативний", то його використання в назві підходу підкреслює фундаментальну роль відношень іменуванні (денотації) у побудові всіх програмних понять.

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

 

2.6 Програми і мови

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

 

Таблиця 2.2

Характе-ристика мови Природні мови Мови програмування
1 Походжен-ня Природні мови з’явились у результаті історичного розвитку певної групи людей. Мови програмування є штучними мовами.
2 Основні аспекти   Природні мови мають багато основних аспектів, таких як комунікативний, когнітивний, референціальний,   сігніфікативний, експресивний, лікувальний і т.д. Основних аспектів небагато, але вони мають достатньо точні визначення.
3 Точність визна-чення мови Точних визначень немає, є різні моделі. Мови багатозначні. Мови програмування, як правило, точно визначені. Мова однозначна.
4 Відкри-тість Мова постійно розширюється. Мова фіксована.

 

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

 

2.7 Пентада програмних понять процесного типу

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

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

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

Отримуємо наступну пентаду: дія – процес– ім’я процесу–композиція процесів – дескрипція процесів, яка подана на малюнку 2.10.

 

денотація

 

Малюнок 2.10. Пентада програмних понять процесного типу

 

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

 

Висновки

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

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

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

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

4. Було розвинено основні програмні поняття в їх взаємозв’язках: спочатку тріада дане–функція–ім’я функції, яка потім в пентаді доповнюється поняттями композиції та дескрипції.

5. Основними внутрішніми аспектами програм є семантичний, синтаксичний та денотаційний аспекти.

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

7. Зроблено порівняльний аналіз природних мов та мов програмування. Підкреслено вимоги однозначності та точності для мов програмування.

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

 

Контрольні питання.

1. Проаналізуйте визначення поняття програми та програмування, наведені у різних словниках.

2. Розкрийте зміст принципу гносеологічності.

3. Наведіть приклади категорій.

4. Розкрийте зміст принципу програмологічної проекції.

5. Розкрийте зміст категорій абстрактне та конкретне.

6. Як формулюється принцип розвитку?

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

8. Які поняття та відношення утворюють початкову тріаду понять програмування?

9. Які поняття та відношення утворюють тріаду прагматичності програм?

10. Які поняття та відношення утворюють тріаду основних понять програмування?

11. Які поняття та відношення утворюють пентаду основних понять програмування?

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

13. Які поняття та відношення утворюють тріаду основних програмних понять?

14. Розкрийте зміст принципу інформативності проблем.

15. Як формулюється принцип аплікативності?

16. Як формулюється принцип номінативності?

17. Як формулюється принцип композиційності?

18. Як формулюється принцип дескриптивності?

19. Які поняття та відношення утворюють пентаду основних програмних понять?

20. Сформулюйте семіотичні аспекти програм.

21. Сформулюйте сутнісні аспекти програм.

22. Як формулюється принцип підпорядкованості?

23. Як формулюється принцип семантико-синтаксичної орієнтації?

24. Які властивості формулюються для природних мов та мов програмування?

25. Які поняття та відношення утворюють пентаду основних програмних понять процесного типу?

 


 

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

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

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

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

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

 

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

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

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

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

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

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

3.2 Класи функцій

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

Нехай D і R – деякі класи об'єктів. Клас об'єктів, розглянутих як часткові багатозначні функції з D у R позначимо D R. Для f Î (D R) позначимо arg(f) клас визначенності f, тобто клас об'єктів, на яких f може бути визначена, und(f) – клас невизначенності f, тобто клас об'єктів, на яких f може бути не визначена, gr(f) Í D´R – графік f, тобто множина пар (d, r) таких, що значення f на d може бути визначеним із значенням r. Відзначимо, що перетин arg(f) Ç und(f) може бути не порожнім, оскільки можуть бути об'єкти, на яких f може бути як визначена, так і не визначена. Якщо ж arg(f) Ç und(f) = Æ, то f будемо називати реляційною функцією, оскільки в такому випадку вона однозначно визначається своїм графіком, тобто бінарним відношенням (реляцією) на D(R) .

Для подання функцій будемо часто використовувати індексний конструктор функцій виду [ di a ri | i Î I ] або [ di : D a ri : R | i Î I ], де di і ri можна трактувати як індексні часткові однозначні відображення з деякої множини індексів I у класи D і R відповідно. Такий конструктор задає функцію f Î D  R наступним чином. На dÎD значення f може дорівнювати значенню ri для такого iÎI, для якого di визначено і дорівнює d. Якщо ж таке ri не визначено, або ж необхідного i не існує, то значення f на d може бути не визначено.  

Клас часткових однозначних функцій із D у R позначимо D R, клас тотальних (усюди визначених) багатозначних функцій – D R, тотальних однозначних функцій – D R.

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

3.3 Програмні системи

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

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

Починаємо з системи даних. Оскільки ніяких властивостей даних не задано, то система даних Dt просто визначає деякий клас D, тобто Dt=<D>. Наступне поняття в пентаді – функція. Система функцій Fn – це пари <D, F>, де FÍD D. Імена функцій задаються як деяка множина Z, тому система імен Nm – це одноелементний кортеж <Z>. Відношення денотації (номінації) будемо трактувати як відображення den: Z F. Тому система денотації Dn є кортеж <den>. Остання трійка систем визначає в абстрактному виді семантику програм (система функцій), їх синтаксис (система імен) та зв'язок синтаксису з семантикою (система денотації). Тому доцільно ввести нову – функціонально-номінативну – систему, яка задає ці системи в їх єдності. Функціонально-номінативна система FNS це трійка <Fn, Nm, Dn>. Подальший розвиток буде здійснюватися конкретизацією введених систем.

При побудові таких систем виникає питання про форми їх подання. Наприклад, функціонально-номінативну систему FNS можна було б представити не у вигляді "ієрархічної" трійки <Fn, Nm, Dn>, а у виді "плоского" кортежу <D, F, Z, den>. Кожна з форм уявлення може бути зручної в тих або інших випадках. Тому, щоб не обмежувати себе однією формою уявлення, приймемо наступну угоду про множинність форм подання програмних систем: в залежності від цілей дослідження програмні системи можуть представлятися в різних формах.


Дата добавления: 2019-02-13; просмотров: 242; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!