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