Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая по ит.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
483.85 Кб
Скачать

2.1 Общая структура модуля

В языке Turbo Pascal модуль (unit) по определению считает­ся отдельной программой. Если подпрограмма является структурным элементом Pascal-программы и не мо­жет существовать вне ее, то модуль представляет собой от­дельно хранимую и независимо компилируемую единицу. С учетом этого факта можно дополнить рассмотрение общей структуры Pascal-программы следующей синтак­сической диаграммой для случая языка Turbo Pascal (рисунок 3):

Рисунок 3 - Программа на языке Turbo Pascal

В самом общем виде модуль представляет собой совокуп­ность (коллекцию) программных ресурсов, предназначенных для использования другими модулями и программами. Под ресурсами в данном случае понимаются любые программные объекты языка Turbo Pascal - константы, типы, переменные, подпрограммы. Важно понимать, что модуль сам по себе не является выполняемой программой - его объекты ИСПОЛЬ­ЗУЮТСЯ другими программными единицами.

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

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

Заголовок модуля составляется из служебного слова unit и следующего за ним идентификатора, являющегося именем модуля. Заголовок завершается символом ';' (точка с запя­той). Интерфейсная часть начинается со служебного слова interface, за которым следует совокупность обычных опи­саний. Часть реализации начинается служебным словом implementation, за которым идут описания скрытых объек­тов. Завершает модуль, как и программу, служебное слово end и символ '.' (точка).

Кроме перечисленных частей, модуль может содержать так называемый раздел инициализации, предназначенный для установки начальных значений переменных модуля пе­ред его использованием. Этот раздел следует после раздела реализации, начинается со служебного слова begin и содер­жит последовательность операторов.

Таким образом, общая структура модуля может быть представлена следующей схемой (рисунок 4) :

Рисунок 4

Приведем простейший пример модуля. Для того, что­бы избежать многократного описания в различных програм­мах некоторых общеупотребительных типов данных, молено сосредоточить их в одном модуле. Данный пример касается описаний, связанных с датами, месяцами, днями и т.д.

unit Calendar;

interface

type

Days = (Mon,Tue,Wed,Thu,Fri,Sat,Sun);

WorkingDays = Mon..Fri;

Months = (Jan,Feb,Mar,Apr,May,June,

July,Aug,Sept,Oct,Nov,Decem);

Summer = June..Aug;

Autumn = Sep..Nov;

Spring = Mar..May;

DayNo = 1..31;

YearNo = 1900..2000;

Date = record

Day : DayNo;

Month : Months;

Year : YearNo

end;

implementation

end.

Данный модуль, ввиду своей простоты, не содержит разделов реализации и инициализации. Механизм использования модулей в других программах будет описан далее.

2.2 Подпрограммы в модулях

Процедуры и функции могут использоваться в модулях на­равне с другими Pascal-объектами. Однако для них имеются особенности, обусловленные их структурой. Как уже отмечалось, заголовок подпрограммы содержит всю информацию, необходимую для ее вызова: ее имя, количество и типы параметров и (для функций) тип результата. С другой стороны, тело подпрограммы содержит блок, раскрывающий ее алгоритм. Можно считать, что заголовок подпрограммы является ее интерфейсом, а тело - реализацией. В соответствии с этой точкой зрения в интерфейсной части модуля должны быть представлены только ЗАГОЛОВКИ процедур и функций, видимые (доступные) для других программ (аналогично предварительным описаниям, но без служебного слова forward), а их полные описания будут содержаться в разделе реализации. При этом полное описание подпрограммы может иметь СОКРАЩЕННЫЙ заголовок, состоящий только из служебного слова procedure или function, имени подпрограммы и символа ';'. (Разумеется, можно повторить полный заголовок подпрограммы, но тогда он должен быть точно таким же, как и заголовок в интерфейсной части).

В качестве примера можно привести модуль, содержащий средства работы с комплексными числами

unit CmplVals;

interface

type

Complex = record { способ представления комплексных чисел }

Re, Im : real

end;

{ Заголовки процедур, реализующих

операции над комплексными числами }

procedure InitC (R,I:real; Var C:Complex);

procedure AddC (Cl,C2:Complex;var R:Complex);

procedure MultC (Cl,C2:Complex;var R:Complex);

procedure DivC (Cl,C2:Complex;var R:Complex);

procedure WriteC(C:Complex);

implementation

{ Полные описания процедур

(с сокращенными заголовками) }

procedure InitC;

begin

with C do

begin

Re:=R; Im:=I

end

end;

procedure AddC;

begin

with R do

begin

Re := Cl.Re + C2.Re;

Im := Cl.Im + C2.Im

end

end;

procedure MultC;

begin

with R do

begin

Re := Cl.Re*C2.Re+Cl.Im+C2.Im;

Im := Cl.Im*C2.Re+Cl.Re*C2.Im

end

end;

procedure DivC;

var

Tmp : real;

begin

with C2 do Tmp:=Re*Re+Im*Im;

with R do

begin

Re := (Cl.Re*C2.Re+Cl.Im*C2.Im)/Tmp;

Im := (C2.Re*Cl.Im+Cl.Re*C2.Im)/Tmp

end

end;

procedure WriteC;

begin

with С do

begin

Write(Re);

if Im=0 then Exit;

if Im>0 then Write(’+’);

Write(Im);

Write('i')

end

end;

end.

Таким образом, механизм модулей позволяет скрыть детали реализации тех или иных программных подсистем,

предоставив в распоряжение использующих программ стро­го определенную совокупность интерфейсных объектов. Ес­ли необходимо, например, расширить модуль CmplVals вве­дением новых процедур или изменить реализацию какой-ли­бо процедуры, то если интерфейс модуля при этом останется неизменным, такая модификация НИКАК НЕ ОТРАЗИТСЯ на использующих программах.