Модули. Модульное программирование
Что такое модуль.
Модуль (блок, UNIT) - самостоятельная программная единица, ресурсы которой могут быть использованы другими программами.
Очень краткая историческая справка.
Структурное программирование не предполагает наличия модулей. Впервые понятие модуль (UNIT-концепция) было введено Н. Виртом для языка более высокого уровня Модула-2. Позднее этот термин и способ построения программ были реализованы и в других языках. В Turbo Pascal модульное программирование используется с 4-й версии.
Использование модулей считается прогрессивным подходом в программировании.
Структура модуля
Вы уже неоднократно сталкивались с понятием модуль (или библиотека, что одно и тоже), когда использовали в своих программах модули GRAPH.TPU и CRT.TPU. Это стандартные модули, внутренняя организация которых нам недоступна, но доступны для использования процедуры, функции и другие элементы программирования входящие в данные библиотеки. Недоступность внутренней организации модуля является одной из отличительных особеностей модулей.
Модуль состоит из следующих частей:
1. Заголовок модуля.
2. Интерфейсная часть. {описания видимых объектов}
3. Реализационная часть. {описания скрытых объектов}
4. Инициализационная часть.
Заголовок модуля
Заголовок модуля состоит из зарезервированного слова UNIT после которого записывается имя модуля. Имя модуля, это обычный идентификатор, к которому добавляется ещё одно требование: совпадение имени модуля с именем файла в котором он хранится. Поэтому имя модуля не может состоять более чем из восьми символов (ограничение MS-DOS).
Так как модуль представляет собой самостоятельную программную единицу, то и компилируется он тоже самостоятельно (отдельно). Правда в результате компиляции мы получаем файл с расширением не EXE, как обычно, а TPU. Например BAZA.TPU. Как вы уже знаете, подключение модуля к программе, осуществляется строкой USES BAZA (или CRT, например) после заголовка программы. То есть идентификация модуля в программе осуществляется по его имени. Поэтому заголовок модуля обязателен.
Интерфейсная часть
В интерфейсной части описываются (декларируются) все константы, типы данных и переменных, процедуры и функции, доступные в этом модуле для использования внешними программами.
Интерфейсная часть начинается зарезервированным словом INTERFACE.
Модуль, как и любая самостоятельная программа, может использовать ресурсы других модулей. Они подключаются как всегда с помощью слова uses сразу после служебного слова INTERFACE. Если другие модули не используются, то эта строка отсутствует. После этого, как и в любой самостоятельной программе, могут быть:
• раздел объявления констант;
• раздел объявления типов;
• раздел объявления переменных;
• раздел объявления процедур и функций.
В разделе объявления процедур и функций указываются лишь заголовки подпрограмм. Сами подпрограммы приводятся в реализационной части.
Реализационная часть
Реализационная (исполнительная) часть включает все подпрограммы модуля. Она может также содержать локальные метки, константы, типы и переменные.
Реализационная часть начинается служебным словом IMPLEMENTATION. Затем после слова uses могут быть указаны имена модулей, которые используются подпрограммами реализационной части. Если необходимый модуль подключён в интерфейсной части, то здесь его подключать не нужно. Далее могут быть:
• раздел объявления меток;
• раздел объявления локальных констант;
• раздел объявления локальных типов;
• раздел объявления локальных переменных;
• раздел объявления процедур и функций.
При описании подпрограмм допустимо использовать сокращённые заголовки (без указания параметров подпрограммы).
Определённые в реализационной части типы данных и структуры данных недоступны извне.
Инициализационная часть
В некоторых случаях перед обращением к модулю следует провести так называемую инициализацию модуля. Это могут быть различные действия, такие как: установить связь с файлом; очистить экран и т.д. Подобные действия выполняются в инициализационной части, которая представляет собой составной оператор, содержащий вызовы необходимых процедур. Например
begin
Assign(f,data.dat);
end.
Инициализационная часть выполняется один раз, во время старта программы. Если инициализация модуля не нужна, то в разделе инициализации помещается лишь end. Пример
program ex_35_1;
uses Crt, Arf;
var a,b: real;
ch: char;
begin
Info;
Vvod(a,b);
repeat
ch := readkey;
if ch=#0 then begin
ch:=readkey;
gotoxy(1,10);
case ch of
#59: writeln(Сумма ,sum(a,b));
#60: writeln(Разность ,raz(a,b));
#61: writeln(Частное ,chs(a,b));
#62: writeln(Произведение ,pro(a,b));
#63: vvod(a,b);
end;
end;
until ch=#68;
end.
Unit Arf;
Interface
Procedure Info;
Procedure Vvod(var x,y: real);
Function Sum(x,y: real): real;
Function Raz(x,y: real): real;
Function Pro(x,y: real): real;
Function Chs(x,y: real): real;
Implementation
uses Crt;
Procedure Info;
Begin
Writeln(F1 - сумма);
Writeln(F2 - разность);
Writeln(F3 - частное);
Writeln(F4 - произведение);
Writeln(F5 - ввод новых чисел);
Writeln(F10 Выход);
End;
Procedure Vvod;
Begin
GotoXY(1,8);
Write(Введите первое число ); Readln(x);
Write(Введите второе число ); Readln(y);
End;
Function Sum;
begin Sum:=x+y; end;
Function Raz;
begin Raz:=x-y; end;
Function Chs;
begin Chs:=x/y; end;
Function Pro;
begin Pro:=x*y; end;
Begin
ClrScr;
End.
Модули. Модульное программирование
Лекции по предмету «Программирование»