Власні модулі

ред.

Модулі на паскалі зберігаються в двох типах файлів: .pas містять текст модуля, та .tpu, які містять готові відкомпільовані модулі, які можуть використовуватись іншими програмами.

В Turbo Pascal модуль (unit) вважається окремою програмою і створюється як звичайний .pas - файл, оформлений за такою схемою:

 
unit імя_модуля; {Заголовок модуля}
interface {позначення початку розділу інтерфейсу.}
uses список_використовуваних_модулів
type 
const 
var 
procedure 
function 
implementation {Заголовок розділу реалізації}
{Опис локальних модулів, типів, констант, змінних, процедур і функцій, а також процедур і функцій, заголовки яких оголошені в розділі interface}

begin
{Розділ ініціалізації.}
end.

Як і програма, текст модуля розпочинається з заголовку і закінчується службовим словом еnd з крапкою. Але заголовок модуля розпочинається не зі слова program, а зі службового слова unit і є обов’язковим. Після слова unit вказується ім’я модуля, яке повинно співпадати з ім’ям файлу, який містить модуль (наприклад, для заголовка unit module; текст модуля повинен зберігатися в файлі module.pas, в результаті компілювання створюється файл module.tpu). Завершується заголовок крапкою з комою. Наведене в заголовку ім’я модуля вказують при його підключенні до програми або іншого модуля.

За заголовком модуля йде його інтерфейсна частина, яка розпочинається зі службового слова interface. В ній перераховуються програмні ресурси (константи, типи, змінні, заголовки процедур і функції), які призначені для використання іншими модулями і програмами. Описані тут елементи називаються видимими (зовнішніми). Вимоги до написання тут такі самі, як і в Turbo Pascal, але для процедур і функцій вказують лише заголовки, причому директиви external, forward і assembler не ставляться.

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

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

Розділи іnterface та implementation обов’язкові, навіть якщо вони пусті, заголовки вказати необхідно.

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