Компиляция модулей
При разработке крупных программных проектов можно использовать различные средства, управляющие способом компиляции модулей, (в частности), например, определены три режима компиляции: COMPILE, MAKE и BUILD. Режимы отличаются только способом связи компилируемого модуля или основной программы с другими модулями, объявленными в предложении USES.
При компиляции модуля или основной программы в режиме COMPILE все модули, перечисленные в предложении USES, должны быть предварительно откомпилированы, и результаты компиляции помещены в одноименные файлы с расширением TPU. Например, в программе (модуле) имеется предложение
USES METOD;
то на диске в каталоге, объявленном опцией UNIT DIRECTORIES уже должен находиться файл METOD. TPU. Файл с расширением TPU (TURBO PASCAL UNIT) создается автоматически в результате компиляции модуля.
В режиме MAKE компилятор проверяет наличие TPU – файлов для каждого объявленного модуля. Если нет какого-либо TPU-файла или в исходный текст модуля внесены какие-либо изменения, система осуществляет компиляцию одноименного файла с расширением PAS. Также в этом режиме предусмотрено перекомпилирование всех моделей, обращающихся к модулю, в интерфейсную часть которого внесены изменения.
Режим MAKE существенно облегчает процесс разработки крупных программ с множеством модулей: программист избавляется от необходимости следить за соответствием существующих TPU-файлов их исходному тексту, так как система делает это автоматически.
В режиме BUILD система компилирует соответствующие PAS-файлы для каждого объявленного в предложении USES модуля (игнорируются существующие TPU-файлы). Таким образом, после компиляции в этом режиме должны быть учтены все сделанные изменения в любом из модулей.
Подключение модулей к основной программе и их возможная компиляция осуществляются в порядке их объявления в предложении USES. При переходе к очередному модулю система предварительно отыскивает все модули, на которые он ссылается.
Доступ к объявленным в модуле объектам
Рассмотрим пример создания модуля реализующего арифметику комплексных чисел.
UNIT Cmplx;
{--------------------------------------------------}
INTERFACE
{--------------------------------------------------}
type complex = record
re, im : real;
end;
PROCEDURE AddC (x, y : complex; var z : complex);
PROCEDURE SubC (x, y : complex; var z : complex);
PROCEDURE MulC (x, y : complex; var z : complex);
PROCEDURE DivC (x, y : complex; var z : complex);
const c : complex = (re : 0.1; im : -1);
{--------------------------------------------------}
IMPLEMENTATION
{--------------------------------------------------}
PROCEDURE AddC;
begin
z. re := x. re + y. re; z. im := x. im + y. im;
end;
PROCEDURE SUBC;
begin
z. re := x. re - y. re; z. im := x. im - y. im;
end;
PROCEDURE MulC;
begin
z. re := x. re * y. re - x. im * y. im;
z. im := x. re * y. im + x.im * y. re;
end;
PROCEDURE DivC;
var zz : real;
begin
zz :=sgr (y. re) + sgr (y. im);
z. re := (x. re * y. re + x. im * y. im ) / zz;
z. im := (x. re * y. im - x. im * y. re) / zz;
end;
END.
Текст модуля помещается в файл CMPLX.PAS, создается TPU-файл после компилирования одноименного PAS-файла. После этого станут доступны процедуры из новой библиотеки. Ниже приводится пример программы, в которой осуществляются четыре арифметические операции под двумя комплексными числами.
USES Cmplx;
VAR
a, b, c : complex;
BEGIN
a. re := 1; a. im := 1;
b. re := 1; b. im := 2;
AddC (a, b, c);
WRITELN (‘Сложение :’, c. re : 5 : 1, c. im : 5 : 1);
SUBC (a, b, c);
WRITELN (‘Вычитание :’, c. re : 5 : 1, c. im : 5 : 1);
MULC (a, b, c);
WRITELN (‘Умножение:’, c. re : 5 : 1, c. im : 5 : 1);
DIVC (a, b, c);
WPITELN (‘Деление:’, c, re : 5 : 1, c. im : 5 : 1);
END.
После объявления USES Cmplx программе стали доступны все объекты, объявленные в интерфейсной части модуля CMPLX. При необходимости можно переопределить любой из этих объектов, как это произошло, например, с объявленной в модуле типизированной константой C.
1осн.[182-189]