IPB

> Лекция №13.2: Модульная структура программы
Чат
Форум
Загрузка...
 

страницы: 1 2 3 4

Содержание

Подключение модулей

Для того чтобы подключить к программе какой–либо модуль, необходимо сразу после заголовка программы поместить следующую строку:

uses <имя_модуля>;

Если подключаемых модулей несколько, эта строка примет вид:

uses <имя_модуля_1>, ..., <имя_модуля_N>;

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

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

Например, вы можете пользоваться функцией Abs(), не объявляя и не описывая её, поскольку эта функция включена в состав стандартного модуля System, автоматически подключаемого к любой программе на языке Pascal. Если же вы захотите очистить экран монитора перед выдачей результатов, вам придётся подключить к вашей программе модуль Crt и воспользоваться содержащейся в нём процедурой ClrScr (см. лекцию 14).

Создание модульной программы

Перейдём теперь к детальному изучению структуры модулей и правил их создания и использования.

Структура модуля

В состав модуля входят четыре секции (любая из них может быть пустой, но её заголовок всё равно обязан присутствовать):

unit <имя_модуля>;
 interface   {секция внешних связей}
 implementation  {секция реализаций}
 begin    {секция инициализации}
end.

Разберём каждую из этих секций отдельно.

Название

В отличие от заголовка программы (program <имя_программы>;), который может и отсутствовать, заголовок модуля (unit <имя_модуля>;) обязан присутствовать всегда.

Кроме того, очень полезно давать модулям и содержащим их файлам одинаковые имена. Иначе говоря, модуль с именем modul_1 желательно разместить в файле с именем modul_1.pas, и т.п.

Секция внешних связей

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

Если для объявления какого–либо объекта нужны сведения об объекте, объявленном в другом модуле, то имя этого модуля необходимо указать в этой же секции:

interface
 [uses <список_вспомогательных_модулей>;]
 [const <список_внешних_констант>;]
 [type <список_внешних_типов_данных>;]
 [var <список_внешних_переменных>;]
 [procedure <объявление_внешней_процедуры>;]
 [function <объявление_внешней_функции>;]

Например, пусть у нас есть два модуля: mod_const, содержащий описания базовых констант и типов данных, и mod1, использующий эти описания (мы приводим только секции внешних связей):

unit mod_const;

interface

const sto = 100;

type one_to_sto = 1 .. sto;

{...}

unit mod1;

interface

uses mod_const;

const dvesti = 2 * sto;

type massiv = array[1 .. dvesti] of Byte;

var a : massiv;
    b : one_to_sto;

function min(x, y : one_to_sto) : one_to_sto;

{...}

Пример структуры модульной программы

Рис. 13.1.  Пример структуры модульной программы

Теперь, если в каком–либо третьем модуле встретится строка

uses mod1;

то внутри этого третьего модуля можно будет использовать (без дополнительных объявлений) тип massiv, переменные a и b, а также функцию min. Необходимо отметить, что использовать константу sto третий модуль не сможет, поскольку в нём не было указано

uses mod_const;

Если в секциях связей нескольких модулей были определены константы или переменные с одинаковыми именами, но с разными значениями, то путаницы позволит избежать уже знакомый нам приём: указание имени модуля перед идентификатором:

<имя_модуля>.<идентификатор>

Если имя модуля не указано, то идентификатор считается принадлежащим текущему модулю. И только если в текущем модуле этот идентификатор не был объявлен, то начинается поиск в подключённых модулях.

Например, если модульная программа имеет структуру, изображенную на рис. 13.1, то таблица доступности переменных будет выглядеть так:

СвязиСпособ обращения к одноименным переменным
program prg;uses A,B,C;pa.pb.pc.pне виднане видна
unit A;uses C,D,F;не виднаpне виднаc.pd.pf.p
unit B;uses F;не виднане виднаpне виднане виднаf.p
unit C;-не виднане виднане виднаpне виднане видна
unit D;-не виднане виднане виднане виднаpне видна
unit F;-не виднане виднане виднане виднане виднаp

Замечание: В секциях связей не допускается рекурсивное использование модулями друг друга. Иными словами, нельзя одновременно написать

unit mod_1;
interface
 uses mod_2;
{...}

unit mod_2;
interface
 uses mod_1;
{...}

страницы: 1 2 3 4

Примечания

 
 К началу страницы 
 

Код для вставки: :: :: :: ГОСТ ::
Поделиться: //
 



-
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"