Киберфак – бесплатно скачать презентации PowerPoint, лекции, рефераты, шпоры, курсовые cyberfac logo
cyberfac.ru
На главную | Регистрация | Вход
  Статьи  
Главная » Статьи » Информатика » Языки программирования и методы трансляции

Экспорт, импорт и области видимости

Полезная статья? Пожалуйста, поставьте "+"
Языки программирования и методы трансляции - Содержание

При импорте модуля достаточно иметь доступ только к его разделу определений. Весь интерфейсный модуль рассматривается как список экспорта этого библиотечного модуля. Модулю-клиенту, чтобы получить доступ к этим объектам, можно в списке импорта либо указать одно лишь имя данного модуля:

IMPORT <имя модуля>;
либо уточнить, какие конкретно объекты из этого модуля ему требуются:

FROM <имя модуля> IMPORT <имена объектов>;

Первый способ импорта решает проблему конфликта имен (когда в двух разных модулях присутствуют объекты с одинаковыми именами), второй упрощает дальнейшую работу с импортируемыми объектами. Если произвести импорт следующим образом:

FROM SYSTEM IMPORT ADDRESS;
то работать с типом ADDRESS можно будет просто используя его имя:

VAR myADR : ADDRESS;
Если же импортировать весь модуль SYSTEM целиком:

IMPORT SYSTEM;

То при обращении к типу ADDRESS необходимо будет указывать содержащий его модуль:

VAR myADR : SYSTEM.ADDRESS;

Особый интерес представляет собой специальный модуль SYSTEM. Этот модуль занимает особое положение: он в точности заранее известен компилятору и из-за принципиальной невозможности выразить некоторые его объекты средствами языка (например, процедуру TSIZE), в большинстве реализаций Modula-2 он вообще не имеет ни интерфейсной, ни исполнительной части. В среде разработки TopSpeed за счет понятия алиаса он имеет интерфейсную часть, что во многих случаях очень удобно.

Все то, что фигурирует в интерфейсной части модуля безо всякого дополнительного импорта доступно в его исполнительной части (IMPLEMENTATION). Исполнительная часть нужна для того, чтобы можно было доопределить те объекты, которые фигурируют в интерфейсной. Для этого могут потребоваться новые константы, типы, переменные, процедуры — все они являются внутренней частью модуля и снаружи недоступны. Библиотечный модуль в своей исполнительной части может иметь так называемый раздел инициализации, где обычно требуется устанавливать начальные значения внутренних переменных модуля. Этот раздел можно рассматривать как некую специальную процедуру без параметров, которая вызывается всего один раз, при запуске программы, да и то неявно.

Очень важным являются два понятия — область видимости и область существования. Сколько времени существуют объекты программы? Ответ прост — все то время, пока активен тот программный блок, в котором они объявлены. В случае процедур это понятно. Как только осуществляется вызов процедуры, в стеке резервируется место под локальные переменные. Когда процедура завершается, выделенная память возвращается. Для модулей (пока не рассматриваем локальные модули) перед выполнением первого оператора основного модуля (т.е. программы) производится распределение памяти под используемые библиотечные модули и соответственно их инициализация. Таким образом, объекты, описанные в модулях, существуют все то время, пока не завершится Ваша программа.

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

областью видимости идентификатора является процедура [11].

Как модули, так и процедуры создают свои области видимости, однако здесь имеются различия. Все процедуры можно рассматривать как прозрачные модули. Иными словами, все идентификаторы, описанные снаружи процедуры, автоматически доступны и внутри нее. Обратное, конечно, не верно. Если проводить аналогию с реальной жизнью, то процедуры — как зеркальные очки. Они не имеют никаких средств для управления областью видимости. Модули же за счет механизма экспорта-импорта могут четко специфицировать, что просачивается извне и что доступно снаружи. В связи с этим в языке исчезает понятие глобальных объектов.

Таким образом имеются определенные отличия для областей видимости модулей и процедур.

  • Для модулей диапазон видимости объекта может быть расширен включением его идентификатора в экспортный список модуля. Тогда идентификатор становится видимым в окружающей модуль области видимости. Для процедур это невозможно.

  • Идентификатор, видимый в области, окружающей процедуру, видим так же и внутри процедуры. Для модуля такое утверждение неверно, если только идентификатор не включен в импортный список этого модуля.

    Правила видимости для модулей иллюстрируются следующими примерами.

    Пример видимость для процедур:

    VAR a: CARDINAL; PROCEDURE P;

    VAR b: CARDINAL; PROCEDURE Q;

    VAR b,c: BOOLEAN; BEGIN

    (* a, b(BOOLEAN), c – видимы, здесь же виден <имя_головного_модуля>.b(CARDINAL) *) END Q;

    BEGIN
    (* a, b(CARDINAL) –
    видимы *)

    END P

    Пример видимости для модулей

    VAR a, b: CARDINAL; MODULE M;

    IMPORT a; EXPORT w, x; VAR u, v, w: CARDINAL; MODULE N;

    IMPORT u; EXPORT x, y; VAR x, y, z: CARDIANL; (* u, x, y, z – видимы *)

    END N;

    (* a, u, v, w, x, y – видимы*) END M;
    (* a, b, w, x –
    видимы *)

Категория: Языки программирования и методы трансляции | Добавил: Ni-Cd (11 Декабря 2011)
Просмотров: 1588 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
  Полезные материалы  

В нашем каталоге файлов можно найти много полезной информации. Также советуем заглянуть в каталог статей: в нем есть полезные статьи по темам: Экономика предприятия, Общая экономика, Финансы и Кредит, также Словарь терминов по экономике, Маркетинг, Бухучет и Мировая экономика
Также есть полезная страница Факультеты МИФИ, которая расскажет о том, какие есть в МИФИ факультеты.
Меню
 

Навигация
Высокоуровневые методы информатики и программирования [28]
Информатика и программирование [34]
Информационные системы в экономике [36]
Языки программирования и методы трансляции [15]
Алгоритмизация и программирование [61]
 

Поиск
 

Онлайн
Онлайн всего: 1
Гостей: 1
Пользователей: 0
 

Статистика


Рейтинг@Mail.ru

 


2007 - 2024 © Ni-Cd. All Rights Reserved