
Модули
Модули предназначены для хранения стандартных готовых программ или наборов данных. В ИСР Delphi используются:
Основной модуль – модуль формы. Модули общего назначения. Модули данных.
Модули динамических библиотек. Пакеты.
Модули пакетов.
Модуль включается в программу при компиляции. Это увеличивает память программы.
DLL подключается в ходе выполнения программы при обращении к процедуре или функции описанной в ней.DLL загружается только на время использования. Память почти не занимается.
Модуль может хранить и подпрограммы и данные, а DLL - только подпрограммы.
Основной модуль – модуль формы. Его интерфейсная часть содержит объявление нового класса (типа формы) и при конструировании формы автоматически обновляется ИСР.
Программа на Delphi состоит из главной программы и (возможно) нескольких модулей. Применение модулей позволяет:
использовать метод бригадного программирования, сократить объем основной программы, при изменении подпрограммы перекомпилируется только она.
Модуль - хранилище стандартных готовых подпрограмм или данных. По своей структуре Модуль = Программа.
Может храниться и компилироваться отдельно. Может использоваться другими программами или модулями путем вызова их подпрограмм по именам.
Не используется автономно. Хранится в двух вариантах:
Модуль на языке Delphi, <имя>.pas. Расширение для языка Pascal, на котором основан язык Delphi Компилированный модуль, <имя>.dcu.
Структура модуля
unit <имя>; |
// Заголовок модуля |
interface |
|
<Интерфейсная часть> implementation
<Исполняемая часть>
initialization |
// Не обязательно |
<Инициирующая часть> |
|
finalization |
// Не обязательно |
<Завершающая часть> end.
unit Complex;
Имя модуля обязательно, оно используется для связи с вызывающей программой. Должно совпадать с именем файла с кодом модуля на Delphi: Complex.pas.
Ссылка на модули в вызывающей программе в строке: uses <список модулей>.
Интерфейсная часть interface содержит:
Ссылки на внешние модули, используемые в данном модуле. Объявления глобальных объектов (типов, констант, переменных). Заголовки (только) подпрограмм (функций и процедур). Инициирующая часть initialization содержит операторы, которые выполняются до передачи управления вызывающей программе. Например, инициируются переменные, открываются файлы и др. Завершающая части finalization содержит операторы, которые выполняются после завершения работы вызывающей программы. Например, освобождаются выделенные программе ресурсы, закрываются файлы и др.
Пример
unit Complex; |
// Заголовок модуля |
interface |
// Заголовок интерфейсной части |
type |
// Объявление глобального типа |
TComplex = record |
// Запись |
Re, Im: Real; |
// Два поля – вещественные |
числа end;
function AddC(x,y: TComplex):TComplex; // Заголовок функции сложения
function SubC(x,y: TComplex):TComplex; // Заголовок функции вычитания
function MultC(x,y: TComplex):TComplex; // Заголовок функции умножения
function DivC(x,y: TComplex):TComplex; // Заголовок функции деления
implementation |
// Заголовок исполняемой части |
|
function AddC(x,y: TComplex):TComplex; // Описание функции сложения |
||
begin |
|
|
Result.Re:=x.Re + y.Re; |
|
|
Result.Im:=x.Im + y.Im; |
|
|
end; |
// AddC |
|
function SubC(x,y: TComplex):TComplex; // Описание функции вычитания |
||
begin |
|
|
Result.Re:=x.Re – y.Re; |
|
|
Result.Im:=x.Im – y.Im; |
|
|
end; // SubC |
|
|
function MultC(x,y: TComplex):TComplex; // Описание функции умножения |
||
begin |
|
|
Result.Re:=x.Re*y.Re – x.Im*y.Im; |
||
Result.Im:=x.Re*y.Im + |
x.Im*y.Re; |
|
end; |
// MultC |
|
function DivC(x,y: TComplex):TComplex; // Описание функции деления |
||
var z: Real; |
// Вспомогательная локальная переменная |
|
begin |
|
// Расчет знаменателя |
z:=sqr(y.Re)+sqr(y.Im); |
||
try |
|
// Защита от краха при делении на ноль |
Result.Re:=(x.Re*y.Re + x.Im*y.Im)/z; |
||
Result.Im:=(x.Re*y.Im – x.Im*y.Re)/z; |
||
except |
// При делении на 0 ответ очень большой |
|
Result.Re:=1.1e309; |
||
Result.Im:=1.1.e309; |
|
|
end; |
// DivC |
|
end; |
|
|
end. |
|
|
Доступ к объектам модуля
Для создания модуля и работы с ним нужно: Командой Файл=>Новый=>Приложение создать проект
вызывающей программы. Создать модуль можно только в проекте.
Командой Файл=>Новый вызвать окно архива и выбрать в нем Модуль (модуль без формы).
Заголовок модуля по умолчанию Unit с текущим номером. По умолчанию инициирующей и завершающей частей нет. При необходимости их следует добавить вручную.
Вредакторе кода нужно занести в него код модуля. Сохранить модуль. В нашем примере с именем Complex.Pas. Откомпилировать модуль.
Вкоде вызывающей программы в строку uses добавить
ссылку на модуль ( в нашем примере Complex). Теперь в коде вызывающей программы можно употреблять
функции, определенные в модуле.