РОЗРОБКА ПРОГРАМИ

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

Метод розробки структур даних був запропонований М Джексоном та іншими авторами Він дуже корисний у тих додатках обробки даних, де порівнюються і модифікуються великі файли даних, наприклад в системах обробки рахунків-фактур, системах нарахування заробітної плати, розрахунку з покупцями, обробки каталогів виробів Ці системи характеризуються відносно нескладної обробкою (прості арифметичні і логічні операції) великого числа даних Дані домінують в задачі і метод розробки повинен визначати структуру програми виходячи зі структури даних На жаль, опис методів розпізнавання структур даних і використання їх для створення структур програм вимагає

набагато більше місця, ніж ми маємо в своєму розпорядженні в цій книзі Зацікавлені програмісти можуть звернеться до прекрасно излагающей даний предмет книзі М A Jackson Principles of Program Design, випущеної видавництвом Academic Press в 1975 році

531 Методу покрокового деталізації

Існує безліч злегка відрізняються один від одного форм цього методу і безліч назв: деталізація зверху вниз, послідовна конкретизація, методичне програмування і навіть структурне програмування, хоча остання назва застосовується до всього процесу розробки і виробництва програми

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

У методі покрокової деталізації можна виділити наступні істотні етапи:

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

(Б) На рівні 2 в загальних термінах деталізується опис кроків, введених на етапі (а) У деталізований опис може входити позначення циклічних структур, в той час як

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

(В) На рівні 3 і наступних рівнях у вигляді послідовних ітерацій виробляються ті ж дії, що описані на етапі (б) При кожній новій ітерації уточнюються деталі, що залишалися неясними після попередніх ітерацій, і створюються більш певні опису По мірі виконання ітерацій невизначені деталі стають все простіше і простіше, так що на якомусь етапі можуть бути повністю описані

(Г) Розробка завершена: в модульному вигляді отримано опис необхідної програми Переклад цього опису в програму на Бейсике повинен бути досить простим завданням

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

Щоб у результаті розробки вийшло опис, придатне для перекладу в задовільну програму, найкраще при застосуванні методу покрокової деталізації користуватися тільки певними програмними структурами Останні детально обговорюються в підрозділ 532, а решти цього підрозділу наводиться простий приклад, який демонструє застосування описаного вище процесу

Нехай потрібно написати програму, яка отримує як введення значення N, рівне числу учнів у класі, а також зріст, вік і вага кожного учня Ця програма повинна видати середні значення всіх трьох показників Спочатку застосуємо етап (а) до всієї задачі в цілому:

Рівень 1

Ввести число учнів Обчислити середній зріст Обчислити середній вік Обчислити середню вагу

Тепер застосуємо етап (б) до кожного з описаних вище кроків:

Деталізація 11 Обчислити середнє зростання Ввести зростання кожного учня Обчислити за допомогою циклу середній зріст Зобразити результати

Деталізації 12 і 13 аналогічні наведеної вище, але застосовуються до віку й вазі замість зростання У результаті отриманий

Рівень 2

ВВЕДЕННЯ Число учнів; N

(11) для зростання (12) для віку (13) для ваги

містить посилання на кожну деталізацію Продовжимо цей процес і, оскільки всі три деталізації практично однакові, розглянемо деталізацію 11 Розкриємо суть трьох дій, складових її опис

Деталізація 21 Ввести зростання кожного учня ДРУК запрошення до вводу значень ВВЕДЕННЯ значень в масив за допомогою циклу або оператора MAT INPUT

Деталізація 22 Обчислити за допомогою циклу середній зріст

Організувати цикл, пробігаючи N значень і накопичуючи суму в S Поділити S на N для отримання середнього зросту

Деталізація 23 Зобразити результати

ДРУК назви показника (наприклад, ВІК) і середнього значення

Так як проводиться по суті одне і те ж розширення всіх трьох основних частин рівня 2, то видається природним реалізовувати зазначені вище дії у вигляді підпрограм загального призначення, передаючи їм у строкової змінної назва показника зріст, вік, вагу Таким чином, рівень 3 прийме наступний вигляд:

Рівень 3:

ВВЕДЕННЯ Число учнів; N

Присвоїти змінній значення ЗРОСТАННЯ. Викликати деталізації (21), (22) і (23) Присвоїти змінній значення ВІКУ. Викликати деталізації (21), (22) і (23) Присвоїти змінної значення ВАГИ. Викликати деталізації (21), (22) і (23)

КІНЕЦЬ

Проявивши деякий старання, ми отримали справжню модульну структуру При цьому неявним чином було прийнято рішення вводити значення всіх показників в один і той же масив, скажімо А (), і передавати назва показника через одну строкову змінну, скажімо А $ З урахуванням сказаного деталізації можна закодувати у вигляді підпрограм наступним чином:

500 REM ПІДПРОГРАМА введеннязначення

510 PRINT ВВЕДІТЬ ; N” ЗНАЧЕНЬ ; А $

520 FOR I = 1 ТО N

530 INPUT А (I)

540   NEXT I

550   RETURN

400 REM ПІДПРОГРАМА ОБЧИСЛЕННЯ СЕРЕДНЬОГО

410 S=0

420 FOR I = 1 ТО N

430   S=S+A(I)

440   NEXT I

450   S=S/N

460  RETURN

700 REM ПІДПРОГРАМА ВИВЕДЕННЯ ЗНАЧЕНЬ

710 PRINT СЕРЕДНЯ ЗНАЧЕННЯ; A $ ОДНО ; S

720 RETURN

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

200 REM ПІДПРОГРАМА ПРОЦЕСУ

210  GOSUB 500

220  GOSUB 400

230  GOSUB 700

240  RETURN

Зверніть увагу на те, що ця підпрограма по суті являє собою деталізацію 11

Основна програма виходить як переклад в оператори Бейсика рівня 3: 10 REM ОСНОВНА ПРОГРАМА 20 DIM A (100)

30 INPUT ЧИСЛО УЧНІВ; N 40 А $ = ЗРОСТАННЯ 50 GOSUB 200 60 А $ = ВІКУ

70 GOSUB 200                                                      ,

80 A $ = ВАГИ 90 GOSUB 200100 STOP

Може знадобитися вказівку після тексту підпрограм заключного оператора 750 END На кожному етапі процесу деталізації описувані дії втілювалися у вигляді модулів, більшість з яких в кінцевому рахунку ставали подпрограммами Зробити це в даному простому прикладі було легко, але в принципі модулі могли залишатися групами операторів в підпрограмі або в основний програмі

На рис 52 показана результуюча структура програми Кожен оператор GOSUB позначений горизонтальною лінією зі стрілкою, що веде до відповідної підпрограмі Для простоти картини оператори в кожному прямокутнику опущені

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

для модулів високих рівнів, так як модулі нижніх рівнів виконують прості специфічні дії А при описаному вище методі Ви можете планувати проведення певних розширень структур програми перш, ніж дізнаєтеся в точності, як діють модулі нижнього рівня Однак при цьому Вам буде потрібно прийняти деякі рішення, які вплинуть на структуру модулів нижніх рівнів, а Вам необхідно знати, чи можна буде ці модулі перетворити в програму на Бейсике для Вашої ЕОМ Наприклад, немає ніякого сенсу припускати, що ці модулі можуть використовувати матричні (МАТ) функції, якщо такі у Вашій системі не передбачені Тому застосування методу деталізації зверху вниз вимагає вміння прогнозувати здійснимість прийнятих рішень

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

Необхідно підкреслити, що наведений вище приклад програми був підібраний так, щоб вона розпадалася на прості модулі, які могли бути перетворені в підпрограми В інших завданнях простого дублювання дій на кожному етапі може і не бути і при розробці з рішення модулі можуть увійти в основну програму

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

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

(Б) Для зображення рівня 2 намалюйте окремо кожен з прямокутників дій, отриманих в (а), і заповніть їх деякими діями у вигляді символів усередині прямокутника (В) Для зображення рівня 3 і наступних рівнів продовжуйте розробку кожного прямокутника із зображенням процесу доти, поки деталі не будуть опрацьовані до кінця У міру опрацювання деталей символи вкладених ітерацій і прийняття рішення стають все менше і менше, проте не забувайте, що будь-який прямокутний символ можна виділити з діаграми і розвивати як окремий модуль, тобто як підпрограму або функцію

(Г) Вивчення розробки в цілому, незалежно від того, уміщається вона в прямокутнику на одній сторінці або розподілена по декількох прямо-

кутника, призводить до закінченої схемою написання команд програми на Бейсике Замініть підходящі прямокутні блоки на підпрограми або функції, використовуючи критерії, що обговорювалися на етапі (д) попередньої специфікації розробки

Застосування структограмм розраховано на те, щоб Ви обмежувалися вживанням правильних програмних структур, так як при використанні чисто словесних описів легше відхилитися від проходження принципам структурного програмування Перший етап розробки в термінах структограмм прийме наступний вигляд:

Ввести число учнів

(11) Обчислити середній зріст (12) Обчислити середній вік (13) Обчислити середня вага Кінець

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

(11)

Ввести N значень

Цикл для обчислення середнього

Роздрукувати результати

Звичайно, при бажанні на цьому етапі можна було б додати більше деталей, наприклад ввести символи повторення операцій для (21) і (22) Деталізація окремих зазначених вище процесів призводить до наступних структограммам:

(23)

ДРУК результатів ПОВЕРНЕННЯ

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

Джерело: Уолш Б Програмування на Бейсике: Пер з англ М: Радіо і звязок, 1988 336 с: ил

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*