Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л07_Теорія і методи структурного програмування.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
143.87 Кб
Скачать

7

Лекція 5. Теорія і методи структурного програмування

План

  1. Історія структурного програмування

  2. Декомпозиція завдань, способи декомпозиції

  3. Методики процедурного програмування

  4. Переваги і недоліки методик програмування.

  5. Проблеми структурного програмування.

  6. Основні блоки структурованої програми.

  7. Особливості структурного програмування.

1. Історія структурного програмування

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

В якості методики структурного програмування Э. Дейкстра запропонував користуватися лише конструкціями циклу і умовного оператору, виключаючи go to як такий, що концептуально суперечить цьому стилю.

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

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

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

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

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

  1. Структура інформаційного простору. Змістовно будь-яке завдання можна описати як переробку об'єктів, повний набір яких називається інформаційним простором завдання.

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

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

  2. До структурних операторів додаються або цикли, або рекурсії.

Увага!

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

  1. Потоки передачі даних. Розбиваючи завдання на підзадачі, програміст передбачає їх взаємодію по даним: одні підзадачі передають іншим дані для переробки.

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

  3. Примари. Часто навіть сама програма не може бути пояснена через поняття, які використовуються усередині неї. Ще частіше це відбувається для її зв'язків із зовнішнім світом. Розуміння програми можливе лише після зіставлення реальних внутрішньопрограмних об'єктів з ідеальними зовнішньопрограмними. Ці ідеальні зовнішньопрограмні об'єкти (примари) часто не просто не потрібні, але навіть шкідливі для виконання програми.

Першим звернув увагу на необхідність введення примар для логічного і концептуального аналізу програм Г. С. Цейтін в 1971 р. У Америці це "незалежно" відкрили наново в 1979 р., хоча згадана стаття Цейтіна була опублікована англійською мовою в загальнодоступному виданні. Навіть назва суті була дана та ж сама... Цьому найважливішому і традиційно ігнорованому поняттю присвячена окрема лекція в курсі "Основи програмування".

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

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

Для структурного програмування вельми важлива вимога:

Всі структури підкоряються структурі інформаційного простору.

Це загальна вимога конкретизується в наступні.

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

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

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

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

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

  6. Всі підпори строго локалізовані в тому місці, де їх вимушені ввести. Бажано навіть позначати їх по-іншому, чим ідеальна суть, наприклад, залишаючи мнемонічні імена лише для ідеальної суті, а підпори іменувати джокерами типу x або i. Необхідно строго стежити за тим, щоб підпори не спотворювали ідеальну структуру програми.

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