Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
33
Добавлен:
07.02.2016
Размер:
100.35 Кб
Скачать

Лекція 4. Процедури та функції. Процедури та функції у мові Pascal. Локальні та глобальні змінні. Формальні та фактичні Модульний підхід до програмування.

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

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

Подання програми як сукупність відносно відокремлених фрагментів з строгими та явно визначеними інтерфейсами сприяє більшій ясності та модифікуванню програми, яку легко перевіряти ( в тому числі і автоматичними засобами), і в кінцевому підсумку приводить до підвищення якості та ефективності програм. Коли велика задача ділиться на частини, то значно простіше зрозуміти та прочитати програму. Це звичайний спосіб управління складною ситуацією: «Розділяй та володарюй!». При цьому переслідують дві мети:

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

  • треба прагнути до того, щоб із модулів можна було формувати великі програми без яких-небудь попередніх знань про внутрішню роботу модуля.

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

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

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

Кожний модуль повинен мати своє призначення, яке відрізняється від інших модулів. Це повинен бути замкнутий блок, вхід та вихід якого точно визначені. Прагнення до функціональної незалежності підпрограм аргументовано: в цьому випадку менш вірогідно, що зміни в одній підпрограмі вплинуть на решту програми (ефект хвилі)[1 ]. Цей ефект можна зменшити, звівши до мінімуму зв’язок між модулями, скоротивши кількість шляхів, по яких зміни чи помилки можуть переходити в інші частини системи. Один з простих шляхів зменшення ефекту хвилі - уникати використання глобальних змінних та робити модулі невеликими. Мінімізація взаємозв’язку між модулями (модульне зчеплення ) виконується за рахунок посилення зв’язку між елементами одного модуля (модульна міцність)[1]. Таким чином тісно зв’язані елементи треба записати в один модуль, а незв’язані - в різні.

Використання модулів приводить до зменшенню складності програми. Складність програми оцінюється по трьом параметрам:

  • функціональна складністьобумовлена тим, що один модуль виконує дуже багато функцій;

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

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

Соседние файлы в папке конспект лекцій 1 паск