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

 

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

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

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

372
8.
ками, роль имен играли адреса входа в подпрограмм (в случае ассемблерных языков имеет смысл говорить о символическом адресе, т. е. об адресе, получающем символическое обозначение). По мере устранения из языков ма-инных зависимостей имя подпрограммы получает самостоятельность, оно становится обозначением алгоритма. поминание имени, как правило, вз -вает вчислительный процесс, задаваемй именем алгоритмом. мя процедуры позволяет при описании процедуры не заботиться о том, как она будет использоваться, а при использовании — не знать, как реализован обозначаемый именем алгоритм. Таким образом, именование процедур — это одно из средств, позволяее при описании алгоритма сосредоточить внимание на том, как реализовать то, что требуется в данной конкретной задаче и использовать уже имеющиеся методы, не вдаваясь в их внутреннюю структуру.
В конструировании программ разделение аспектов, соответствующих вопросам что? и как?, подобное только что проведенному, отражает весьма ванй принципа методологии работ со сло нми системами, в том числе и программирования — принцип абстрагирования, который заключается в разделении уровней.
• На уровне разработки программной единицы программист стремится не знать о ее использовании, т. е. абсрагироваься от уровня использования.
• а уровне использования программной единицы елательно не знать, как она устроена (реализована), т. е. рассматривать ее как неделимое целое, абсрак но.
Если какое-либо средство языка ориентировано на то, чтобы облегчить программисту разделение уровней, то оно поддеривает следование принципу абстрагирования при конструировании программ. В этом отноении именование — одно из многих средств поддерки принципа абстрагирования. С другими такими средствами мы встретимся в дальнейем.
Применительно к языку С/С++ именование задается заголовком функции, в котором обязательно присутствует имя, идентифицируее функци :
void MyProc (Matrix M, const int SizeM) int MyFunc ()
void PrintMatr (Matrix M, const int SizeM) void main()
Здесь MyProc, MyFunc, PrintMatr и main — имена функций. Если хочется определить процедуру, то в заголовке указывается спецификатор void, ука-
8.2.
373
зваий на то, что данная операционная подпрограмма не врабатвает значение.
Обозначаемый алгоритм текстуально описывается непосредственно следом за заголовком в виде заключаемой в операторные скобки { и } последовательности операторов. Эта часть процедуры называется ее телом:
int MyFunc ()
... // Тело процедуры
} //
Содержательно, тело процедуры — это описание алгоритма, выполнение которого активизируется при вызове процедуры.
При абстрактно-синтаксическом представлении описания процедур необходимо реить вопрос согласования такого представления с конструкцией вызова процедуры. еобходимо, чтобы абстрактнй вычислитель, обрабатывая описание процедур , обеспечил связь взова с описанием, чтоб при обработки вызова процедуры осуществлялся переход к телу, которое используется как оператор замещающий оператор вызова. В рамках этой задачи именовани отводится следуая роль: ну но построить связь меду именем процедур и ее телом. Если говорить о процедурах, не вырабатва -их значения и не имеих параметров, то содерательно задача сводится к образованию абстрактно-синтаксической конструкции, представленной на рис. 8.1. Этой конструкцией устанавливается атрибут <тело>, который можно трактовать как адрес абстрактно-синтаксического представления дерева процедуры. <Тело> может быть вычислено в позиции оператора, это обеспечивает возмо ность вполнения конструкции вызова как выполнения тела.
При вызове процедуры абстрактный вычислитель, действующий в соответствии с любым из двух алгоритмов вычисления структуры конструкции вызова (см. рис. 2.10. из § 2.3.4), прежде всего должен найти имя вызываемой процедуры. Если имя не найдено, то это квалифицируется как оибка конструкции вызова.
Зададимся вопросом о том, где могут (или долны) храниться имена, чтобы обеспечить возможность их эффективного нахождения? Согласно семантике описания процедуры, как и лбого другого описания, все имена рассма-трива тся в качестве атрибутов конструкций, в которых они появля тся. соответствии с этим мо но организовать и хранение описываемых имен как
374
8.
Имя /* процедуры */
Рис. 8.1. Простейший случай результата обработки абстрактным вычислителем описания процедур
атрибутов соответствуих верин дерева. днако это не очень удобно по следуим причинам:
• хранение и поиск имен отделены от работы с деревом абстрактного синтаксиса, для которой требуется лиь две интерфейсные процедур : предоставить ну ный атрибут имени при обраении к его исполь-зуему вхо дени и сохранить имя с его атрибутами при обработке описания;
• обеспечение работы со стеком контекстов (см. § 7.4.2) естественно организовывать при обработке описаний, когда есть возмо ность сгруппировать секции контекстов без дополнительных просмотров дерева;
• для внених по отноени к программе суностей указать конструкции, в которых появляются их описания, затруднительно (принятое именно с этой целью в Алголе 68 соглашение о стандартном вступлении плохо согласуется, например, с потребность модульной структуры библиотек).
Предыдущая << 1 .. 125 126 127 128 129 130 < 131 > 132 133 134 135 136 137 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100