Доступ к объявленным в модуле объектам

Пусть, например, мы создаем модуль, реализующий арифметику комплексных чисел (такая арифметика ни в стандартном Паскале, ни в Турбо Паскале не предусмотрена). К сожалению, в Турбо Паскале нельзя использовать функции, значения которых имели бы структурированный тип (запись, например), поэтому арифметика комплексных чисел реализуется четырьмя процедурами:

UNIT Cmplx;

{---------------------}

INTERFACE

{---------------------}

type complex = record

re, im:real

end;

Procedure AddC (x, у : complex; var z : complex) ;
Procedure SubC (x, у : complex; var z : complex) ;
Procedure MulC (x, у : complex; var z : complex) ;
Procedure DivC (x, у : complex; var z : complex) ;
const        
с : complex = (re : 0.1; im : -1);  

{---------------------}

IMPLEMENTATION

{---------------------}

Procedure AddC; begin

z.re := x.re + y.re; z . im := x.im + y. im

end {AddC};

Procedure SubC;

begin

z.re := x.re - y. re ;

z.im := x.im - y.im

end {SubC};

Procedure MulC;

begin

z.re := x.re*y.re - x.im*y. im;

z.im := x.re*у.im + x.im*y.re

end {MulC};

Procedure DivC;

var

zz : real;

begin

zz := sqr(y.re) + sqr(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 {DivC};

end.

Текст этого модуля следует поместить в файл CMPLX.PAS. Вы можете его откомпилировать, создав TPU-файл, после чего вашей программе станут доступны процедуры из новой библиотеки. Например, в следующей программе осуществляется четыре арифметические операции над парой комплексных чисел.

Uses Cmplx;

var

а, Ь, с : 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,"i") ;

SubC(a, b, c) ;

WriteLn("Вычитание: "с.re:5:1, с.im:5:1,"i");

MulC(a, b, c);

WriteLn("Умножение: "c.re:5:1, c.im:5:l,"i") ;

DivC(a, b, c);

WriteLn("Деление: "c.re:5:l, с.im:5:1,"i");

end.

После объявления Uses Cmplx программе стали доступны все объекты, объявленные в интерфейсной части модуля CMPLX. При необходимости можно переопределить любой из этих объектов, как это произошло, например, с объявленной в модуле типизированной константой С. Переопределение объекта означает, что вновь объявленный объект «закрывает» ранее определенный в модуле одноименный объект. Чтобы получить доступ к «закрытому» объекту, нужно воспользоваться составным именем: перед именем объекта поставить имя модуля и точку. Например, оператор

WriteLn(cmplx.c.re:5:l, cmplx.с.im:5:1,"i");

выведет на экран содержимое «закрытой» типизированной константы из предыдущего примера.