Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Структура модуля




Подключение модулей

Для того чтобы подключить к программе один или несколько модулей, необходимо сразу после заголовка программы поместить следующую строку:

uses <имя_модуля_1>, …, <имя_модуля_N>;

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

Например, можно пользоваться функцией abs, не объявляя и не описывая ее, поскольку эта функция включена в состав стандартного модуля System, автоматически подключаемого к любой программе на языке Паскаль. Если же требуется очистить экран монитора перед выдачей результатов, то придется подключить к программе модуль crt и воспользоваться содержащейся в нем процедурой clrscr.

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

Структура модуля аналогична структуре программы, однако есть несколько существенных различий. Например, рассмотрим модуль:

unit <идентификатор>;

interface

uses <список модулей>; { Необязательный }

{ открытые описания }

implementation

{ закрытые описания }

{ процедуры и функции }

begin

{ код инициализации }

end.

Заголовок модуля начинается зарезервированным словом unit, за которым следует имя модуля (идентификатор). Отметим, что модуль должен иметь такое же имя, что и файл, в котором он находится.

Интерфейсный раздел – «общедоступная» часть в модуле, следует сразу после заголовка модуля и заканчивается перед зарезервированным словом implementation. Интерфейс определяет, что является "видимым" для любой программы (или модуля), использующей данный модуль. Любая программа, использующая этот модуль, имеет доступ к этим «видимым» элементам.

Программный модуль может использовать другие модули, для этого они определяются в предложении uses. Предложение uses, если имеет место, то следует сразу после ключевого слова interface.

В интерфейсе модуля можно определять константы, типы данных, переменные, процедуры и функции. Как и в программе, они могут быть расположены в любом порядке, и секции могут встречаться повторно (например, typevar … <процедуры> … consttype).

Процедуры и функции, видимые для любой программы, использующей данный модуль, описываются в секции интерфейса, однако их действительные тела – реализации – находятся в секции реализации.

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

Обычные процедуры и функции, описанные в интерфейсной секции, должны быть повторно указаны в секции реализации. Заголовок procedure / function должен быть или идентичным тому, который указан в секции интерфейса, или иметь более краткую форму (печатается лишь ключевое слово procedure или function, а за ним указывается имя подпрограммы). Затем подпрограмма должна содержать все свои локальные описания (метки, константы, типы, переменные и вложенные процедуры и функции), за которыми должно находиться основное тело самой подпрограммы.

Пример: Пусть в интерфейсной секции указаны следующие описания:

procedure ISwap(var V1,V2: integer);

function IMax(V1,V2: integer): integer;

Секция реализации тогда должна будет содержать реализацию указанных подпрограмм:

procedure ISwap;

var Temp: integer;

begin

Temp:= V1;

V1:= V2;

V2:= Temp

end; { конец процедуры Swap }

function IMax(V1,V2: integer): integer;

begin

if V1 > V2 then IMax:= V1 else IMax:= V2

end; { конец функции Max }

Подпрограммы, локальные для секции реализации (то есть не описанные в секции интерфейса), должны иметь полный, несокращенный заголовок procedure / function.

Обычно вся секция реализации модуля заключена между зарезервированными словами implementation и end. Однако если перед end поместить зарезервированное слово begin, а между ними – операторы, то получившийся составной оператор, очень похожий на основное тело программы, становится секцией инициализации модуля.

Секция инициализации представляет собой место, где инициализируются структуры данных (переменных), которые использует программный модуль или которые он делает доступными вызывающей программе.

Пример: стандартный модуль Printer использует секцию инициализации для выполнения запросов на открытие (для вывода) текстового файла Lst, который затем можно использовать в операторах Write и Writeln в программе.

При выполнении программы, использующей некоторый модуль, секция инициализации этого модуля вызывается перед запуском основного тела программы. Если программа использует более одного модуля, то секции инициализации всех модулей вызываются перед тем, как выполнить основное тело программы, в порядке, указанном в операторе программы uses.

Модули, которые использует программа, уже оттранслированы и хранятся, как машинный код, а не как исходный код на Паскале. Когда компилятор встречает это предложение uses, он присоединяет машинный код, представленный в секции реализации, к самой программе.




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 610; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.