Введение в программирование - Учебное пособие (Корочкин А. В.)

14.2 видимость

Правила видимости определяют какие описания видны (или непо­средственно видны) в каждом месте текста программы. Они примени­мы к явным и неявным описаниям.

Описание видимо только в определенной части своей области дей­ствия; оно начинается в конце описания , а в спецификации пакета -после зарезервированного слова is , следующего после идентифика­тора пакета.

Видимость может быть прямой ( непосредственной ) или види­мостью по имени.

Описание    видимо    по имени   в точках программы для :

•   описания, находящегося в видимом разделе описания пакета ;

•   описания входа задачного типа;

•   описания компоненты описания типа ;

•   спецификации дискриминанта описания типа ;

•   спецификации параметра подпрограммы или описания входа ;

•   описания параметра настройки модуля.

Описание видимо прямо ( непосредственно ) там, где нет видимости по имени. В этом случае описание видимо непосредствен­но в определенном разделе его области действия; этот раздел рас­пространяется до конца непосредственной области действия описания, за исключением ситуации, когда описание скрыто.

Описание, находящееся в видимом разделе пакета можно сделать непосредственно видимым с помощью спецификатора использования Use. (См. Раздел 14.3).

173

Глава 14.   Правила видимости

172

Ада 95. Введение в программирование

 

 

Описание скрыто во внутренней зоне описания, если в нем име­ется омоним этого описания. В этом случае внешнее описание яв­ляется скрытым в непосредственной области действия внутреннего омонима.

Описание является омонимом другого описания, если они имеют один и тот же идентификатор.

D Пример.

procedure   A   is

X, Y, Z : integer ; - - глобальные переменные для процедуры В

procedure     В     is  - -  вложенная процедура

- - локальные переменные, невидимые в процедуре   А X      :   integer ; - - омоним, так как в процедуре А имеется

- - переменная с именем X W, S:   integer; begin

- -  можно использовать Y, Z, А . X - глобальные ;

- -.    S  , W, X - локальные W : = X ;       - -   означает     W : = В . X S : = Y ;       - -   означает     S : = В . Y X : = А . X ;   - -   означает     В . X : = А. X S : = W ;        - -   означает     В . S : = В . W end    В; begin - -   тело А

...    - -  разрешено использование только переменных  X . Y, Z end  A;

В данном примере имеются описания в процедуре А и процедуре В. Так как процедура В вложена в процедуру А, описания в процедуре А являются глобальными и видимыми в В. Описания в процедуре В -локальные и невидимы в процедуре А. Если один и тот же иденти­фикатор находится в разных описаниях ( является омонимом ), то он соответствует разным понятиям. В нашем примере таким является идентификатор X. При его использовании в теле процедуры В иден­тификатор X рассматривается как локальная переменная и относится к В . Доступ в теле процедуры В к глобальной переменной X дол­жен выполняться с помощью составного имени А . X , которое де-

лает    глобальную переменную   X из процедуры А   непосредственно видимой в теле В.

В спецификации подпрограммы скрыто каждое описание, совпа­дающее с описанием подпрограммы. Аналогичное правило действует для конкретизации настройки с описанием подпрограммы, .в описании входа, в разделе формальных параметров оператора accept. В этих случаях описания не являются видимыми ни по имени, ни непо­средственно.