Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Циклические ссылки на модули

Читайте также:
  1. Абсолютные ссылки
  2. Биологически важные гетероциклические соединения
  3. В следующей таблице приведен список типов индексов, доступных в SQL Server 2005, а также указаны ссылки на дополнительные сведения.
  4. Вопрос 35 Циклические колебания численности популяций и вспышки численности
  5. Иммуномодулирующие средства.
  6. Как используются модули
  7. Матка. Яйцеводы, влагалище. Строение, функции, развитие. Циклические изменения органов женской половой системы. Их гормональная регуляция. Возрастные изменения.
  8. Модулирующие системы мозга. Генерализованная и локальная активация.
  9. Нормативные ссылки
  10. Относительные и абсолютные ссылки

Рассмотрим следующие программу и два модуля:

Program MainProg; { Выводит текст, используя WriteXY }

Uses Crt, Display;

Begin

ClrScr;

WriteXY (1, 1, ‘ Левый верхний угол экрана );

WriteXY (100, 100, ‘ За пределами экрана );

WriteXY (81 - Length ( Снова в экран… ), 15, ‘ Снова в экран… )

End.

Unit Display; { Содержит процедуру вывода WriteXY }

Interface

Procedure WriteXY (X, Y: Integer; Message: String);

Implementation

Uses

Crt, Error;

 

Procedure WriteXY;

Begin

If (X in[1 .. 80]) and (Y in[1 .. 25])

Then

Begin

gotoXY (X, Y);

Write (Message)

End

Else

ShowError ( Неверные координаты в WriteXY )

End

End.

Unit Error; { Содержит процедуру обработки ошибки }

Interface

Procedure ShowError (ErrMsg: String);

Implementation

Uses

Display;

 

Procedure ShowError;

Begin

WriteXY (1, 25, ‘ Ошибка: + ErrMsg)

End

End.

Видим, что основная программа MainProg использует модуль Display, который содержит в своей интерфейсной секции одну процедуру WriteXY. Последняя перемещает курсор в заданную точку и выводит там заданное сообщение. В противном случае она вызывает процедуру обработки ошибки ShowError, которая содержится в модуле Error. Когда процедура обработки ошибки будет выводить сообщение на экран, начинаются циклические ссылки — она использует процедуру WriteXY из Display.

Видим также, что предложения Uses в секции реализации обоих модулей ссылаются друг на друга (что и обеспечивает возможность циклических ссылок). Это можно сделать потому, что компилятор может для обоих модулей выполнить полную компиляцию интерфейсных секций.

Другими словами, компилятор воспринимает ссылку на частично скомпилированный модуль A в секции реализации модуля B, если интерфейсные секции модулей A и B не зависят друг от друга.

Совместное использование описаний

Введем в процедуры из предыдущего примера дополнительный параметр, задающий прямоугольное окно на экране:

Procedure WriteXY (SomeWindow: WindRec; X, Y: Integer; Message: String);

Procedure ShowError (SomeWindow: WindRec; ErrMsg: String);

Две процедуры находятся в разных модулях. Даже если описать WindRec в интерфейсной секции одного модуля, то это описание не будет доступно в другом модуле. Выход состоит в том, чтобы описать третий модуль, в котором содержится только описание записи WindRec:

Unit WindData;

Interface

Type

WindRec = Record

X1, Y1, X2, Y2: Integer;

...

End;

Implementation

End.

Теперь необходимо в интерфейсной секции модулей Display и Error в предложении Uses добавить имя модуля WindData. Это допустимо, т.к. модуль WindData не зависит от своего предложения Uses, а модули Display и Error ссылаются друг на друга только в секциях реализации.




Дата добавления: 2015-02-16; просмотров: 84 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав