Шаг 92.
Область видимости (действия) идентификаторов при использовании процедур и функций

    На этом шаге мы рассмотрим правила определения области видимости идентификаторов в подпрограммах.

    При создании программы для решения сложной задачи выплняется декомпозиция (разделение) этой задачи на подзадачи, подзадач - на еще меньшие подзадачи и так далее, до легко программируемых элементарных подзадач.

    Object Pascal имеет различные средства для деления программы на части. На верхнем уровне деления (больших задач) - это модули, на нижнем уровне (элементарных подзадач) - это чаще всего процедуры и функции. Объектно-ориентированная методология охватывает как верхний, так и нижний уровень разработки программ.

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

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

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


    Замечание. Заметим, что понятия "глобальные" и "локальные" следует понимать относительно - по отношению к конкретной процедуре или функции.

    Продемонстрируем это следующим примером:


Рис.1. Различные области видимости переменных

    В данном примере А0,В0,С0 будут глобальными для всех процедур и функций, используемых в программе.

    А1,В1,С1 будут глобальными для всех процедур и функций, описанных внутри процедуры Р1 (в данном примере для процедуры P2) одновременно локальными для самой процедуры Р1.

    Данные А2, В2, С2, объявленные в самой внутренней процедуры Р2, будут только локальными.

    Сформулируем правила определения области видимости для идентификаторов процедур и функций:

    Если первых три правила поясняются рассмотренным примером, то для пояснения четвертого приведем еще один пример.


Рис.2. Демонстрация использования локального и глобального идентификаторов

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


    Замечание. Локальные данные создаются при вызове процедуры/функции и существуют только во время ее выполнения. Выделение памяти для локальных данных происходит автоматически в начале выполнения процедуры/функции, а освобождение этой памяти - как только выполнение процедуры/функции заканчивается.

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

    На следующем шаге мы перечислим различия между процедурами и функциями.




Предыдущий шаг Содержание Следующий шаг