Как только вы включили модуль в свою программу, все констан-
ты, типы данных, переменные, процедуры и функции, описанные в
секции интерфейса этого модуля, становятся доступными для вашей
программы. Например, допустим, имеется следующий модуль:
unit MyStuff;
interface
const
MyValue = 915;
type
MyStars = (Deneb,Antares,Betelgeuse);
var
MyWord : string[20];
procedure SetMyWord(Star : MyStars);
function TheAnswer : integer;
implementation
.
.
.
end.
Как можно видеть здесь в интерфейсной части модуля, та часть
модуля, которая находится в интерфейсной секции, является видимой
для вашей программы (и может ею использоваться). С учетом этого
можно написать следующую программу:
program TestStuff;
uses MyStuff;
var
I : integer;
AStar : MyStars;
begin
Writeln(myValue);
AStar := Deneb;
SetMyWord(AStar);
Writeln(MyWord);
I := TheAnswer;
Writeln(I)
end.
После включения в программу оператора uses MyStuff вы можете
ссылаться на все идентификаторы, описанные в интерфейсной секции
модуля МyStuff (МyWord, МyValue и так далее). Однако, рассмотрим
следующую ситуацию:
program TestStuff;
uses MyStuff;
const
MyValue = 22;
var
I : integer;
AStar : MyStars;
function TheAnswer : integer;
begin
TheAnswer := 1
end;
begin
Writeln(myValue);
AStar := Deneb;
SetMyWord(AStar);
Writeln(MyWord);
I := TheAnswer;
Writeln(I)
end.
В этой программе переопределяются некоторые из идентификато-
ров, описанных в МyStuff. Будучи скомпилированной и выполненной,
эта программа будет использовать собственные определения для
МyValue и ТheAnswer, поскольку они были описаны позднее, чем оп-
ределения в МyStuff.
Вероятно, вам интересно знать, каким образом в такой ситуа-
ции можно ссылаться на идентификаторы в МyStuff. Для этого необ-
ходимо перед каждым идентификатором помещать имя МyStuff с точкой
(.). Например, рассмотрим еще одну версию этой программы:
program TestStuff;
uses MyStuff;
const
MyValue = 22;
var
I : integer;
AStar : MyStars;
function TheAnswer : integer;
begin
TheAnswer := 1
end;
begin
Writeln(MyStuff.MyValue);
AStar := Deneb;
SetMyWord(AStar);
Writeln(MyWord);
I := MyStuff.TheAnswer
Writeln(I)
end.
Эта третья программа даст такие же ответы, что и первая, да-
же в том случае, если вы переопределите MyValue и TheAnswer. В
действительности вы имели полное право написать первую программу
следующим образом:
program TestStuff;
uses MyStuff;
var
I : integer;
AStar : MyStuff.MyStars;
begin
Writeln(MyStuff.MyValue);
AStar := My.Stuff.Deneb;
MyStuff.SetMyWord(AStar);
Writeln(My.Stuff.MyWord);
I := MyStuff.TheAnswer;
Writeln(I)
end.
Отметим, что имя модуля может предшествовать любому иденти-
фикатору: константе, типу данных, переменной или подпрограмме.