Доступ к объявленным в модуле объектам
Пусть, например, мы создаем модуль, реализующий арифметику комплексных чисел (такая арифметика ни в стандартном Паскале, ни в Турбо Паскале не предусмотрена). К сожалению, в Турбо Паскале нельзя использовать функции, значения которых имели бы структурированный тип (запись, например), поэтому арифметика комплексных чисел реализуется четырьмя процедурами:
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-файл, после чего Вашей программе станут доступны процедуры из новой библиотеки. Например, в следующей программе (пример 9.1) осуществляются четыре арифметические операции над парой комплексных чисел.
Пример 9.1.
Uses Cmplx; var а, b, с: 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');
Выведет на экран содержимое "закрытой" типизированной константы из предыдущего примера.