
- •М. С. Нікітченко теорія програмування Частина 1
- •1. Формалізація простої мови програмування
- •1.1. Неформальний опис простої мови програмування
- •1.2. Формальний опис синтаксису мови sipl
- •1.3. Формальний опис семантики мови sipl
- •1.3.2. Функції
- •1.3.3. Композиції
- •1.3.4. Програмні алгебри
- •1.3.5. Визначення семантичних термів
- •1.3.6. Побудова семантичного терму програми
- •1.3.7. Обчислення значень семантичних термів
- •1.3.8. Загальна схема формалізації мови sipl
- •1.4. Властивості програмної алгебри
- •2. Розвиток основних понять програмування
- •2.1. Аналіз словникових визначень поняття програми
- •2.2. Розвиток поняття програми з гносеологічної точки зору
- •2.3. Розвиток основних понять програмування
- •2.3.1 Початкова тріада понять програмування
- •2.3.2. Тріада прагматичності програм
- •2.3.3. Тріада основних понять програмування
- •2.3.4. Пентада основних понять програмування
- •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.4. Породжуючі граматики
- •4.5. Приклад породжуючої граматики та її властивості
- •4.6. Ієрархія граматик Хомського
- •4.7. Автоматні формалізми сприйняття мов
- •4.7.1. Машини Тьюрінга
- •4.7.2. Еквівалентність машин Тьюрінга та породжуючих граматик
- •4.7.3. Лінійно-обмежені автомати
- •4.7.4. Магазинні автомати
- •4.7.5. Скінченні автомати
- •4.8. Методи подання синтаксису мов програмування
- •4.8.1. Нормальні форми Бекуса–Наура
- •4.8.2. Модифіковані нормальні форми Бекуса–Наура
- •4.8.3. Синтаксичні діаграми
- •4.9. Властивості контекстно-вільних граматик
- •4.9.1. Видалення несуттєвих символів
- •4.9.2. Видалення -правил
- •4.9.3. Нормальна форма Хомського
- •4.9.4. Нормальна форма Грейбах
- •4.9.5. Рекурсивні нетермінали
- •4.10. Властивості контекстно-вільних мов
- •4.11. Операції над формальними мовами
- •4.12. Дерева виводу
- •4.13. Однозначні та неоднозначні граматики
- •4.14. Розв’язні та нерозв’язні проблеми кв-граматик та мов
- •4.15. Рівняння в алгебрах формальних мов
- •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.3.4. Пентада основних понять програмування
У попередніх підрозділах було побудовано три тріади розвитку, що в сукупності вводять п’ять основних понять програмування (на професійному рівні). Ці п’ять понять та їх співвідношення будемо називати пентадою основних понять програмування. Ця пентада утворена трьома обертами розвитку (конкретизації). Її розвиток почався з філософського рівня (рис. 2.6).
Пентада основних понять програмування виділяє основні аспекти понять програмування. Так, для поняття програми основними аспектами будуть
адекватність;
прагматичність;
обчислюваність;
генетичність.
Для процесу програмування основні аспекти це
проблемна орієнтованість;
експлікативність.
Зробимо також кілька методологічних зауважень стосовно побудованої пентади. Відзначимо, що для нас тут головним є самі поняття та їх відношення, а не порядок появи у процесі розвитку. Процес розвитку можна було б починати від процесу програмування та йти до програми, потім до проблеми, користувача та процесу виконання. Разом із тим, може з’явитися питання: чому другий оберт (користувач – програма – процес виконання) зроблено раніше, ніж третій (проблема – програма – процес програмування)? Обґрунтування задається принципом історичності. На початковому етапі використання програм велика вага приділялась ефективності використання машинного часу (бо був дуже дорогий), тобто проблемам виконання програм. Лише пізніше почали досліджуватися методи програмування.
У посібнику значну увагу приділено категоріям абстрактного та конкретного. Проілюструємо ці категорії на різних визначеннях поняття програмування, які індукуються введеною пентадою.
Рисунок 2.6. Схема розвитку основних понять програмування
Перше визначення: програмування є процес побудови програм. Це визначення поєднує лише два поняття нашої пентади та абстрагується від інших понять.
Друге визначення: програмування є процес побудови програм, що має на меті розв’язання певних проблем. Це визначення поєднує вже три поняття нашої пентади, але абстрагується від інших понять.
Третє визначення: програмування є процес побудови програм, що має на меті розв’язання певних проблем, актуальних для користувача. Це визначення поєднує чотири поняття нашої пентади, але абстрагується від інших понять.
Нарешті, четверте визначення: програмування є процес побудови програм, що має на меті розв’язання певних проблем, актуальних для користувача, шляхом їх виконання. Це визначення поєднує усі поняття нашої пентади.
Кожному наведеному визначенню відповідають певні методи програмування. Так, перше визначення фактично концентрується на методах написання синтаксично правильних програм. Тут можна навести аналогію з навчанням у школі: спочатку дітей вчать писати букви та слова (тобто тут концентруються на синтаксичному аспекті в абстракції від семантичного). Друге визначення вже апелює до проблем предметної області, тому відповідні методи програмування мають враховувати семантику програм. Продовжуючи аналогію зі школою, можна сказати, що на цьому рівні діти повинні правильно викладати думки. Трете визначення апелює до користувачів та їх особливостей. На цьому рівні дітей у школі повинні навчати специфіці звертання та розмов з учителями, учнями, людьми похилого віку тощо. Нарешті, четверте визначення говорить про те, що методи програмування повинні враховувати особливості інтерфейсу та обчислюваності програм.
Таким чином, введена пентада дозволяє скласти певне уявлення про програмування. Та все ж уведені поняття є ще дуже абстрактними. Побудована пентада фактично відображає будь-який процес програмування, зокрема, процес підготовки програм для телебачення і т.д. Це пентада програмування взагалі. Наприклад, за цією пентадою ми можемо складати план роботи на наступний тиждень. Тому необхідно рухатися до більш конкретних понять, що розкриють процес програмування саме в професійному аспекті, у аспекті інформатизації.
Як же рухатися далі? Аналізуючи побудовану пентаду, можемо дійти висновку, що в них мова йде про зовнішні властивості програм та програмування. Згідно з принципами гносеології маємо тепер перейти до розкриття внутрішніх аспектів цих понять.