В данном топике я подробно расскажу, из чего состоит модуль в Object Pascal. Итак, рассмотрим модуль в деталях.
unit _Unit_; |
Ключевое слово и название модуля |
interface |
Начало интерфейсной части модуля |
uses |
Раздел подключения модулей |
const |
Раздел описания констант, доступных подключающему модулю |
type |
Раздел описания типов, доступных подключающему модулю |
var |
Раздел описания переменных, доступных подключающему модулю |
|
Раздел описания заголовков подпрограмм, доступных подключающему модулю (которые описанных в разделе implementation) |
implementation |
Начало описания внутреннего функционала модуля |
uses |
Дополнительный раздел подключения модулей |
label |
Раздел описания меток безусловного перехода |
const |
Раздел описания констант внутреннего функционала |
type |
Раздел описания типов внутреннего функционала |
var |
Раздел описания переменных внутреннего функционала |
|
Раздел описания подпрограмм (заголовки которых можно описать в интерфейсной секции Interface, для вызова из подключающего модуля) |
initialization |
Раздел инициализации модуля (специальный раздел, который осуществляет действия при запуске модуля (такие, как, инициализация переменных, выделение памяти и т.п.)) |
finalization |
Раздел деинициализации модуля (специальный раздел, специальный раздел, который осуществляет действия при завершении работы модуля (такие, как, освобождение занимаемой памяти и т.п.)) |
end. |
Окончание модуля |
Следует отметить что, все операнды, которые описаны в разделе interface (константы, типы данных, переменные (const, type, var)), а так же заголовки подпрограмм (процедур и функций), все они доступны для вызова из модулей, к которым подключен данный модуль. Константы, типы данных, переменные (label const, type, var), которые описаны в разделе implementation, служат исключительно для внутренних целей и используются только в пределах модуля, обратится к ним из других модулей невозможно. Данное правило относится и к подпрограмм, которые описываются в разделе implementation, заголовки которых не описаны в разделе interface. Таким образом, модуль разделен на две части: внешняя (глобальная) и внутренняя (локальная).
А сейчас, для закрепления теории, рассмотрим все на более конкретном примере. Следует отметить, что обязательными разделами являются только interface и implementation (см. рисунок).
Все остальное используется по мере необходимости и не является обязательным. Итак, пример.
unit _Unit_;
interface
const
PI_ = Pi; // Описываем константу и присваиваем ей результат функции Pi
type
// Описываем специальный пользовательский тип
// из трех переменных (полей) типа Extended
TVector3E = record
X, Y, Z: Extended;
end;
var
_2PI: Extended; // Описываем переменную, которая будет хранить значение PI_ * 2
// Описываем заголовки функций
function LngCirc(R: Extended): Extended;
function Magn(V: TVector3E): Extended;
function MagnExt(V1, V2: TVector3E): Extended;
//Всё описанное выше доступно другим модулям, подключающим данный модуль
implementation
// Функция вычисляет длину окружности
// радиуса R (доступна из других модулей)
function LngCirc(R: Extended): Extended;
begin
Result := _2PI * R;
end;
// Функция вычисляет вектор двух точек V1 и V2
// (внутренняя (локальная) функция)
// (доступна исключительно в пределах модуля)
function Vector(V1, V2: TVector3E): TVector3E;
begin
Result.X := V1.X - V2.X;
Result.Y := V1.Y - V2.Y;
Result.Z := V1.Z - V2.Z;
end;
// Функция вычисляет магнитуду вектора
// (доступна из других модулей)
function Magn(V: TVector3E): Extended;
begin
Result := Sqrt(Sqr(V.X) * Sqr(V.Y) * Sqr(V.Z));
end;
// Функция вычисляет расстояние
// между двумя векторами (доступна из других модулей)
function MagnExt(V1, V2: TVector3E): Extended;
var
_V: TVector3E;
begin
_V := Vector(V1, V2);
Result := Magn(_V);
end;
initialization
_2PI := PI_ * 2; // Инициализируем переменную _2PI
end.
Как видно из примера, вызвать из других модулей можно все функции, кроме функции Vector. Если вам вдруг понадобится эта функция для использования за пределами модуля, то, просто, пропишите её заголовок, в разделе interface.
Скачать исходники
|