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

 

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

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

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

Имена формальных параметров пополняют локальный контекст процедуры. В частности, поэтому описание, к примеру, локальной переменной с именем, совпадающим с именем формального параметра, вызывает ошибку: повторное описание имени.
отличие от формальнх, фактические параметры полность относятся к контексту вызова процедуры — они строятся с помощью средств этого контекста как языковые конструкции, способные замещать формальные параметр .
о своему назначени параметр подразделя тся на три вида:
1. входные, in-параметры, которые поставляют значения для выполнения процедуры;
2. выходные, out-параметры, которые принимают значения, вырабатываемые в ходе выполнения процедуры, для вненего использования;
3. совмещенные, входные и одновременно выходные, или inout-параме-тры, которые и поставля т значения, и принима т их, т. е. совмеа т два преддуих назначения.
Фактический in-параметр — это выражение того типа, которого требует со-ответствуий формальный параметр. ебольая оговорка здесь требуется по поводу передачи подпрограмме в качестве параметров для внутреннего использования процедур и функций, которе при обсу дении параметризации удобно рассматривать как значения специальных типов: процедурного и функционального. Если в языке определить переменные этих типов, то они будут принимать в качестве значений алгоритм процедур или функций. и в одном развитом язке эта концепция не доведена до логической заверен-ности. Ее непоследовательно реализованне фрагмент име тся во многих языках (Алгол-68, несколько более ограниченно — Ada, Turbo-Pascal).
Фактические out-параметры — это переменные, т. к. только они в состоянии принимать значения. Если рассматривать операнды выра ений как ее одну возмо ность принимать значения, то подпрограмму-функци мо но
8.5. ПАРАМЕТРИЗАЦИЯ
403
считать частнм случаем процедур , со специально синтаксически вде-ленным out-параметром, который предписано использовать в синтаксической позиции операнда выражения, когда он представлен конструкцией вызов функции.
Inout-параметры являются совмещением двух других видов параметров, а потому их фактические параметры могут быть только переменными. тли-чие таких параметров от out-параметров лишь в том, что эти переменные перед вызовом подпрограммы должны иметь определенные значения (как выражения in-параметров).
еречисленне виды параметров характеризу т параметризаци с точки зрения использования процедур. Такое рассмотрение достаточно для корректного употребления процедур: три вида параметров исчерпыва т все случаи взаимодействия процедур с окружением, необходимые на практике. Это обстоятельство, по-видимому, является главной причиной того, что в современных языках программирования (например, в Ada) виды параметров ука-зва тся явно при описании процедур. Такой подход к параметризации согласуется с интуитивным пониманием назначения параметризации и ее возможностей.
Что же касается языка С/С++, то для его параметризации выбрана концепция, максимально прибли енная к тому, как реализуется передача параметров на маинном уровне. частности, в нем представлен лиь один механизм параметризации, через которй все указанные вид параметров моделируются. Если это и недостаток, то маленький, поскольку к такому моде-лировани быстро привыка т и да е не замеча т его при практической работе. Есть ее одно свойство языка С/С++, облегчаее неаккуратное программирование: возмо ность описвать функци с одним числом параметров, а использовать с другим, но это свойство соотносится не с понятием вида параметров, а со средствами оперирования с ними.
В Алголе 68, как и в С/С++ задается единый механизм параметризации, но там он предлагается для экономии мления, а не с точки зрения эффективной реализуемости. хотя оказывается, что эти позиции не противоречат друг другу (что наталкивает на мсль о согласовании принципа экономии мышления с принципом экономии вычислений), все же явное определение назначения параметров представляется более логичнм.
Кадый фактический параметр дол ен бть таким, как того требует алгоритм процедуры. Эта характеристика параметризации называется согласованностью типов фактических параметров с типами формальных параметров. Правила согласования для разных языков различны в зависимости от
404
ГЛАВА 8. ПОДПРОГРАММЫ
целей, которе ставятся при разработке языка. сновная проблема здесь состоит в противоречии между стремлением к повышению универсальности использования процедуры (здесь это возможность вызова ее с комплектами параметров разнх типов) и контролем корректности взова.
ля пояснения этого тезиса используется следуая иллстрация. Вполне осмсленна такая процедура (записвается в нотации, напоминаей Паскаль, но это совершенно другой язык):
procedure Copy (in X, out Y); begin
Y := X end;
Она копирует входное значение в выходное. С точки зрения такой семантики, каутся вполне правомернми следуие вызовы Copy (в данном примере использу тся имена, типы которх указаны как окончания идентификаторов):
Copy ( a_int, b_int); Copy ('=', c_char);
поскольку осмысленны присваивания переменным значения их типов. о уже
Предыдущая << 1 .. 135 136 137 138 139 140 < 141 > 142 143 144 145 146 147 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100