Тема:
Модульне програмування. Turbo Pascal
1. Призначення модулів та їх структура. 3
2. Компіляція програм, які використовують модулі 7
2.1 Стандартні модулі 9
Модуль Crt. 10
Модуль Dos. 11
Модуль Graph. 12
Використана література. 13
Коли говорять про файли, які містять програми на Turbo Pascal, мова йде про три типи файлів.
а) текстові файли з текстами програм на Turbo Pascal (зазвичай ці файли мають розширення pas, хоча й це не обов’язково);
б) tpu - файли;
в) готових до виконання файлів, отриманих в результаті програм (exe - файли).
Що ж таке tpu - файли?
З розвитком обчислювальної техніки з’явилася можливість в масовому порядку вирішувати складні задачі, які вимагали написання великих за обсягом програм з залученням для цього колективу розробників. Так з’явилось поняття модульного програмування. Під цим терміном розуміють і розбиття програми на окремі фрагменти, і створення бібліотек фрагментів, з яких можливо сформувати програму (в Turbo Pascal вставки в текст програми здійснюються за рахунок директиви компіляції {SI имя_включаемого_файла}, і написання підпрограм, в тому числі й зовнішніх (ця можливість також є в Turbo Pascal). Можна також створювати незалежно зберігаючі і компільовані програмні одиниці, які мають інтерфейс, який дозволяє вик5ористовувати різні засоби цих програмних одиниць в розроблювальних програмах. Такі програмні одиниці в Turbo Pascal називають модулями. В результаті їх компілювання створюються файли з розширенням. tpu (tpu - файли). Використання модулів дозволяє створювати великі програми (ехе - файли), хоча розмір окремого tpu - файла не може перевищувати 64 Кбайт.
В Turbo Pascal модуль (unit) вважається окремою програмою і створюється спочатку як звичайний pas - файл, оформлений за певними правилами.
unit імя_модуля; {Заголовок модуля}
interface {Заголовок інтерфейсної частини}
uses список_використовуваних_модулів
type …
const …
var …
procedure.
function …
implementation {Заголовок розділу реалізації}
{Опис локальних модулів, типів, констант, змінних, процедур і функцій, а також процедур і функцій, заголовки яких оголошені в розділі interface}
вegin
{Розділ ініціалізації}
end.
Як і програма, текст модуля розпочинається з заголовку і закінчується службовим словом еnd з крапкою. Але заголовок модуля розпочинається не зі слова program, а зі службового слова unit і є обов’язковим. Після слова unit вказується ім’я модуля, яке повинно співпадати з ім’ям файлу, який містить модуль (наприклад, для заголовка unit module; текст модуля повинен зберігатися в файлі module. pas, в результаті компілювання створюється файл module. tpu). Завершується заголовок крапкою з комою. Наведене в заголовку ім’я модуля вказують при його підключенню до програми або іншого модуля. Щоб підключити модуль до програми, необхідно відразу ж за заголовком програми (якщо він є) після службового слова uses вказати ім’я підключає мого модуля (uses module;). Службове слово uses в програмі може зустрітися лише один раз, тому для підключення декількох модулів їх імена перераховують через кому (uses module1,module2;).
За заголовком модуля йде його інтерфейсна частина, яка розпочинається зі службового слова interface. В ній перераховуються програмні ресурси (константи, типи, змінні, заголовки процедур і функції), які призначені для використання іншими модулями і програмами. Описані тут елементи називаються видимими (зовнішніми). Вимоги до написання тут такі самі, як і в Turbo Pascal, але для процедур і функцій вказують лише заголовки, причому директиви externa1, forward і assembler не ставляться.
Відмітимо також, що в розділі uses перераховуються імена модулів, які використовуються в даному випадку. Але вони не доступні програмам, які використовують даний модуль. Тому щоб отримати в програмі доступ до ресурсів модуля, його необхідно оголосити явно, а не через інший модуль.
Після інтерфейсної частини йде розділ реалізації, який розпочинається зі службового слова implementation. Тут оголошуються невідомі поза модулем внутрішні елементи (їх ще називають невидимими або схованими) - локальні змінні, константи, типи, процедури і функції, а також модулі, ресурси яких використовуються в середині даного модуля. Крім того, тут здійснюється реалізація тих процедур і функцій, заголовки яких описані в інтерфейс ній частині і які відомі поза модулем. Такий метод опису процедур і функцій здійснюється за наступною причиною: користувачу для звернення до підпрограми достатньо знати її ім’я і список параметрів. Знання способу її реалізації зовсім не потрібно. Якщо здійснюється модифікація підпрограми, яка розміщена в модулі, то достатньо змінити тільки її тіло в розділі реалізації, не змінюючи заголовка інтерфейсної частини. В зв’язку з цим програми, які використовують таку підпрограму, не змінюються. Якщо підпрограма оголошена в інтерфейс ній частині, то в розділі реалізації її заголовок зазвичай надається тільки у вигляді імені без вказування переліку і типів параметрів, а також типу повернення значення для функції.
Розділи іnterface та implementation обов’язкові, навіть якщо вони пусті, заголовки вказати необхідно.
Після розділу реалізації в модулі розташовується розділ ініціалізації, який розпочинається зі слова begin, за яким йдуть оператори, які будуть виконуватися до операторів з тіла програми (наприклад, встановлення початкових значень для деяких змінних, оголошених в модулі). Розділ ініціалізації не є обов’язковим, тому. Якщо при підключені модуля не потрібно робити ніяких початкових встановлень, він може не використовуватися (разом зі службовим словом begin).
До програми можна підключити декілька модулів. В свою чергу модуль може використовувати ресурси інших модулів. В цьому випадку в програмі в операторі uses вказують тільки імена тих модулів, які безпосередньо використовуються в програмі. Характерною особливістю модулів є те, що вони не повністю включаються в exe - файл: до програми додається лише те, що використовується. Заборонено звернення модуля до самого себе, хоча, якщо модуль оголошується в розділі реалізації, це обмеження розповсюджується лише на пряме звернення.
Можлива й така ситуація, коли в програмі і інтерфейс них частинах декількох модулів, підключених до неї, оголошені за допомогою одного і того самого імені різні об’єкти (наприклад, в програмі є розділ uses module1,module2; і як в програмі, так і в інтерфейс них частинах обох модулів існують описи з іменем name). В цьому випадку програма оперує передусім, елементами, які оголошені в ній самій. (тобто тим елементом name, який оголошений в програмі). Для звернення до об’єкту, ім’я якого перекрито, необхідно зліва до імені об’єкту дописати ім’я модуля, в якому він оголошений, об’єднав їх крапкою (наприклад, module1. name або System. Real).
В Turbo Pascal немає зв’язку між іменем програми і іменем файлу, в якому вона зберігається. Але для підключення модуля до програми його необхідно знайти на диску. Тому ім’я модуля і ім’я файлу, який містить модуль, повинні співпадати. Вихідний текст модуля зберігається в файлі з розширенням pas, а отриманий в результаті компіляції код модуля - в файлі з розширенням tpu (від Turbo Pascal Unit). Якщо ім’я модуля module, то відповідними файлами будуть module. pas і module. tpu.
При компіляції програми за допомогою команди Compile - > Compile компілятор послідовно відшуковує tpu - файли, які містять коди модулів які використовуються, для їх підключення. Пошук відбувається наступним чином:
1. Перегляд системного бібліотечного файлу модулів turbo. tp1 (від Turbo Pascal Library), який повинен зберігатися в тому самому каталозі, що й файл turbo. exe.
Якщо модуля немає в файлі turbo. tp1, то пошук продовжується в поточному каталозі.
Якщо і тут модуль не знайдений, то йде перегляд каталогів, перерахованих в розділі Unit Directories діалогового вікна, яке викликається командою меню Options - > Directories (перерахування каталогів відбувається через крапку з комою). Якщо модуль не виявлено, буде створене повідомлення про помилку і компіляція програми буде завершена.
При обрані команди компіляції Compile - >Make здійснюється пошук pas - файлу, який містить вихідний текст модуля. Виявивши його, в тому ж самому каталозі необхідно знайти відповідний tpu - файл. Якщо tpu - файл створений пізніше pas - файлу, то йде підключення модуля з tpu - файлу. Якщо ж tpu - файл не виявлений або pas - файл коректувався після створення tpu - файлу, то обов’язково компілюється нова версія tpu - файлу.
При компіляції за допомогою команди Compile - >Build обов’язково йде компіляція всіх pas - файлів, що містять тексти модулів, які використовуються. Якщо якогось з pas - файлів немає, але є відповідний tpu - файл, відбувається підключення останнього.
Модулі завжди компілюються перед компіляцією програми.
Системний бібліотечний файл модулів turbo. tp1 (в Turbo Pascal він єдиний) володіє спеціальною структурою, орієнтованої на швидкий пошук модулів, які в ньому містяться. Включення і виключення модулів виконується за допомогою спеціальної програми tpumover. exe. Пошук модулів в файлі turbo. tp1 відбувається завжди, тому не стоїть робити його дуже великим. Модулі, які часто використовуються, необхідно поміщати в файл turbo. tp1.
В Turbo Pascal є вісім стандартних модулів (System, Dos, Crt, Printer, Overlay, Graph, Turbo3, Graph3). Модуль System підключається автоматично, і його не потрібно згадувати у розділі uses. Всі останні модулі необхідно оголошувати в програмі для забезпечення доступу до їх ресурсів.
В модулі System зберігаються типи, константи, змінні і підпрограми авторської версії мови, стандартної мови, а також ряд додаткових підпрограм. Відсутність цього модуля призводить до неможливості компіляції програми.
Модуль Crt використовується при роботі з екраном у текстовому режимі, під час читання з клавіатури, а також забезпечує деякі інші функції.
Модуль Dos забезпечує звернення до засобів операційної системи MS DOS.
Модуль Printer дозволяє здійснювати вивід на принтер за допомогою процедур Write і WriteLn. Для цього оголошена файлова змінна Lst типу Text, яка зв’язана з логічним пристроєм prn.