logo search
Программирование в среде Delphy / Программирование в среде Delphi

12. Модуль unit

Модуль Unit является отдельной программной единицей – он описывается в отдельном текстовом файле с расширением *.pas и транслируется отдельно. Результатом трансляции является машинный код, который записывается в файл с расширением *.dcu. Структура модуля Unit может иметь следующий вид:

Unit Имя модуля;

Interface // Интерфейсная часть модуля

Uses // Имена подключаемых модулей

// Объявления глобальных типов, констант, переменных,

// заголовков процедур и функций, которые будут доступны в других

// модулях, подключивших данный модуль

……………….

Implementation // Секция реализации модуля

Uses // Имена подключаемых модулей

// Здесь могут определяться внутренние константы, типы, переменные,

// процедуры и функции, которые будут доступны только внутри

// данного модуля. Здесь же дается реализация всех процедур и функций,

// объявленных в интерфейсной секции модуля

………………...

Initialization // Секция инициализации модуля

// В этой секции записываются операторы, которые будут выполнены

// сразу после загрузки программы в память ЭВМ. Секции инициализации

// будут выполняться в том порядке, в каком модули Unit описаны

// в основной программе в операторе Uses

// Секция инициализации может отсутствовать в модуле Unit

Finalization // Секция завершения

// Эта секция может присутствовать в модуле Unit, только если в нем есть

// секция инициализации

// Выполнение операторов этой секции происходит после окончания работы

// программы перед выгрузкой ее из оперативной памяти ЭВМ

// Эти секции выполняются в обратном порядке по сравнению с порядком

// выполнения секций инициализации

End. // Конец модуля Unit

Все объявления, сделанные в интерфейсной секции, являются глобальными для программ, использующих данный модуль. Подключение модулей к другим модулям осуществляется оператором Uses со списком подключаемых модулей. Если в интерфейсных секциях модулей есть определения с одинаковым именем, то воспринимается определение того модуля, который находится в конце списке модулей в операторе Uses.

Определения, данные в секции Implementation, имеют силу только внутри данного модуля Unit.

Рассмотрим пример написания модуля Unit для работы с комплексными числами. Любое комплексное число имеет реальную и мнимую части, например: , где are – реальная часть комплексного числа, aim – мнимая часть комплексного числа, а – мнимая единица.

Сложение двух комплексных чисел осуществляется по формуле .

Умножение комплексных чисел определяется формулой

.

В модуль Unit включим две подпрограммы функции для расчета сложения и умножения комплексных чисел:

Unit Complex; // Начало модуля Complex

Interface // Интерфейсная секция модуля

Type TComp=Record // Объявление типа комплексного числа

Re,Im:Extended;

End;

Const JC:TComp=(re:0.0;im:-1.0); // Мнимая единица

// Функция сложения комплексных чисел

Function AddC(a,b:TComp):TComp;

// Функция умножения комплексных чисел

Function MulC(a,b,:TComp):TComp;

Implementation // Секция реализации модуля

Function AddC(a,b:TComp):TComp;

Begin

AddC.re:=a.re+b.re;

AddC.im:=a.im+b.im;

End;

Function MulC(a,b:TComp):TCOmp;

Begin

MulC.re:=a.re*b.re-a.im*b.im;

MulC.im:=a.re*b.im+a.im*b.re;

End;

End. // Конец модуля Unit

В модуле формы мы должны в конце списка модулей в операторе Uses добавить имя модуля Complex. Пусть начальные значения для комплексных чисел будут определяться в компонентах TEdit, а результат вычисления выражения поместим в компонент Memo1. Тогда начало модуля формы Form1 и обработчик события «Вычислить» будут иметь вид

Unit Unit1;

Uses …….., Complex;

………………………

Procedure Button1Click(Sender:Tobject);

Var a,b,c:TComp;

Begin

a.re:=StrtoFloat(Edit1.text);

a.im:=StrtoFloat(Edit2.text);

b.re:=StrtoFloat(Edit3.text);

b.im:=StrtoFloat(Edit4.text);

// Вычисление заданного комплексного выражения

c:=MulC(AddC(a,b),a);

// Вывод результата

Memo1.Lines.Add(’c.re=’+FloattoStr(c.re)+’ c.im=’+FloattoStr(c.im));

End;