Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






USES ИмяДругогоМодуля ,… ; // Список импорта






// Здесь объявляются модули, инструменты которых

// используются только в секции реализации

// описываемого модуля.

LABEL // Разделы объявления, определения и

CONST // описания внутренних для секции

TYPE // реализации данных и действий.

VAR // Содержит традиционные разделы Паскаль-

PROCEDURE // программы в их традиционном синтаксисе

FUNCTION // и семантике. Заголовки процедур и

// функций, объявленных в интерфейсной

// секции, здесь можно указать без списка

// параметров.

INITIALIZATION // Секция инициализации – необязательная

// В эту секцию включаются действия,

// которые выполняются перед выполнением

// раздела операторов программы, в которой

// этот модуль объявлен предложением USES.

FINALIZATION // Секция завершения – необязательная

// В эту секцию включаются действия,

// которые выполняются по окончании

// выполнения раздела операторов

// программы, в которой этот модуль

// объявлен предложением USES.

END.

Использование модуля в Object Pascal 2.

§ В оформлении программы (!!! но не описаний процедур и функций) появился новый раздел – список импортируемых модулей:

USES ИмяМодуля, …;

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

§ Имена инструментов (типов, переменных, процедур...) модуля, доступные внешней среде, вне модуля можно использовать с уточнением: ИмяМодуля. Имя

Подведем первые итоги.

¨ Синтаксически конструкция описания модуля похожа на конструкцию описания процедуры. Но семантика – существенно отличается:

§ у модуля нет раздела операторов, который (тело процедуры!!!) играет фундаментальную роль в описании процедуры; секции инициализации и завершения в модуле играют весьма специальную роль подготовки к работе и «чистки рабочего места» по окончании работы;

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

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

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

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

Реализация стеков и использование модулей (для этих целей).

Понятие стек (почти) не зависит от типа его компонентов. Поэтому оформим отдельный модуль инструментов для работы со значениями компонентов.

UNIT UVal;

INTERFACE TYPE TVal= CHAR;

PROCEDURE WriteElement(xPrm: TVal);

CONST CMaxL=1000 {статическая реализация - размер стека

изначально ограничен};

IMPLEMENTATION

PROCEDURE WriteElement(xPrm: TVal); BEGIN WRITE(xPrm)

END;

END.

Позже возможно нам захочется пополнить этот модуль более развитым набором инструментов, или вообще заменить его модулем для работы со значениями другого типа.

Ø Вариант 1. ObjectPascal2. Статическая реализация стека.

UNIT UStack; INTERFACE USES UVal;

PROCEDURE MakeNull {Создать пустой стек};

FUNCTION Empty: BOOLEAN {Проверить на пустоту};

PROCEDURE Push(xPrm: UVal.TVal){Добавить, положить в стек};

PROCEDURE Pop {Удалить, вытолкнуть из стека};

FUNCTION Top: UVal.TVal {Посмотреть вершину};

PROCEDURE WriteAll {Вывести все элементы стека};

VAR ErrStack: INTEGER {Код ошибки};






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.