- •Теорія алгоритмів
- •1. Поняття алгоритму
- •2. Способи запису алгоритмів
- •3. Основні алгоритмічні конструкції
- •Лінійний алгоритм
- •Алгоритм, що розгалужується
- •Циклічний алгоритм
- •4. Створення алгоритму
- •5. Математична модель, вибір структури даних
- •6. Алгоритмічні мови
- •7. Структурні принципи алгоритмізації
- •Низхідне проектування
- •8. Модульне програмування
- •Модульна структура програмних продуктів
- •Контроль програмного модуля.
- •9. Сучасний погляд на алгоритмізацію
8. Модульне програмування
Модульне програмування засноване на понятті модуля - логічно взаємозв'язаній сукупності функціональних елементів, оформлених у вигляді окремих програмних модулів.
Модуль характеризують:
один вхід і один вихід - на вході програмний модуль отримує певний набір початкових даних, виконує змістовну обробку і повертає один набір результатних даних;
функціональна завершеність - модуль виконує перелік регламентованих операцій для реалізації кожної окремої функції у повному складі, достатніх для завершення початої обробки;
логічна незалежність - результат роботи програмного модуля залежить тільки від початкових даних, але не залежить від роботи інших модулів;
слабкі інформаційні зв'язки з іншими програмними модулями - обмін інформацією між модулями повинен бути по можливості мінімізований;
осяжний за розміром і складністю програмний елемент.
Таким чином, модулі містять визначення доступних для обробки даних, операції обробки даних, схеми взаємозв'язку з іншими модулями.
Властивості модулів:
функціональна цілісність і завершеність (кожен модуль реалізує одну функцію, але реалізує добре і повністю);
автономность и независимость от других модулей (независимость работы модуля-преемника от работы модуля-предшественника; при этом их связь осуществляется только на уровне передачи/приема параметров и управления);
можливість розвитку;
відвертість для користувачів і розробників (для модернізації і використання);
коректність і надійність;
посилання на тіло модуля відбувається тільки по імені модуля, тобто виклик і актуалізація модуля можливі тільки через його заголовок.
Властивості (переваги) модульного проектування алгоритмів:
можливість розробки алгоритму великого об'єму (алгоритмічного комплексу) різними виконавцями;
можливість створення і ведення бібліотеки найбільш часто використовуваних алгоритмів (підалгоритмів);
полегшення тестування алгоритмів і обгрунтування їх правильності ;
спрощення проектування і модифікації алгоритмів ;
зменшення складності розробки (проектування) алгоритмів (або комплексів алгоритмів);
наблюдаемость обчислювального процесу при реалізації алгоритмів.
Модульна структура програмних продуктів
Принципи модульного програмування програмних продуктів багато в чому схожі з принципами низхідного проектування. Спочатку визначаються склад і підлеглість функцій, а потім - набір програмних модулів, що реалізовують ці функції.
Однотипні функції реалізуються одними і тими ж модулями. Функція верхнього рівня забезпечується головним модулем; він управляє виконанням нижчестоячих функцій, яким відповідають підлеглі модулі.
При визначенні набору модулів, що реалізовують функції конкретного алгоритму, необхідно враховувати наступне:
кожен модуль викликається на виконання вищестоящим модулем і, закінчивши роботу, повертає управління модулю, що викликав його;
ухвалення основних рішень в алгоритмі виноситься на максимально "високий" за ієрархією рівень;
для використання однієї і тієї ж функції в різних місцях алгоритму створюється один модуль, який викликається на виконання в міру необхідності. В результаті подальшої деталізації алгоритму створюється функціонально-модульна схема.
Тестування алгоритму – це перевірка правильності або неправильності роботи алгоритму на спеціально заданих тестах або тестових прикладах – завданнях з відомими вхідними даними і результатами (іноді достатні їх наближення). Тестовий набір повинен бути мінімальним і повним, тобто що забезпечує перевірку кожного окремого типу наборів вхідних даних, особливо виняткових випадків.
Тестування алгоритму не може дати повної (100%-ой) гарантії правильності алгоритму для всіх можливих наборів вхідних даних, особливо для достатньо складних алгоритмів.
