Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Stud_2_1 / Kurs_Rab / п2

.doc
Скачиваний:
17
Добавлен:
03.03.2016
Размер:
48.13 Кб
Скачать

12

2. Р а з р а б о т к а м н о г о м о д у л ь н о й п р о г р а м м ы

Паскаль-программа не может занимать свыше 64 Кбайт оперативной памяти. Поэтому при разработке больших программ используют аппарат модулей пользователя. В этом случае программа разделяется на несколько программных модулей. Каждый модуль также не может иметь размер свыше 64 Кбайт, но количество модулей в программе не ограничивается. Важным свойством модуля является также то, что его можно компилировать и отлаживать автономно, независимо от других модулей. Это ускоряет процесс создания большой программы.

Модуль разделяется на три части: секция интерфейса, секция реализации и секция инициализации.

Заголовок модуля состоит из зарезервированного слова Unit и следующего за ним идентификатора, являющегося именем модуля. Имя модуля должно быть уникальным. Предполагается, что имя модуля совпадает с именем файла, в котором хранится данный модуль. Например, модуль с заголовком Unit BasUnit должен находиться в файле с именем "BasUnit.pas". Следствием последнего обстоятельства является то, что имя модуля, как и имя файла, должно состоять не более чем из восьми символов.

Интерфейсная часть начинается со служебного слова Interface. Если в данном модуле используются другие модули (стандартные или модули пользователя), то после слова Interface должно следовать предложение Uses с именами используемых модулей. Интерфейсная часть может содержать описания констант, типов, переменных, процедур и функций. Эти описания считаются глобальными, их может использовать любой другой модуль, во фразе Uses которого указано имя данного модуля.

Как известно, заголовок подпрограммы содержит всю информацию, необходимую для ее вызова: имя подпрограммы, количество и типы параметров и, если это функция, тип результата. Тело подпрограммы - это блок, определяющий алгоритм ее работы. С точки зрения вызывающей программы вся необходимая и достаточная информация содержится в заголовке подпрограммы, блок подпрограммы носит сугубо внутренний характер по отношению к вызываемой подпрограмме.

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

Unit UnitName

Interface

----------------------------

Описания видимых объектов

----------------------------

Implementation

----------------------------

Описания скрытых объектов

----------------------------

Begin

----------------------------

Операторы инициализации

----------------------------

End.

Секция

интерфейса

Секция

реализации

Секция

инициализации

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

Следует обратить внимание на применении понятий «глобальная» и «локальная» переменная по отношению к переменным, описанным в секции интерфейса и в секции реализации.

Как известно, глобальные переменные располагаются в сегменте данных основной памяти, а локальные – в сегменте стека.

Локальными переменными считаются те, которые объявлены в блоках процедур и функций, глобальными – те, которые объявлены вне этих блоков. Следовательно, и переменные, объявленные в секции интерфейса, и переменные, объявленные в секции реализации, считаются глобальными и располагаются в сегменте данных. Различие между ними лишь в том, что компилятор при трансляции программы разрешает использовать переменные, объявленные в секции реализации, только в том модуле, где они объявлены.

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

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

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

UNIT BasUnit

Uses Crt, DesUnit

UNIT WinUnit

Uses Crt, DesUnit,

BasUnit

UNIT ParUnit1

Uses Crt, DesUnit,

BasUnit,WinUnit

UNIT ParUnit 2

Uses Crt, DesUnit,

BasUnit,WinUnit

UNIT ParUnit3

Uses Crt, DesUnit,

BasUnit,WinUnit

Program Example

Uses Crt, DesUnit,

BasUnit, WinUnit,

ParUnit1, ParUnit2,

ParUnit3

Здесь в модуле DesUnit размещены описания глобальных констант, типов и переменных (Des - от слова description, описание). Секция реализации этого модуля пустая. В модуле BasUnit сосредоточены базовые служебные процедуры и функции, используемые во многих других модулях (функция знака, процедуры контроля наличия файлов, двоичного поиска, группировки массивов, вывода массива на экран, удаления очереди и т.п.). В модуле WinUnit записаны процедуры для организации многооконного интерфейса (включение и отключение курсора, сохранение и восстановление экрана, формирование различного типа меню и т.п.). Модули ParUnit1, ParUnit2, ParUnit3 содержат процедуры и функции, реализующие различные режимы работы программы. В основной программе Example производится выбор режима ее работы путем активизации позиций меню и обращения к соответствующим процедурам.

Компиляция модуля возможна как из интегрированной среды Турбо Паскаля (turbo.exe), так и с помощью компилятора командной строки (tpc.exe). Так как модуль не является непосредственно выполняемой единицей, то в результате его компиляции образуется дисковый файл с расширением tpu (turbo pascal unit), при этом имя такого файла копируется с имени файла с исходным текстом модуля. Компиляция модуля возможна, если к началу компиляции созданы все нестандартные модули с расширением tpu, имена которых перечислены в предложении Uses данного модуля.

Соседние файлы в папке Kurs_Rab