Читайте также:
|
|
Глава VI МОДУЛИ
Модуль – это автономно компилируемая программная единица, включающая в себя различные компоненты интерфейсного раздела (типы, константы, переменные, процедуры и функции) и, возможно, некоторые исполняемые операторы инициирующего раздела. Появление объектов в интерфейсной части делает их доступными для других модулей и основной программы. Тела процедур и функций располагаются в исполняемой части модуля, которая может быть скрыта от пользователя.
Роль модулей в Delphi не исчерпывается только механизмом раздельной компиляции. Delphi связывает с каждым включаемым в программу окном собственный модуль и таким способом локализует все свойства окна в отдельной программной единице. Основная программа весьма специфична: она содержит перечень всех используемых модулей и несколько исполняемых операторов, обеспечивающих создание нужных окон и связь программы с Windows. Вся основная работа программы управляется кодом, содержащимся в модулях.
Модуль имеет следующую структуру:
unit < имя >
Interface
< интерфейсная часть >
Implementation
< исполнительная часть >
Initialization
< инициирующая часть >
Finalization
< завершающая часть >
END.
Здесь Unit 1 – единица; < имя > - имя модуля:
interface – интерфейс, начинает интерфейсную часть модуля;
implementation – выполнение, начинает исполняемую часть;
initialization – инициация, начинает инициирующую часть модуля;
finalization – завершение, начинает завершающую часть модуля;
END – признак конца модуля.
Имя модуля служит для его связи с другими модулями и основной программой. Эта связь устанавливается специальным предложением
Uses < сп. модулей >
Uses – использует; < сп. модулей > - список модулей, с которыми устанавливается связь; элементами списка являются имена модулей, отделяемые друг от друга запятыми. Например, Uses Windows, SysUtils, MyUnit;
В интерфейсной части модуля содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), которые должны стать доступными основной программе и/или другим модулям. При объявлении глобальных подпрограмм в интерфейсной части указывается только их заголовок, например,
Unit Cmplx
Interface
type
Complex = record
re, im: Real
end;
Function Addc (x, y,: Complex): Complex;
Function Mulc (x, y,:Complex): Complex;
Если теперь в другом модуле написать предложение
USES Cmplx;
то в нём станут доступными тип Complex и две процедуры – Addc и Mulc из модуля Cmplx.
Исполняемая часть содержит описания подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты – вспомогательные типы, константы, переменные и подпрограммы, а также метки, если они используются в инициирующей части.
Описанию подпрограммы, объявленной в интерфейсной части, в исполняемой части должен предшествовать заголовок, в котором можно опускать список формальных переменных (и тип результата для функции), так как они описаны в интерфейсной части.
Но если заголовок подпрограммы приводится в полном виде, т.е. со списком формальных параметров и объявлением результата, он должен совпадать с заголовком, объявленным в интерфейсной части. Повторение заголовка в исполняемой части должно быть полным и точным.
Инициирующая и завершающая части чаще всего отсутствуют вместе с начинающими их словами initialization.
В инициирующей части размещаются операторы, которые исполняются до передачи управления основной программе и обычно используются для подготовки её работы. Например, в них могут инициироваться переменные, открываться нужные файлы и т.д. В завершающей части указываются операторы, выполняющиеся после завершения работы основной программы (в них освобождаются выделенные программе ресурсы, закрываются файлы и т.д.). Если несколько модулей содержат инициирующие части, эти части выполняются последовательно друг за другом в порядке перечисления модулей в предложении Uses главной программы. Если несколько модулей содержат завершающие части, эти части выполняются последовательно друг за другом в порядке, обратном перемещению модулей в предложении Uses главной программы.
Доступ к объявленным в модуле объектам.
Пусть, например, мы создаём модуль, реализующий арифметику комплексных чисел (такая арифметика в Object Pascal не предусмотрена). Арифметика комплексных чисел реализуется 4-мя функциями:
Unit Cmplx (Library Complex);
// -----------------------------
Interface
//------------------------------
type Complex = record; (T Complex = record);
re, im: real; +
END; +
Function Addc (x, y: Complex): Complex; -
Function Subc (x, y: Complex): Complex; -
Function Mulc (x, y: Complex): Complex; -
Function Divc (x, y: Complex): Complex; -
Сonst -
C: Complex = (re: 0.1; от -1); -
//---------------------------- -
Implementation -
//--------(Cmplx)-------(T)------------- (T)
Function Addc (x,y: Complex); Complex;
// Сложение комплексных чисел
begin +
Result. re:= x. re + y. re; +
Result. im: = x. im + y. im; +
end; //Addc (T) (T) -
(Cmplx)
Function Subc (x, y: Complex): Complex;
// Вычитание комплексных чисел -
Begin
Result. re: = x. re – y. re; +
Result. im: = x. im – y. im; +
end; // Subc +
(Cmplx) (T) T
Function Mulc (x, y: Complex): Complex;
// Умножение комплексных чисел
begin +
Result. re: = x. re * y. re – x. im * y. im; +
Result. im: = x. re * y. im + x. im * y. re; +
end; //Mulc +
Function Divc (x, y: Complex): Complex;
// Деление комплексных чисел
var +
Z: Real; +
begin +
Z: = sqr (y. re) + sqr (y. im); +
// Защищает программу от краха в случае, когда Z = 0;
try
Result. re: = (x. re * y. re + x. im * y. im)/Z; +
Result. Im: = (x. re * y. Im – x. Im * y. re)/Z; +
except +
Result. re: = 1.1 e 309; +
Result. Im = 1.1 e 309; +
End; -
End (Divc); +
End.
Exports
CmplxAdd Index 1 name ‘ADDC’------------?-------?-----
CmplxSub Index 2
CmplxMul Index 3
CmplxDiv Index 4
begin
END.
Чтобы создать такой модуль, следует сначала с помощью опции File/New вызвать каталог репозитория и на странице New выбрать пиктограмму для включения в программу пустого модуля без связанного с ним окна. Текст модуля следует сохранить в файле CMPLX. PAS: имя файла должно совпадать с именем модуля – только в этом случае Delphi сможет автоматически найти модуль и следить за его обновлением.
После создания модуля его имя нужно упомянуть в предложении Uses того модуля, в котором будет использоваться вновь созданные подпрограммы, типы константы (в нашем модуле – тип Complex, подпрограммы AddC, SubC, MulC, DivC и константа C).
Дата добавления: 2015-01-30; просмотров: 95 | Поможем написать вашу работу | Нарушение авторских прав |