Объекты подпрограммы (то, над чем выполняются действия).
Объекты подпрограммы делятся на параметры (делятся на аргументы и результаты) и переменные (делятся на локальные и глобальные).
Параметры - это объекты, указанные в заголовке подпрограммы. Они в свою очередь делятся на аргументы (входные параметры, т.е. то, что дано, или, другими словами, то, что при выполнении подпрограммы должно быть известно) и результаты (выходные параметры, т.е. то, что требуется получить).
Переменные - это объекты, которые перечисляются в секции описания переменных:
- или в секции описания переменных в данной подпрограмме (локальные переменные);
- или в секции описания переменных во внешнем блоке по отношению к данному (глобальные).
Объекты алгоритма делятся на глобальные и локальные.
Локальные объекты - это объекты, которые описаны в данном блоке. Это параметры из заголовка данного блока и переменные, описанные в данном блоке.
Глобальные объекты - это объекты, которые описаны во внешнем блоке ( в охватывающем).
На рисунке из п. 18.2 (см. выше) для блока 3 параметров нет вообще. Все перемененные, описанные в нем самом (в блоке 3), являются локальными для данного блока. Глобальными для него являются переменные, которые описаны в охватывающих блоках, т.е. в блоках 1 и 2.
Для блока 2 локальные объекты – x,y,z, описанные в нем самом, а глобальные - те переменные, которые описаны в блоке 1 – это a,b,c,L (real).
Для объектов подпрограммы различают область видимости и время жизни.
Время жизни - это интервал времени выполнения программы, в течение которого объект подпрограммы существует, т.е. сохраняет свое значение (место в памяти), даже, если он временно невидим (и к нему нельзя обратиться по имени).
Объект "начинает свою жизнь" обычно с начала выполнения соответствующего блока, т.е. того блока, где он описан (где под него выделена память), и, как правило, завершает свое существование по окончании этого же блока. В зависимости от величины времени жизни различают 3 вида объектов - статические (существуют все время, пока выполняется программа), автоматические (существуют, пока выполняется блок), динамические (существуют, пока под них программистом динамически выделена память).
Есть еще т.н. статические локальные переменные, у которых время жизни глобальное, а область видимости - локальная. На Паскале статические локальные переменные - это локальные типизированные константы:
procedure p(...);
Const
a:integer = 5; //статическая локальная переменная
begin ... end;
Инициализация таких переменных происходит только один раз (при первом вызове подпрограммы), а дальше они сохраняют свои значения от вызова к вызову. Этим можно пользоваться, например, для подсчета количества вызовов подпрограммы.
Область видимости (действия) - это часть текста программы, в которой объект, как говорят, "виден", т.е. для него известно имя и тип (в пределах области видимости возможен корректный доступ к памяти с использованием имени объекта). Видимыми в данном блоке считаются те объекты, которые описаны в данном блоке или в блоках, его охватывающих. То, что описано ниже данного блока (по уровню вложенности), считается невидимым в данном блоке.
локальная
В рассмотренном примере в блоке 3 видны: i, j, k, L, x, y, z, a, b, c.
В блоке 2 видны: x, y, z (в нем описанные), a, b, c, L, (описанные в охватывающем блоке).
глобальная
В блоке 2 будут не видны те переменные, которые описаны в блоке 3.
Примечание: В блоке 3 переменная L будет видна как целая, а в блоке 2 - как вещественная.
Область видимости и время жизни не совпадают для глобальных переменных: переменная может «жить», но стать временно невидима.
Дата добавления: 2016-05-28; просмотров: 1978;