Структурний програмування дає рекомендації про те, яким повинен бути текст модуля. Виникає питання, як повинен діяти програміст, щоб побудувати такий текст. Іноді програмування модуля починають з побудови його блок-схему, що описує в загальних рисах логіку його роботи. Однак сучасна технологія програмування не рекомендує цього робити. Хоча блок-схеми дозволяють досить наочно представити логіку роботи модуля, при їх кодуванні на мові програмування виникає вельми специфічний джерело помилок: відображення істотно двовимірних структур, якими є блок-схеми, на лінійний текст, який представляє модуль містить небезпеку спотворення логіки роботи модуля, тим більше, що психологічно досить важко зберегти високий рівень уваги при повторному її розгляді. Винятком може бути випадок, коли для побудови блок-схем використовується графічний редактор і вони формалізовані настільки, що за ним автоматично генерується код на мові програмування (наприклад, це може робитися Р-технології).
У якості основного методу побудови тексту модуля сучасна технологія програмування рекомендує покрокову деталізацію. Суть цього методу полягає в розподілі процесу розробки тексту модуля на ряд кроків. На першому
кроці описується загальна схема роботи модуля в осяжній лінійної текстовій формі (тобто з використанням дуже великих понять), причому це опис не є повністю формалізованим і орієнтоване на сприйняття його людиною. На кожному наступному кроці здійснюється уточнення і деталізація одного з понять (будемо називати його оновлюється часто), використаного (як правило, не формализованно) в якому або описі, розробленому на одному з попередніх кроків. В результаті такого кроку створюється опис обраного уточняемого поняття або у термінах базового мови програмування (тобто обраного для подання модуля), або в такій же формі, що й на першому кроці з використанням нових уточнюються понять. Цей процес завершується, коли всі уточняемые поняття будуть виражені в кінцевому рахунку на базовому мові програмування. Останнім кроком є отримання тексту модуля на базовому мовою програмування шляхом заміни всіх записів уточнюються понять заданими їх описами і вираз всіх записів конструкцій структурного програмування засобами цієї мови програмування.
Покрокова деталізація пов'язана з використанням частково формалізованого мови для подання зазначених описів, який отримав назву псевдокода. Ця мова дозволяє використовувати всі конструкції структурного програмування, які оформляються формализованно, разом з неформальними фрагментами на природному мовою для подання узагальнених операторів і умов. Як узагальнених операторів і умов можуть задаватися і відповідні фрагменти на базовому мові програмування.
Головним описом на псевдокоде можна вважати зовнішнє оформлення модуля на базовому мовою програмування, яке
повинно містити:
- початок модуля на базовому мовою, тобто перше речення або заголовок (специфікацію) цього модуля;
- розділ (сукупність) описів на базовому мовою, причому замість описів процедур і функцій - тільки їх зовнішнє оформлення;
- неформальне позначення послідовності операторів тіла модуля як одного узагальненого оператора (див. нижче), а також неформальне позначення послідовності операторів тіла кожного опису процедури або функції як одного узагальненого оператора;
- останнє речення (кінець) модуля на базовому мовою.
Зовнішнє оформлення опису процедури або функції представляється аналогічно. Втім, якщо слідувати Дейкстре, розділ описів краще також представити тут неформальним позначенням, зробивши його деталізацію у вигляді окремого опису.
Неформальне позначення узагальненого оператора на псевдокоде виробляється на природному мовою довільним пропозицією, unveiling у загальних рисах його зміст. Єдиною формальною вимогою до оформлення такого позначення є наступне: це пропозиція повинна займати цілком одне або кілька графічних (друкованих) рядків і закінчується крапкою.
Для кожного неформального обобщеннного оператора має бути створено окремий опис, що виражає логіку його роботи (деталізуюче його утримання) за допомогою композиції основних конструкцій структурного програмування та інших узагальнених операторів. Як заголовок такого опису повинно бути неформальне позначення детализируемого узагальненого оператора. Основні конструкції структурного програмування можуть бути представлені в наступному вигляді (див. мал. 8.2). Тут умова може бути або явно задано на базовому мовою програмування в якості булевого вирази, або неформально представлено на природному мовою деяким фрагментом, unveiling у загальних рисах сенс цього умови. В останньому випадку має бути створено окремий опис, деталізуюче це умова, зі вказівкою в якості заголовка позначення цього умови (фрагмента на природному мовою).
Слідування:
обобщенный_оператор
обобщенный_оператор
Розгалуження:
ЯКЩО умова ТЕ
обобщенный_оператор
ІНАКШЕ
обобщенный_оператор
ВСІ ЯКЩО
Повторення:
ПОКИ умова РОБИТИ
обобщенный_оператор
ВСІ ПОКИ |
Рис. 8.2. Основні конструкції структурного програмування на псевдокоде.
Вихід з повторення (циклу):
ВИЙТИ
Вихід з процедури (функції):
ПОВЕРНУТИСЯ
Перехід на обробку надзвичайній ситуації:
ПОРУШИТИ имя_исключения |
Рис. 8.3 Окремі випадки оператора переходу, як узагальненого оператора.
як узагальненого оператора на псевдокоде можна використовувати зазначені вище окремі випадки оператора переходу (див. мал. 8.3). Послідовність обробників виняткових ситуацій (винятків) задається в кінці модуля або опису процедури(функції). Кожен такий обробник має вигляд:
ВИКЛЮЧЕННЯ имя_исключения
обобщенный_оператор
ВСІ ВИКЛЮЧЕННЯ
Відміну обробника надзвичайній ситуації від процедури без параметрів полягає в наступному: після виконання процедури управління повертається до оператора, наступного за зверненням до неї, а після виконання виключення управління повертається до оператора, наступного за зверненням до модуля або процедурі (функції), в кінці якого (якої) поміщено цей виняток.
Рекомендується на кожному кроці деталізації створювати досить змістовний опис, але легко найближче (наочне), так щоб вони розміщувалися на одній сторінці тексту. Як правило, це означає, що таке опис має бути композицією п'яти-шести конструкцій структурного програмування. Рекомендується також вкладені конструкції розташовувати зі зсувом вправо на кілька позицій. В результаті можна отримати опис логіки роботи з наочності цілком конкурентну з блок-схемами, але володіє істотною перевагою - зберігається лінійність описания.
ВИДАЛЕННЯ ЗАПИСІВ У ФАЙЛІ ДО ПЕРШОЇ,
що ЗАДОВОЛЬНЯЄ ЗАДАНИМ ФІЛЬТРУ:
ВСТАНОВИТИ ПОЧАТОК ФАЙЛУ.
ПОКИ НЕ КІНЕЦЬ ФАЙЛУ РОБИТИ
ПРОЧИТАТИ ЧЕРГОВУ ЗАПИС.
ЯКЩО ЧЕРГОВА ЗАПИС ЗАДОВОЛЬНЯЄ
ФІЛЬТРУ ТЕ
ВИЙТИ
ІНАКШЕ
ВИДАЛИТИ ЧЕРГОВУ ЗАПИС З ФАЙЛУ.
ВСІ ЯКЩО
ВСІ ПОКИ
ЯКЩО ЗАПИСУ НЕ ВИДАЛЕНІ ТЕ
ДРУКУВАТИ "ЗАПИСУ НЕ ВИДАЛЕНІ".
ІНАКШЕ
ДРУКУВАТИ "ВИДАЛЕНО н ЗАПИСІВ".
ВСІ ЯКЩО |
Рис. Приклад одного кроку деталізації на псевдокоде.
Ідею покрокової деталізації приписують іноді Дейкстре. Однак Дейкстра пропонував принципово відрізняється метод побудови тексту модуля, який нам представляється більш глибоким і перспективним. По-перше, разом з уточненням операторів він пропонував поступово (кроків) уточнювати (деталізувати) і використовувані структури даних. По-друге, на кожному кроці він пропонував створити деяку віртуальну машину для деталізації і в її термінах виробляти деталізацію всіх уточнюються понять, для яких ця машина дозволяє це зробити. Таким чином, Дейкстра пропонував, по суті, деталізувати з горизонтальним верствам, що є перенесенням його ідеї про шаруватих системах на рівень розробки модуля. Такий метод розробки модуля підтримується в даний час пакетами мови ПЕКЛА і засобами об'єктно-орієнтованого програмування.