Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 137

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 131 132 133 134 135 136 < 137 > 138 139 140 141 142 143 .. 316 >> Следующая

392
ГЛАВА 8. ПОДПРОГРАММЫ
4. уничтожает локальный контекст: возвращает состояние памяти, предшествовавшее вызову процедуры (с точностью до изменений значений, произведенных во внешнем контексте процедуры при выполнении второй фаз ), в частности, он ликвидирует память, вделенну на первой фазе для локального контекста;
5. передает управление в точку возврата.
Указанные шаги выполнения абстрактным вычислителем языка процесса взова процедур определя т семантику данной язковой конструкции. Большинство моделей вычислений языков предписывает именно эти действия для реализации вызова, хотя в некоторых случаях они могут бть в -рождены или дополнены. Наиболее заметны в этом отношении расхождения моделей в части работы с контекстами (шаги 1 и 4). Так, во многих языках предусматривается инициализация памяти, т. е. задание начальнх значений для переменных локального контекста. В С/С++ предусматривается инициализация переменных, а в аскале их значения счита тся неопределенн -ми. В простых языках, в которых процедуры не имеют локального контекста, действия по подготовке памяти вырождены (например, в Basic). Иногда предписывается необходимость сохранения локального контекста после завершения вызова (описатель own Algol 60, который трактуется как средство, предназначенное для передачи информации от вызова к взову процедуры). В этих случаях следует говорить не только о создании и уничтожении локальных контекстов, но и об упрятывании их, возможно, частичном, а также о восстановлении контекстов.
ри рассмотрении агов 2 и 5 мо ет возникнуть вопрос о том, где запоминается адрес возврата. С цель предоставить гибкость при разработке систем программирования и обеспечить возмо ность учета архитектуры компьютера, эталонные определения языков, как правило, не фиксируют регламент хранения адреса возврата, но обычно он размеается в локальном контексте, дополняя последний недоступным для пользователя элементом.
ллстрациями вызова процедур (функций) в С/С++ в рамках продол е-ния сквозного примера могут слу ить следуие конструкции:
MyOwnInpMatr();
после которого (при условии корректного ввода) матрица Matr получает значения своих элементов, и
N = MyInpMatr();
при выполнении которого кроме ввода матрицы Matr значение, выработанное функцией, присваивается глобальной переменной N.
8.4.
393
8.4.2. Статическая и динамическая цепочки
ля тех, кто елает ограничить себя программированием на язках С/С++, даннй раздел, скорее всего, не представляет интереса, однако для глубокого усвоения процессов, которе происходят в реальной вычислительной технике при вызовах процедур, представленный материал является необходимым.8 Из предыдущего видно, что вызов процедуры приводит к оперированию с контекстами. этой связи вано проследить взаимодействие контекстов, динамически возникаих в ходе вполнения программы, и статических контекстов, которые обсу дались ранее.
Возможность доступа к любым объектам в процедуре определяется до выполнения программы в соответствии с механизмом согласования контекстов (см. параграф 8.4.1). При выполнении программы локальные контексты поро да тся и уничто а тся в порядке, который определяется динамически: порядком взовов процедур. оскольку их имена явля тся элементами контекстов, в которых они описва тся, возмо ность вызова той или иной процедуры (как и других объектов) регламентируется статической вложенностью контекстов. За счет этого одновременно существуют локальные контекст всех процедур, взванных в некоторй момент вычислений. Таким образом, для кадой процедуры име тся:
• статическая последовательность контекстов доступа, называемая с а-
ической цепочкой процедур, и
• динамическая, определенная в момент вызова процедур, последовательность контекстов, которые суть локальные контексты вызванных, но не завершенных процедур в порядке их вызовов,— динамическая цепочка процедур.
Приводимый ниже пример поясняет введенные понятия. Пусть имеется сле-дуая схема программы, на которой многоточиями обозначен описания программнх объектов, входяих в контекст основной программы и процедур. Справа от схемы отмечен локальные контексты, которые обозначен буквой K с последуим именем подпрограммы. Слева указаны номера строк. Пример приводится для языка Pascal, для С/С++ он был бы вырожден-нм из-за запрета вло енных описаний процедур.
8 В частности, логическое описание обработки исключительных ситуаций приводит к выводу, что их корректное представление возможно, лишь если обработчики будут процедурами, описанными внутри процедур.
394
ГЛАВА 8. ПОДПРОГРАММЫ
Программа 8.4.1
1. program PROG;
2. ...
3. procedure P; KP
4. ... KP
5. begin
6. ...
7. end; {P}
8. procedure Q; KQ
9. ... KQ
10. procedure Q1; KQ1 KQ
11. ... KQ1
12. begin
13. P;
14. end; {Q1}
15. procedure Q2; KQ2 KQ
16. ... KQ2
17. begin KQ2
18. Q1; KQ2
19. end; {Q2}
20. begin
21. Q2;
22. end; Q
23. begin
24. Q;
25. ...
26. P;
27. end.
KPROG KPROG KPROG
KPROG
Локальный контекст основной программы KPROG, являющийся глобальным для процедур P и Q, вкл чает среди прочего имена этих процедур. Это позволяет задать вызов процедуры Q в теле программы (строка 24). Тем самм при вызове Q будет образована динамическая цепочка
Предыдущая << 1 .. 131 132 133 134 135 136 < 137 > 138 139 140 141 142 143 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100