Принципи проектування програм
План
Принципи проектування програм.
Базові елементи програми
Практичні правила проектування програм.
Література
Спробуємо визначити, як слід проектувати програму. Чи існують методи, які дозволяють організувати створення програми таким чином, щоб вона була зрозумілою не тільки комп’ютеру, але й програмісту, який її використовує або здійснює супроводження?
У програмуванні відомі 2 основні підходи до проектування програм [14, 15]:
нисхідний (top-down, згори донизу, аналітичний);
висхідний (down-top, знизу догори, синтетичний).
Аналітичне програмування (інколи згадується як “систематичне програмування” або “ієрархічне програмування”) є загальним методом боротьби зі складностями шляхом покрокових уточнень. Він починається з ясної постановки задачі, яку треба розв’язати, і розвивається далі шляхом розбиття її на підзадачі, приводячи врешті решт до таких задач, розв’язок яких легко виразити через базові поняття. Без особливих обмежень можна вважати, що потрібний ступінь деталізації досягнуто, якщо кожна підзадача може бути реалізована окремим модулем (підпрограмою) – це і буде базовим поняттям проекту. Аналітичне програмування орієнтоване на проблему: ми шукаємо розв’язок задачі і на кожному кроці даємо повний опис розв’язку (з відповідною мірою деталізації).
Прикладом аналітичного проектування для навчальної програми можна вважати таку схему головної прорами:
При цьому кожний з рівнів може в разі потреби деталізуватись, наприклад, обробка даних вимагає включення в проект деяких додаткових рівнів. Приміром, для обчислення коренів квадратного рівня потрібно аналізувати значення дискримінанту рівняння.
Синтетичне програмування починається з рівня базових понять і розвивається далі шляхом формування на їх основі більш абстрактних понять, приводячи, врешті решт, до таких, в термінах яких можна легко виразити розв’язок усієї задачі. Отже, синтетичне програмування не може бути орієнтоване на проблему, оскільки, якщо ми можемо виразити розв’язок задачі повністю в термінах базових понять, то ми вже усе зробили! Крім того, такий підхід гарантує накопичення проблем на кінцевому етапі створення программного продукту – раптом виявляється, що ретельно відтестовані поодинці модулі невірно працюють разом. Причиною, як правило, виявляється не досить продумана логіка програми – саме те, з чого починається аналітичний підхід.
Слід зауважити, що у абсолютно чистому вигляді жоден з цих підходів не може бути життєздатною технологією проектування. Реальна стратегія полягає в розумному поєднанні цих підходів. При цьому варто пам’ятати, що програмування “згори донизу” (аналітичне) застосовується здебільшого для розв’язання конкретних прикладних задач, а програмування “знизу догори” (синтетичне) — для написання операційних систем і системних бібліотек.
Після створення проекту в цілому розглянемо окремий модуль.
2. Базові елементи програми
Базовими елементами програми називаються такі основні логічні структури:
слідування — це послідовність операторів (груп операторів), які виконуються один за одним в порядку їх запису в тексті програми і на блок-схемі позначаються послідовними прямокутниками, де стрілками показаний порядок їх виконання в програмі;
розгалуження — керівна структура, яка в залежності від виконання заданої умови (вона міститься в ромбі) визначає вибір для виконання одного з двох заданих у цій структурі операторів (груп операторів);
повторення — цикл, у якому група операторів може виконуватися знову, якщо справедлива задана умова.
В теорії програмування доведено теорему про те, що програма для розв’язку будь-якої логічної задачі може бути складена лише із зазначених вище базових структур. Щоправда, це доведення стосується лише так званих простих програм, тобто таких, які мають лише по одному входу та виходу, не містять нескінченних циклів і недосяжних фрагментів. В цьому розумінні кожна базова структура є простою програмою, а отже, кожна група операторів, позначених на блок-схемах прямокутником, може, у свою чергу, включати будь-яку з базових структур.
Слід зауважити, що насправді до трьох основних структур слід додати допоміжні: неповну альтернативу, виклик процедури (особливо важливим це стає у випадку рекурсивної процедури), багатогілкове розгалуження.
3. Практичні правила проектування програм.
При створенні проекту програми будемо користуватись наступними правилами.
Чітке визначення поставленої задачі (ще до етапа програмування).
Немає нічого гіршого, ніж неповне або неправильне визначення вимог до програмного забезпечення. Якщо замовник не може визначити свої вимоги або якщо програміст не може зрозуміти вимоги замовника, то розробка проекта приречена на невдачу.
При визначенні задачі слід добиватися точності.
Вибір алгоритму.
Правило: не починайте програмувати перший-ліпший алгоритм, який спав вам на думку. Перегляньте декілька варіантів і оберіть найкращий.
Хороший алгоритм — це необхідна, але не достатня умова хорошої програми.
Приклад демонструє істотно різну кількість перевірок в алгоритмах, які перевіряють, чи є n простим числом:
Перевіряємо: | n=10 | n=100 | n=1000
2, 3, 4, 5, …, n
(всі числа до n) | 8 | 98 | 998
2, 3, 5, 7, …, n
(всі непарні числа до n) |
5 |
50 |
500
2, 3, 5, …, [vn]
(всі непарні числа до [vn]) |
2 |
5 |
16
Існує досить багато літератури, присвяченої розробці класичних алгоритмів (наприклад, Д. Кнут, Мистецтво програмування).
Вибір мови програмування.
Якщо мова програмування не нав’язана замовником і існує можливість її вибору, слід мати на увазі, що всі існуючі мови програмування можна розділити на наступні групи:
універсальні мови програмування високого рівня;
спеціалізовані мови розробника програмного забезпечення;
спеціалізовані мови користувача;
мови низького (системного) рівня.
Серед універсальних мов високого рівня безперечним лідером є мова С (разом з С++). До безумовних переваг останніх належать: наявність операторів, що забезпечують базові програмні елементи; можливість програмування на низькому рівні з доступом до адрес оперативної пам’яті; великі бібліотеки службових підпрограм та класів. Ці обставини зробили мови С та С++ основними мовами розробки операційних систем, компіляторів, тощо, чим ще більше підвищили їх популярність. З іншого боку, вони мають і ряд недоліків, до яких в першу чергу слід