Доступ к объявленным в модуле объектам
ЛАБОРАТОРНАЯ РАБОТА №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 сосредоточены процедуры и функции, обеспечивающие управление текстовым режимом экрана. С помощью входящих в модуль подпрограмм можно перемещать курсор в произвольную позицию экрана, менять цвет выводимых символов и окружающего их фона.