
- •2.3 Розвиток основних понять програмування 53
- •1. Формалізація простої мови програмування
- •1.1 Неформальний опис простої мови програмування
- •1.2 Формальний опис синтаксису мови sipl
- •Малюнок 1.1. Дерево синтаксичного виводу програми gcd
- •1.3 Формальний опис семантики мови sipl
- •Малюнок 1.3. Алгебра даних мови sipl
- •1.3.2 Функції
- •1.3.3 Композиції
- •1.3.4 Програмні алгебри
- •Малюнок 1.4. Алгебра функцій (програмна алгебра)
- •1.3.5 Визначення семантичних термів
- •1.3.6 Побудова семантичного терму програми
- •1.3.7 Обчислення значень семантичних термів
- •1.3.8 Загальна схема формалізації мови sipl
- •Малюнок 1.5 Схема визначення композиційної семантики
- •1.4 Властивості програмної алгебри
- •2. Розвиток основних понять програмування
- •2.1 Аналіз словникових визначень поняття програми
- •2.2 Розвиток поняття програми з гносеологічної точки зору
- •2.3 Розвиток основних понять програмування
- •2.3.1 Початкова тріада понять програмування
- •Малюнок 2.2. Сфера інформатизації як особлива сфера суспільства
- •Малюнок 2.3. Тріада цільового призначення програм
- •2.3.2 Тріада прагматичності програм
- •Малюнок 2.4. Тріада прагматичності програм
- •2.3.3 Тріада основних понять програмування
- •Малюнок 2.5. Тріада основних понять програмування
- •2.3.4 Пентада основних понять програмування
- •Малюнок 2.6. Пентада основних понять програмування
- •2.4 Розвиток основних програмних понять
- •2.4.1 Тріада основних програмних понять
- •Малюнок 2.7. Програма як діалектичне заперечення проблеми
- •2.4.2 Пентада основних програмних понять
- •2.5 Сутнісні та семіотичні аспекти програм
- •2.6 Програми і мови
- •2.7 Пентада програмних понять процесного типу
- •3. Формалізація програмних понять
- •3.1 Теоретико-функціональна формалізація
- •3.2 Класи функцій
- •3.3 Програмні системи
- •3.4 Рівні конкретизації програмних систем
- •4. Синтактика: формальні мови та граматики
- •4.1 Розвиток понять формальної мови та породжучої граматики
- •4.2 Визначення основних понять формальних мов
- •4.3 Операції над формальними мовами
- •4.3 Породжуючі граматики
- •4.5 Ієрархія граматик Хомського
- •4.6 Автоматні формалізми сприйняття мов
- •4.6.1 Машини Тьюрінга
- •4.6.2 Еквівалентність машин Тьюрінга та породжуючих граматик
- •4.6.3 Лінійно-обмежені автомати
- •4.6.4 Магазинні автомати
- •4.6.5 Скінченні автомати
- •4.7 Методи подання синтаксису мов програмування
- •4.7.1 Нормальні форми Бекуса–Наура
- •4.7.2 Модифіковані нормальні форми Бекуса–Наура
- •4.7.3 Синтаксичні діаграми
- •4.8 Властивості контекстно-вільних граматик
- •4.8.1 Видалення несуттєвих символів
- •4.8.2 Видалення -правил
- •4.8.3 Нормальна форма Хомського
- •4.8.4 Нормальна форма Грейбах
- •4.8.5 Рекурсивні нетермінали
- •4.9 Властивості контекстно-вільних мов
- •4.10 Операції над формальними мовами
- •4.11 Дерева виводу
- •4.12 Однозначні та неоднозначні граматики
- •4.13 Розв’язні та нерозв’язні проблеми кв-граматик та мов
- •4.14 Рівняння в алгебрах формальних мов
- •5. Теорія рекурсії (теорія найменшої нерухомої точки)
- •5.1 Рекурсивні визначення та рекурсивні рівняння
- •5.2 Частково впорядковані множини, границі ланцюгів та -області
- •5.3 Неперервні відображення
- •5.4 Теореми про нерухомі точки
- •5.5 Конструювання похідних -областей
- •5.6 Властивості оператора найменшої нерухомої точки
- •5.7 Застосування теорії ннт
- •5.7.1 Уточнення синтаксису мов програмування
- •5.7.2 Семантика мов програмування
- •5.7.3 Рекурсивні розширення мови sipl
2.6 Програми і мови
Поняття програми тісно пов'язане з поняттям мови. Дескрипції можуть трактуватися як речення мови, функції – як значення речень. Тому способи подання програм можуть розглядатися як певні мови, які називають мовами програмування. Для дослідження таких штучних мов можна використовувати лінгвістику, яку була розвинена для природних мов. Разом з тим є певні відмінності між природними мовами та мовами програмування, які сформулюємо у наступній таблиці. Зауважимо, що, використовуючи термін «мова програмування», ми фактично будемо більше говорити про мови програм, ніж про процеси програмування.
Таблиця 2.2
№ |
Характе-ристика мови |
Природні мови |
Мови програмування |
1 |
Походжен-ня |
Природні мови з’явились у результаті історичного розвитку певної групи людей. |
Мови програмування є штучними мовами. |
2 |
Основні аспекти
|
Природні мови мають багато основних аспектів, таких як комунікативний, когнітивний, референціальний, сігніфікативний, експресивний, лікувальний і т.д. |
Основних аспектів небагато, але вони мають достатньо точні визначення. |
3 |
Точність визна-чення мови |
Точних визначень немає, є різні моделі. Мови багатозначні. |
Мови програмування, як правило, точно визначені. Мова однозначна. |
4 |
Відкри-тість |
Мова постійно розширюється. |
Мова фіксована. |
Як бачимо, мови програмування значно простіші та бідніші від природних мов. Але це дає можливість більш точно описати мови програмування. Однозначність мов програмування важлива при створенні відповідних систем програмування та при досліджені програм.
2.7 Пентада програмних понять процесного типу
Введені програмні поняття є досить абстрактними. Згідно принципу розвитку від абстрактного до конкретного, треба розвивати основні поняття до більш конкретних та багатих.
Наступним рівнем конкретизації може бути розгляд більш конкретних типів проблем, не лише функціонального типу, як це було зроблено раніше, але і проблем процесного типу, коли їх суть полягає не стільки в інформаційності, скільки в необхідності виконання низки дій. Такі проблеми будемо називати проблемами процесного типу.
Уточнення програмних понять для проблем процесного типу веде до пентади, аналогічній раніше побудованій, в якій замість поняття функції береться поняття процесу.
Отримуємо наступну пентаду: дія – процес– ім’я процесу–композиція процесів – дескрипція процесів, яка подана на малюнку 2.10.
денотація
Малюнок 2.10. Пентада програмних понять процесного типу
Поняття процесу є важливим для моделювання та дослідження більш багатих програмних систем, а саме розподілених, паралельних, реактивних і т.д. В рамках цього посібника такі системи розглядати не будемо.
Висновки
В цьому розділі було розвинено основні поняття програмування на основі загальногносеологічних принципів, основним з яких є принцип розвитку від абстрактного до конкретного. Основні результати можна сформулювати таким чином.
1. Було розглянуто словникові визначення поняття програми та продемонстровано, що ці визначення нечіткі, спрощені та ведуть до хибного кола визначень.
2. Були розглянуто основні гносеологічні принципи визначення понять. За основу був взятий підхід, що базується на діалектичній логіці, але який лише застосовується до проблем програмування.
3. Було розвинено основні поняття програмування в їх взаємозв’язках: спочатку тріада користувач–проблема–програма, яка потім в пентаді доповнюється поняттями процесу виконання та процесу програмування. Введені відношення задають зовнішні сторони понять програми та програмування.
4. Було розвинено основні програмні поняття в їх взаємозв’язках: спочатку тріада дане–функція–ім’я функції, яка потім в пентаді доповнюється поняттями композиції та дескрипції.
5. Основними внутрішніми аспектами програм є семантичний, синтаксичний та денотаційний аспекти.
6. Було зроблено порівняльний аналіз семіотичних та сутнісний аспектів програм. Семіотичні аспекти (прагматика, семантика, синтаксис) ставлять лише поняття знака у центр уваги, применшуючи важливість інших понять. Теорія сутнісних аспекті програм виділяє зовнішні (адекватність, прагматичність, обчислюваність, генетичність) та внутрішні аспекти (семантика, синтаксис, денотація) дозволяючи більш адекватно розкрити поняття програми.
7. Зроблено порівняльний аналіз природних мов та мов програмування. Підкреслено вимоги однозначності та точності для мов програмування.
8. В контексті подальшої конкретизації основних понять програмування побудовано пентаду понять для проблем процесного типу.
Контрольні питання.
-
Проаналізуйте визначення поняття програми та програмування, наведені у різних словниках.
-
Розкрийте зміст принципу гносеологічності.
-
Наведіть приклади категорій.
-
Розкрийте зміст принципу програмологічної проекції.
-
Розкрийте зміст категорій абстрактне та конкретне.
-
Як формулюється принцип розвитку?
-
Як розуміється відносний характер принципу розвитку та інших гносеологічних принципів.
-
Які поняття та відношення утворюють початкову тріаду понять програмування?
-
Які поняття та відношення утворюють тріаду прагматичності програм?
-
Які поняття та відношення утворюють тріаду основних понять програмування?
-
Які поняття та відношення утворюють пентаду основних понять програмування?
-
Наведіть визначення програмування різних рівнів абстракції.
-
Які поняття та відношення утворюють тріаду основних програмних понять?
-
Розкрийте зміст принципу інформативності проблем.
-
Як формулюється принцип аплікативності?
-
Як формулюється принцип номінативності?
-
Як формулюється принцип композиційності?
-
Як формулюється принцип дескриптивності?
-
Які поняття та відношення утворюють пентаду основних програмних понять?
-
Сформулюйте семіотичні аспекти програм.
-
Сформулюйте сутнісні аспекти програм.
-
Як формулюється принцип підпорядкованості?
-
Як формулюється принцип семантико-синтаксичної орієнтації?
-
Які властивості формулюються для природних мов та мов програмування?
-
Які поняття та відношення утворюють пентаду основних програмних понять процесного типу?