Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 300070.doc
Скачиваний:
6
Добавлен:
30.04.2022
Размер:
295.42 Кб
Скачать

5.Объекты программы и их взаимодействие

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

– локальные,

– формальные,

– глобальные.

Локальные объекты – это объекты, описанные в блоке. Их область действия – блок подпрограммы: от точки их определения до конца блока. При вложенности блоков внутри блока доступны и объекты, определенные во внешних блоках. Повторное определение имени во внутреннем блоке (т.е. повторение имени во внутреннем блоке) изменяет видимость объекта с таким же именем из внешнего блока: внутри блока сфера действия имен, определенных во внешних блоках сохраняется до точки их повторного описания. После выхода из блока восстанавливается видимость внешних объектов, переопределенных внутри блока.

Формальные объекты – это объекты, описанные в заголовке определения подпрограммы. Область действия этих объектов – тело подпрограммы. Формальные параметры это также локальные объекты подпрограммы.

Область действия формальных параметров, описанных в прототипе функции – прототип функции.

Глобальные объекты – это объекты, описанные вне всех функций (сама функция тоже является глобальным объектом). Сфера действия глобальных имен - файл (модуль) с текстом программы от точки описания имени до конца файла. Внутри каждой функции они имеют один и тот же смысл. Повторное определение глобального объекта в теле функции изменяет его видимость. Внутри функции сфера действия глобальных имен сохраняется до точки их повторного описания. После выхода из функции (или внутреннего блока, содержащего повторное описание глобального имени) восстанавливается видимость глобальных объектов, переопределенных внутри функции. Если глобальный объект определен позже своего первого использования, то он должен быть описан в той функции, где он используется с атрибутом extern.

Пример 4. Программа с переопределенными именами объектов

# include <stdio.h>

сhar st [ ] = “СТРОКА 1”; //Определение глобального объекта

void f1 ( void )

{ printf ( “%s”, st ) ; //Вывод значения глобальной st

сhar st [ ] = “СТРОКА 2”; //Определение локального объекта в блоке 1

printf ( “%s”, st ) ; //Вывод значения локальной st блока 1

scanf ( “%s”, &st ) ; //Ввод нового значения локальной st блока 1

{ сhar st [ ] = “СТРОКА 3”; //Определение локального объекта в блоке 2

printf ( “%s”, st ) ; //Вывод значения локальной st блока 2

} //Конец блока 2

printf ( “%s”, st ) ; //Вывод значения локальной st блока 1

}

void f2 ( char *st )

{ printf ( “%s”, st ) ; //Вывод значения формальной st

{сhar st [ ] = “СТРОКА 4”; //Определение локального объекта в блоке 3

printf ( “%s”, st ) ; //Вывод значения локальной st блока 3

} //Конец блока3

printf ( “%s”, st ) ; //Вывод значения формальной st

}

void main ( )

{ printf ( “%s”, st ) ; //Вывод значения глобальной st

scanf ( “%s”, &st ) ; //Ввод нового значения глобальной st

extern int p; //Описание глобальной переменной p

if ( p ) f1( ); else f2 ( st );

printf ( “%s”, st ) ; //Вывод значения глобальной st

}

int p = 5; //Определение с инициализацией глобальной переменной p

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

Контрольные вопросы

1. Понятие нисходящего проектирования.

2. Понятие подпрограммы.

3. Понятие функции.

4. Определение функции на языке Си.

5. Способы передачи данных в подпрограмму.

6. Установление связи между формальными и фактическими параметрами.

7. Обращение к функции.

8. Понятие локального, формального, глобального объектов подпрограммы.

9. Принципы взаимодействия объектов, определенных в блоках, в функциях, в модуле.

10.Рекурсивные подпрограммы.