Доступ к объявленным в модуле объектам

ЛАБОРАТОРНАЯ РАБОТА №4

Разработка пользовательского модуля. Использование процедур и функций модуля CRT.

 

Цель и задача работы: изучить приёмы разработки пользовательского модуля, познакомиться с процедурами и функциями модуля CRT.

Модули

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

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

Модуль имеет следующую структуру:

UNIT <имя>;

INTERFACE

<интерфейсная часть>

IMPLEMENTATION

<исполняемая часть>

BEGIN

<инициирующая часть>

END.

Здесь UNIT, INTERFACE, IMPLEMENTATION – зарезервированные слова (единица, интерфейс, выполнение).

<имя> – имя модуля (правильный идентификатор)

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

Заголовок модуля и связь модулей друг с другом.

Заголовок модуля состоит из зарезервированного слова UNIT и следующего за ним имени модуля. Для правильной работы среды Турбо Паскаля это имя должно совпадать с именем дискового файла, в который помещается исходный текст модуля.

unit Global; à global.pas

Имя модуля служит для его связи с другими модулями и основной программой. Эта связь устанавливается специальным предложением

USES <список модулей>;

Здесь USES – зарезервированное слово (использует), <список модулей> – список модулей, с которыми устанавливается связь; элементами списка являются имена модулей, отделяемые друг от друга запятыми, например,

USES Crt, Global, Graph;

Если объявление USES используется, оно должно открывать раздел описаний основной программы.

Интерфейсная часть

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

Пример

unit vect;

 

interface

 

type

vector = array[1..3] of real;

 

function sMul(a,b: vector): real;

function Module(a: vector): real;

 

Если теперь в основной программе написать предложение

uses vect;

то в программе станут доступными тип vector и две функции из модуля vect.

Исполняемая часть

Исполняемая часть начинается зарезервированным словом IMPLEMENTATION и содержит описания подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты – вспомогательные типы, константы, переменные и блоки.

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

Пример

implementation

 

function sMul;

begin

sMul := a[1]*b[1]+a[2]*b[2]+a[3]*b[3];

end;

 

function Module(a: vector): real;

begin

Module := sqrt( sMul(a,a) );

end;

 

end.

 

Инициирующая часть

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

Инициирующая часть модуля (BEGIN <инициирующая часть> ) необязательна и может быть опущена.

Доступ к объявленным в модуле объектам

После разработки исходного текста модуля, в результате его компиляции создается файл с расширением TPU (Turbo Pascal Unit). Поместив этот файл в один каталог с исходным текстом основной программы можно использовать в ней процедуры модуля.

Если в программе определяются переменные или другие объекты, совпадающие по имени с объектами, описанными в интерфейсной части подключаемого модуля, то объявленный в программе объект «закрывает» объявленный в модуле одноименный объект. Чтобы получить доступ к закрытому объекту, нужно воспользоваться составным именем: перед именем объекта поставить имя модуля и точку. Например,

vect.Module(a1);

Стандартный модуль CRT

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

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