- •1. Історія структурного програмування
- •2. Основи структурного програмування
- •Способи декомпозиції:
- •3. Методики процедурного програмування
- •Етапи розв’язування складної задачі х зверху вниз
- •4. Плюси і мінуси методик програмування
- •5. Інші проблеми структурного програмування
- •6. Основні блоки структурованої програми
- •7. Особливості структурного програмування
Ефективність програми. Оптимально програма займає мінімум пам'яті і виконується за мінімум часу. Останнім часом частенько ефективність програм підміняється "необхідними системними вимогами" - користувача вимушують постійно нарощувати потужність устаткування. Але якщо у конкурента вимоги до системи виявляться нижчими, а процеси стануть виконуватися швидше, користувач неодмінно відвернеться від вашої програми.
6. Основні блоки структурованої програми
Структурні блоки ми часто називаємо структурами програмування, що ще управляють.
Всього їх три:
функціональний блок (у простому випадку ми називаємо його проходженням);
конструкція ухвалення рішення або галуження (зазвичай двійкове або дихотомичное - множинне - рішення);
конструкція узагальненого циклу.
Функціональний блок - це обчислювальний оператор, оператор введення, виведення або послідовність цих і інших операцій з єдиним входом і єдиним виходом.
Наприклад:
V[i]:=0; { оператор привласнення}
MyProc(V[i], V[j]); { виклик процедури}
writeln('Hello!'); { оператор виведення}
Конструкція прийняття рішення має один вхід і декілька виходів.
У Паскалі це оператор галуження if і варіантний оператор case.
if а< b then
min:=a
else
min:=b;
Узагальнений цикл - це структура, яка складається з послідовності операцій і перевірки умов, причому ця послідовність може виконуватися повторно.
Залежно від місця перевірки умови, узагальнений цикл називається циклом з передумовою або з умовою поста. Кількість повторів (кроків, ітерацій) залежить від умови. У Паскалі ми працюємо з трьома циклами: до класичних циклів з передумовою і умовою поста додається цикл з параметром - окремий випадок циклу з передумовою.
for i:=1 to n do
Vec[i]:=random(10);
7. Особливості структурного програмування
Власне, про всі особливості ми вже говорили вище, але хотілося б ще раз звести їх в єдину систему:
Модульна - це послідовна декомпозиція програми на все дрібніші складові - модулі, блоки, підпрограми. Один з цих модулів є в проекті головним і містить щось ніби конспекту всієї програми. Зазвичай цей модуль містить тільки виклики підлеглих модулів або блоків. У нашому прикладі з сортуванням рядків матриці основна програма між begin і end дійсно тільки викликає послідовно підпрограми, які займаються всіма етапами рішення задачі.
Структурна - складання програм як комбінації базових структур трьох типів: проходження, галуження, цикл. Що стосується програмування на мовах високого рівня, то у нас і можливості немає використовувати що-небудь інше. Але, звичайно, непогано при цьому розуміти, чим ми користуємося і чого добиваємося.
Читабельність і ясність коду - проходження правилам і угодам по організації програм. Чіткість і простота тексту спрощують відладку завдання, її супровід і подальшу модифікацію.
Давайте подумаємо, якими властивостями повинна володіти хороша програма:
Коректність - вона повинна видавати правильні результати на будь-яких початкових даних і при будь-яких відгуках користувача. Коректність знову повертає нас до поняття верифікації і проблеми оптимального тестування.
Достовірність - навіть у виняткових ситуаціях програма зобов'язана реагувати адекватно (наприклад, видавати повідомлення про помилкуакуратно виходити з блоку, де проиошел збой). Програма не повинна ні "падати" без повідомлень, ні видавати безглузді результати. З достовірністю пов'язано поняття "Захисного програмування": кодування поведінки програми не тільки для нормальних умов, але і для будь-яких нестандартних ситуацій.
Зручність для користувача - програма повинна мати простій, зрозумілий і доброзичливий призначений для користувача інтерфейс.
Зручність для експлуатації (відкрита система) - зміна і розширенні програми повинно вимагати мінімуму праці і часу.
Наочність і ясність тексту - ми вже говорили про це, досить дотримувати принципи структурного програмування, слідувати синтаксичним угодам і документувати програму.
Ефективність - при виконанні програма повинна витрачати мінімум махайнных ресурсів.
Мобільність (вона ж - переносимість або транспортабельна) - можливість перенесення програми з одного оточення в інше. Під оточенням розуміється сукупність версії мови програмування, компілятора, стандартних бібліотек, операційної системи і архитектуры комп'ютера.
Про цю характеристику хочеться поговорити докладніше:
Мобільність програми потрібна для:
переходу на нові версії середовищ програмування;
переходу на нові версії операційної системи;
обміну модулями між різними проектами;
перекладу допоміжної програми під інші типи або версії основної.
Останнє твердження потрібно пояснити. Зараз навіть крупні і серйозні програми часто використовуються на базі інших комплексів. Наприклад, комплекс розрахунку характеристик фізичних процесів може базуватися на конструкторському CAD/CAM середовищі, в якому формуються тривимірні моделі для обраховування. Софтверна компанія в цьому випадку "тягнутиме" відразу декілька версій своєї програми - під декілька CAD/CAM систем і, можливо, не одну версію кожній з них.
Розрізняють два суміжні поняття - мобільність і адаптованість. Мобільність - це міра легкості перенесення програми з одного оточення в інше без змін. Адаптованість говорить про такі зміни програми, після яких вона задовольнятиме функціональним вимогам і системним умовам нового оточення.
Щоб написати мобільну програму, необхідно:
Строго відбирати використовувані засоби мови. Якщо ви використовуєте недокументовані можливості середовища, нестандартні елементи мови, перенесення виявиться скрутним.
Чітко виділяти елементи зв'язку з операційною системою. Асемблерні вставки, використання функцій самою ОС, краще звести до мінімуму і, принаймні, виділяти їх в окремі блоки. Чим вище рівень операцій, які ви використовуєте, тим менше проблем з ними виникне при перенесенні.
По можливості не використовувати нестандартні любительські модулі і бібліотеки. Крім того, що ви отримаєте головний біль при перенесенні, такі бібліотеки часто виявляються невідладженими і містять неприємні баги. Правда, зараз подібні елементи майже завжди пропонуються разом з початковими кодами, але потрібно добре уявляти собі, що для вас простіше: написати свій аналогічний модуль або виправляти чужий код.
Питання для самоконтролю:
Яка необхідна риса хорошої реалізації структурного стилю програмування?
Що називається інформаційним простором завдання?
Поняття про декомпозицію. Способи декомпозиції.
Які ви знаєте методики процедурного програмування?
Що називається драйвером? Його функції.
Що називається заглушкою? Його функції.
Охарактеризувати етапи розв’язування складної задачі Х зверху вниз.
Як реалізується низхідний тип програмування?
Вказати плюси і мінуси методик програмування.
Які існують проблеми структурного програмування?
Перелічити і охарактеризувати основні блоки структурованої програми.
Перелічити особливості структурного програмування.
Якими властивостями повинна володіти хороша програма?
Для чого потрібна мобільність програми? Чим вона відрізняється від адаптованості?
Що потрібно для написання мобільної програми?
