![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
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;
FUNCTION Empty: BOOLEAN {Проверить на пустоту}; PROCEDURE Push(xPrm: UVal.TVal){Добавить, положить в стек}; PROCEDURE Pop {Удалить, вытолкнуть из стека}; FUNCTION Top: UVal.TVal {Посмотреть вершину}; PROCEDURE WriteAll {Вывести все элементы стека}; VAR ErrStack: INTEGER {Код ошибки};
|