Практика программирования (Бейсик, Си, Паскаль)

       

Оформление модулей на Паскале


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

Unit имя_модуля;

Если в качестве имени паскалевской программы может выступать любой идентификатор, в том числе и достаточно длинный, то именем модуля может быть только имя файла, допустимое в операционной системе MS-DOS. Это связано с тем, что при некоторых обстоятельствах (например, если пользователь вместо режима compile выбрал режим Make или Build) система программирования Turbo Pascal вынуждена заново оттранслировать пользовательские модули. И тогда она пытается открыть дисковые файлы, имена которых совпадают с именами обновляемых модулей.

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

Вслед за служебным словом implementation начинается раздел описания всех процедур и функций, включенных в состав модуля. Среди них, естественно, должны присутствовать все процедуры и функции, упомянутые в интерфейсной части. Однако, кроме них, в состав модуля могут входить любые процедуры и функции внутреннего пользования, доступные только внутри данного модуля. Об их существовании внешний пользователь не обязан знать. Если после завершения исполнительного раздела (implementation) встречается операторная скобка begin, то за ней следует так называемая инициирующая часть модуля. Эта часть содержит обычные операторы, выполняемые непосредственно перед стартом головной программы. Как и программа, модуль завершается операторной скобкой end с последующей точкой.

Любая из описанных выше частей в модуле может быть пустой. Например, модуль, содержащий только интерфейсную часть с описанием структур данных типа календарных дат, позволит не повторять эти описания в основной программе:

Unit Calendar interface type

Days=(Mon,Tue,Wed,Thu,Fri,Sat,Sun);

WorkingDays=Mon..Fri;

Months=(Jan,Feb,Mar,Apr,May,June,

July,Aug,Sept,Oct,Nov,Decem);

Summer=June..Aug;

Autumn=Sep.. Nov;

Spring=Mar..May;

DayNo=l..31;

YearNo=1900..2119;

Date=record Day:DayNo;

Month:Months;

Year:YearNo; end;

implementation end.

Модуль, содержащий только инициирующую часть, может произвести какие-то первоначальные действия — открыть временный файл, проверить принтер и т. п.



Содержание раздела