Ссылки на описания модуля
Как только модуль включается в программу (через uses), все константы, типы данных, переменные, процедуры и функции, описанные в секции интерфейса этого модуля, становятся доступными для этой программы.
В том случае, если имена переменных и функций в интерфейсной части модуля и в программе, использующей этот модуль, совпадают, то действует следующее правила видимости имен:
- интерфейсные идентификаторы модулей, указанных в списке USES других модулей (т.е. используемых в других модулях), образуют самый внешний блок программы;
- интерфейсные элементы модулей, использующих с помощью USES другие модули, образуют блок, вложенный в первый блок, и т.д.
- самый внутренний блок – программа, использующая модули.
Например:
Program P; Uses A; … end. | Unit A; Interface Uses B; … end. | Unit B; Interface … end. |
то вложенность блоков будет иметь вид:
интерфейсные идентификаторы модуля B |
| ||
интерфейсные идентификаторы модуля A
| |||
Пример показывает:
- из программы видно то, что и в А, и в В;
- из А видно то, что в В, но не видно то, что в программе;.
- из В не видно того, что в А и не видно того, что в программе.
Таким образом, при совпадении имени (идентификатора) в программе и модулях A и B, обращение в программе будет происходить к переменной, описанной в программе (действует старое правило видимости переменных в Паскале – локальная переменная перекрывает видимость глобальной).
Для обращения в теле основной программы к переменной или функции, описанной в модуле, необходимо применить составное имя, состоящее из имени модуля и имени переменной, разделенных точкой. Например, пусть имеется модуль, в котором описана переменная К:
unit A; interface uses B; var K: Integer; implementation ................ end. | unit B; interface var K: String; ................ end. |
В модуле А локальная (для него) переменная K будет перекрывать область видимости глобальной переменной К (из модуля B).
Пусть программа Р, использующая этот модуль, также содержит переменную К. Для того, чтобы в программе P иметь доступ к переменной K из модуля A, необходимо задать составное имя вида <имя модуля>.К:
Program P;
uses A;
var
K: Char;
begin
k :='a'; { обращение к переменной К из программы }
A.k:=25; { обращение к переменной К из модуля А}
B.k:=’25’; { обращение к переменной К из модуля B}
end.
Следует отметить, что имя модуля (в составном имени?) может предшествовать любому идентификатору: константе, типу данных, переменной или подпрограмме.
Дата добавления: 2016-05-28; просмотров: 1403;