Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekcii_OPI_2sem.doc
Скачиваний:
154
Добавлен:
23.02.2016
Размер:
3.72 Mб
Скачать

3.4. Модульне програмування

Для забезпечення технологічності розроблюваного програмного забезпечення використовується модульне програмування.

3.4.1. Поняття модуля

Приступаючи до розробки програми, слід мати на увазі, що вона, як правило, є великою системою, тому необхідно прийняти міри для її спрощення. Для цього програму розробляють по частинах, які називаються програмними модулями. Такій метод створення програми називають модульним програмуванням.

Модульне програмування основане на понятті модуля – програми чи функціонально завершеного фрагменту програми.

Модуль характеризують:

  • один вхід і один вихід. На вході програмний модуль отримує визначений набір початкових даних, виконує їх обробку і повертає один набір вихідних даних;

  • функціональна завершеність. Модуль виконує набір визначених операцій для реалізації визначених операцій для реалізації кожної окремої функції, достатніх для завершення початої обробки даних;

  • логічна незалежність. Результат роботи даного фрагменту програми не залежить від роботи інших модулів;

  • слабкі інформаційні зв’язки з іншими програмними модулями. Обмін інформацією між окремими модулями повинен бути мінімальним;

  • розмір і складність програмного елемента в розумних рамках.

Таким чином, модулі містять описання початкових даних, операції обробки даних і структури взаємозв’язку з іншими модулями.

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

3.4.2. Основні характеристики програмного модуля

Як розробити хороший модуль, який дійсно буде сприяти спрощенню програми?

У літературі наводяться різні критерії оцінки пригодності (приемлемости) модуля. Були запропоновані наступні критерії:

  • хороший модуль ззовні простіший, ніж всередині;

  • хороший модуль простіше використовувати, ніж побудувати.

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

Розмір модуля вимірюється числом операторів які містяться в ньому. Модуль не повинен бути надто малим чи надто великим. Великі модулі, як правило, складні для розуміння і незручні для внесення змін, вони можуть суттєво збільшити сумарний час повторних трансляцій програми при відладці. Маленькі модулі ускладнюють загальну структурну схему програми і можуть не оправдовувати накладних розходів, пов’язаних з їх оформленням. Зазвичай рекомендуються програмні модулі розміром від декількох десятків до декількох сотень операторів.

Надійність модуля – це міра його внутрішніх зв’язків. Чим вища надійність модуля, тим більше зв’язків скрито від зовнішньої по відношенню до нього частини програми і, відповідно, тим простіша сама програма. Самою слабкою ступінню надійності володіє модуль, надійний по співпаданню. У даному випадку в програмний модуль оформлюються послідовність операторів які повторюються в декількох місцях програми. Якщо виникне необхідність зміни цієї послідовності в одному з контекстів, прийдеться змінювати сам модуль, що може зробити його використання в інших контекстах помилковим. Такий клас програмних модулів не рекомендується для використання.

Функціонально надійний модуль – це модуль, який реалізує одну будь-яку визначену функцію. При цьому він може використовувати і інші модулі. Такий вид надійності модулів рекомендується для використання.

Найвищою ступінню надійності володіє інформаційно міцний модуль – це модуль, який виконує декілька операцій над однією і тією ж структурою даних, яка невідома ззовні цього модуля. Для кожної з цих операцій в такому модулі є свій вхід зі своєю формою звернення до нього. Інформаційно надійний модуль може реалізовувати, наприклад, абстрактний тип даних.

Зчеплення модуля – це міра його залежності по способу передачі даних від інших модулів. Чим слабше зчеплення модуля з іншими модулями, тим сильніше його незалежність від інших модулів. Для оцінки ступені зчеплення існує шість видів зчеплення модулів по:

  • даним;

  • зразку;

  • управлінню;

  • зовнішнім зсилкам;

  • загальної області даних;

  • вмістимому.

Найгіршим видом зчеплення модулів є зчеплення по вмістимому. Таким є зчеплення двох модулів, коли один із них має прямі зсилки на вмістиме іншого модуля (наприклад, на константу, яка знаходиться в іншому модулі). Таке зчеплення модулів недопустиме.

Не рекомендується використовувати також зчеплення по загальній області – це таке зчеплення модулів, коли декілька модулів використовують одну і ту ж область пам’яті.

Зчеплення по зразку припускає, що модулі обмінюються даними, об’єднані в структури. Цей тип забезпечує непогані характеристики порівняно з попередніми. Недолік полягає в тому, що конкретні дані, які передаються, «заховані» в структури, і тому зменшується «прозорість» зв’язку між модулями. Крім того, при зміні структури даних необхідно модифіковувати всі модулі, які її використовують.

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

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

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

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

  • завжди слід використовувати рутинний модуль, якщо це не призводить до поганих зчеплень модулів;

  • залежні від передісторії модулі слід використовувати тільки у випадку, коли це необхідно для забезпечення параметричного зчеплення;

  • в специфікації залежного від передісторії модуля повинна бути чітко сформульована ця залежність таким чином, щоб було можливо прогнозувати поведінку даного модуля при різних послідовних зверненнях до нього.

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

Розрізняють наступні види зв’язності (в порядку зменшення рівня) [1]:

  • функціональна;

  • послідовна;

  • інформаційна (комунікативна);

  • процедурна;

  • часова;

  • логічна;

  • випадкова.

При функціональній зв’язності модуль призначений для виконання однієї функції. Його початкові дані і операції призначені для розв’язання однієї конкретної задачі. Такий модуль має максимальну зв’язність і, як наслідок, хорошу технологічність (простота компіляції, тестування, супроводження).

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

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

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

При часовій зв’язності функцій вважається, що ці функції виконуються паралельно чи на протязі деякого періоду часу. Часова зв’язність даних означає, що вони використовуються в деякому часовому інтервалі. Відмінною особливістю часової зв’язності є те, що дії, які реалізуються такими функціями зазвичай можуть виконуватись в довільному порядку. Наприклад, часову зв’язність мають функції, які виконуються при ініціалізації деякого процесу. Велика ймовірність модифікації функції ще більше зменшує показники технологічності модулів даного виду по порівнянню з попередніми, крім того, вміст модуля з часовою зв’язністю функцій може змінюватись: в нього можуть включатись нові дії і/чи виключатись старі.

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

Модуль, елементи якого мають випадкову зв’язність, має самі низькі показники технологічності, так як його елементи взагалі не зв’язані.

У табл. 3.1 наведені характеристики різних видів зв’язності по експертним оцінкам.

Аналіз табл. 3.1 показує, що при проектуванні програмних модулів краще всього використовувати функціональну, послідовну і інформаційну зв’язності.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]