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

2.4. Розвиток основних програмних понять

Ми почнемо з розгляду внутрішніх аспектів програм. Відповідні поняття будемо називати програмними поняттями. Їх слід відрізняти від понять програмування, що пов’язані з процесом програмування, та які були розглянуті у попередньому розділі.

2.4.1. Тріада основних програмних понять

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

Як же починати уточнення поняття програми? Є різні підходи до того, як це робити. Але ми почнемо з аналізу тієї тріади, в який уперше з’явилось поняття програми. Це тріада «користувач – проблема – програма». З цієї тріади ми бачимо, що поняття програми є діалектичним запереченням (антитезою) поняття проблеми, тобто програми не є проблемами, але зберігають у собі проблеми у якійсь іншій формі. Цей зв’язок понять проблеми та програми подано на рис. 2.7.

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

Розглянемо питання про інформаційну властивість проблем більш детально. Сучасні комп’ютерні словники4 визначають інформацію як дані, інтерпретовані в предметній області. Вони також дають наступну низку термінів, пов’язану з інформацією:

дані – інформація – знання – мудрість.

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

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

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

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

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

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

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

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

Згідно з тріадою розвитку тепер потрібно побудувати поняття, що є синтезом понять даного (теза) та функції (антитеза). Позначимо це нове поняття через X. Тоді можна записати наступне понятійне рівняння:

X=синтез (теза: дане, антитеза: функція)

Щоб з’ясувати властивості нового поняття, скористаємося законом заперечення заперечення. З тріади розвитку випливає, що функція є діалектичним запереченням даного, а X – діалектичним запереченням функції, тобто X є заперечення заперечення даного. Це означає, що нове поняття X, з одного боку, зберігає функцію, а з іншого боку, за законом заперечення заперечення, підпадає під поняття даного, тим самим розвиваючи і це поняття. Говорячи більш просто, маємо, що X поводиться як дане (з ним працюють як з даним), але X також має певний зв’язок із функцією (містить, задає функцію).

Щоб зрозуміти, що є X, пригадаймо, що зараз розвиваються перші, найабстрактніші аспекти поняття програми. Тому слід очікувати, що ці аспекти, зокрема і X, мають з’являтися на перших кроках роботи з програмами, зокрема і на екрані комп’ютера. Дійсно, якщо ми включимо комп’ютер, то відзразу ж на його робочому столі побачимо певний набір іконок, ярликів. Але ж це і представники поняття X. Дійсно, кожна іконка є певним знаком, іменем програми, яку можна при потребі виконати. Таким чином, розв’язком наведеного понятійного рівняння є поняття імені функції. Відзначимо, що можна було б це поняття назвати знаком, символом, позначенням функції, але термін «ім’я» видається найбільш вдалим, тому що активно використовується у програмування та має давню традицію використання в філософії. Зокрема, перше речення (!) праці Аристотеля «Категорії» присвячене розгляду властивостей імен.

Зазвичай, під ім’ям розуміється такий об'єкт, з яким зіставляється деякий інший об'єкт, який називається денотатом (значенням) імені. Між іменем та значенням визначають різні відношення денотації. Якщо нас цікавлять відношення «значення – ім’я», то їх називають відношеннями іменування, номінації, для відношень ім’я–значення використовують терміни «розіменування», «деномінація», «денотація».

З іменами ми поводимось як із даними. Імена складаються з певних символів, вони щось репрезентують (іменують, позначають).

На отриманому рівні абстракції можна сформулювати новий принцип.

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

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

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

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

Рисунок 2.8. Тріада основних програмних понять

У цій тріаді всі поняття пов'язані одне з одним вказаними відношеннями, але і самі відношення пов’язані одне з одним. Наприклад, якщо нам задані відношення інтерпретації та аплікації, то можна визначити відношення денотації. Сформулюємо це більш точно. Нехай відношення інтерпретації int(name, d, d ) означає, що для імені функції name та вхідного даного d вихідним даним буде d , а відношення appl(func, d, d ) означає, що аплікація функції func до вхідного даного d дає вихідне дане d. Тоді імені функції n буде відповідати така функція f, що має місце рівність int(n, d, d )= appl(f, d, d ) для всіх даних. Власне кажучи, такий спосіб визначення денотації і використовується при операціональному підході до семантики програм.

Надалі при розвитку програмних понять будемо «повторювати» програмну тріаду, але на більш багатих рівнях.

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