Модуль в Object Pascal – это особым образом оформленная библиотека программных элементов. Под программными элементами понимаются любые элементы языка Object Pascal: константы, типы, переменные, подпрограммы. Модуль сам по себе не является выполняемой программой, он может только участвовать в построении программ и других модулей.
Все программные элементы модуля можно разбить на две части:
- программные элементы, предназначенные для использования другими программами или модулями, такие элементы называют видимыми вне модуля;
- программные элементы, необходимые только для работы самого модуля, их называют невидимыми или скрытыми.
В соответствии с этим модуль, кроме заголовка, содержит две основные части, называемые интерфейсом и реализацией.
Модуль имеет следующую структуру:
unit <имя модуля>;
interface
[uses <список модулей подключаемых вместе с модулем>]
[ <описание видимых программных элементов модуля>]
implementation
[uses <список модулей используемых модулем>]
[ <описание скрытых программных элементов модуля>]
[initialization]
[ <операторы инициализации элементов модуля>]
[finalization]
[ <операторы деинициализации элементов модуля>]
end.
Использование в модулях подпрограмм имеет свои особенности. Заголовок подпрограммы содержит все сведения, необходимые для ее вызова: имя, перечень и тип параметров, тип результата для функций, эта информация должна быть доступна для других программ и модулей. С другой стороны, текст подпрограммы, реализующий ее алгоритм, другими программами и модулями не может быть использован. Поэтому заголовок видимой подпрограммы помещают в интерфейсную часть модуля, а полное описание – в часть реализации, причем заголовок в части реализации может не содержать список формальных параметров.
В том случае, если имена программных элементов в интерфейсной части модуля и в программе, использующей этот модуль, совпадают, обращение будет происходить к элементу, описанному в программе. Для обращения к элементу, описанному в модуле, необходимо применить составное имя, состоящее из имени модуля и имени элемента, разделенных точкой.
Рекурсивное использование модулей запрещено.
Если в модуле имеется раздел инициализации, то операторы из этого раздела будут выполнены перед началом выполнения программы, в которой используется этот модуль.
Если в модуле имеется раздел деинициализации, то операторы из этого раздела будут выполнены после выполнения последнего оператора программы, в которой используется этот модуль.
Перечисляемый тип представляет собой ограниченную упорядоченную последовательность скалярных констант, составляющих данный тип. Значение каждой константы задается ее именем. Имена отдельных констант отделяются друг от друга запятыми, а вся совокупность констант, составляющих данный перечисляемый тип, заключается в круглые скобки.
Программист объединяет в одну группу, в соответствии с каким – либо признаком, всю совокупность значений, составляющих перечисляемый тип.
Например, перечисляемый тип Traffic_Light (СВЕТОФОР) объединяет скалярные значения RED, YELLOW, GREEN (КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ). Перечисляемый тип описывается в разделе объявления типов:
type
<имя_типа>=(<имя_константы>[=<выражение>][,…]);
<имя_типа> - имя нового перечисляемого типа;
<имя_константы> - имя константы принадлежащей данному типу;
<выражение> - выражение, дающее результат целого типа, порядковый номер константы.
Упорядоченная последовательность значений, составляющих перечисляемый тип, автоматически нумеруется, начиная с нуля и далее через единицу. Можно изменить номер константы при помощи <выражения>. Если задано выражение, то следующая константа будет иметь номер на единицу больше, если ее номер не задан выражением.
Например:
type
Traffic_Light=(RED, YELLOW=4, GREEN);
Каждое имя константы может принадлежать только одному из перечисляемых типов, заданных в программе.
Описание переменных перечисляемых типов, которые объявлены в разделе описания типов, производится с помощью имен типов.
Например:
type Traffic_Light= (RED, YELLOW=4, GREEN);
var Section: Traffic_Light;
Это означает, что переменная Section может принимать значения RED, YELLOW или GREEN. Также она может принимать ее три значения без имени соответствующие порядковым номерам 1, 2 и 3.
Переменные перечисляемого типа могут быть объявлены непосредственно в разделе описания переменных, например:
var Section: (RED, YELLOW=4, GREEN);
При этом имена типов отсутствуют, а переменные определяются совокупностью значений, составляющих данный перечисляемый тип.
К переменным перечисляемого типа может быть применим оператор присваивания:
Section := YELLOW;
Перечисляемым переменным и константам могут быть применены операции отношения, стандартные функции Pred, Succ, Ord и процедуры Inc, Dec.