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

 

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

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

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

Copy ( a_float, b_int); Copy ( 40, c_char);
корректны или нет в зависимости от того, законны ли присваивания, типы которых естественно обозначить в данном языке int:=float и char:=int.
что будет, если в теле процедуры встречается, например, операция деления? Будет ли тогда первый вызов процедуры корректным, а второй нет? Может быть, корректными фактическими параметрами, т. е. согласованными по типам с формальными параметрами, считать такие, набор операций которх вкл чает в себя вс совокупность используемых в теле процедур операций с соответствуим формальным параметром? о тогда ну но осознавать, что логическим следствием будет расирение этой совокупности вглубь вызовов процедур: если формальный параметр используется (в теле процедуры) в качестве фактического параметра другой процедуры, то
8.5.
405
совокупность долна бть расирена операциями, используемми с соответствующим формальным параметром этой процедуры. А есть еще случаи динамики, когда при одних вычислениях формируется одна, а при других — другая совокупность; есть и перегрузка операций, когда смысл имени операции зависит от того, с какими аргументами она вычисляется. все это осло няется в связи с вненими библиотечными процедурами, про которые принципиально неизвестно, как они используют свои параметры.
Эти и подобные им рассуждения приводят к выводу о том, что нужно как-то ограничить правила соответствия по сравнени с тем, что мо но предпо-ло ить на первй взгляд. Таким образом, предлагается ограничиться потенциальной применимость операций, нисколько не заботясь о том, с какими операциями они фактически используются. Иными словами, вводятся следующие соглашения:
• используется статическая система типов переменных, которая в момент описания связывает описваемое имя с типом и никогда не позволяет нарушать эту связь. В свою очередь, тип определяется как совокупность значений и набор операций, вычислимх с этими значениями;
• вводятся приведения значений типов, которые определяются как правила преобразования значения одного типа к значени другого. Эти правила, вообе говоря, могут требовать взова подпрограмм, перерабатывающих исходное значение в значение целевого типа. Они опреде-ля тся только для разумных сочетаний пар типов (для кадого язка своих). ни могут вызываться и неявно, в тех случаях, когда приведение требуется по контексту, и явно, когда приведение указвается программистом принудительно;
• значение фактического параметра, соответствующего in-параметру, приводится к типу, заданному для формального параметра, а значение формального out-параметра, вырабатываемое в ходе вычислений процедур , приводится к типу фактического параметра.
Благодаря этим соглашениям нет нужды знать реализации алгоритмов процедур, т. е. тексты, задаие их), чтобы корректно (с точки зрения языка) вызвать процедуры. остаточно знать только типы формальных параметров. Собственно говоря, одной из предпосылок определения типа набором операций, допустимых для его значений, было обеспечение с минимальнми затратами корректности вызовов процедур.
406
ГЛАВА 8. ПОДПРОГРАММЫ
Следует специально остановиться на операторе присваивания значений. С концептуальной точки зрения этот оператор есть специальным образом синтаксически оформленная процедура с двумя параметрами: in-параметр — источник значения, и out-параметр — получатель значения (по своей сути это та е процедура Copy, рассмотренная ве). оэтому правила соответствия типов в данной ситуации применя тся в полной мере, и нет ну ды что-либо специально доопределять на этот счет. Иное дело, что в языках часто опреде-ля тся не средства, обеспечиваие назначение параметров, а механизмы параметризации, и, если эти механизмы базиру тся на присваивании (как в С/С++), то поневоле приходится говорить сначала о приведениях в выра-ениях и присваиваниях, а затем переносить выработанные соглаения на параметризацию.
Ориентация Pascal на максимально полную, какую можно было реализовать в начале 70-х гг. XX вв., проверку программы до ее исполнения предопределила в языке такие правила согласования типов, которые допускают вычисление всей информации о типах объектов программы в процессе трансляции. В соответствии с этими правилами в Pascal требуется, чтобы при подстановке каждого фактического параметра его тип совпадал или был бы эквивалентен типу соответствуего формального параметра (т. е. определен при своем описании как равнй типу формального параметра). В частности, с этой цель язк Pascal требует, чтоб в описании формального параметра его тип был бы указан своим именем. Приведения типов почти всегда явные (есть единичные исключения из этого правила, например, преобразование целого к веественному).
8.5.2. Полиморфизм и вызовы с переменным числом параметров
В языках С/С++/С# и Java жизненно важной, в частности, для объектно-ориентированного программирования является возмо ность иметь много процедур с одинм и тем е именем, но разнм обраением. у нй вариант процедур вбирается по контексту вызова. Это назвается полиморизмом процедур. В последние версии языка Object Pascal проникли некоторые элементы полиморфизма, хотя там они не являются столь жизненно важными и введены скорее для согласования с вышеупомянутыми языками.
Предыдущая << 1 .. 136 137 138 139 140 141 < 142 > 143 144 145 146 147 148 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100