Н. Джехани - Язык Ада (1988) (1160771), страница 11
Текст из файла (страница 11)
Это — требование следует явно проверять в подпрограмме. Вид — формальных параметров явно не указан, поэтому по умол— чанию считается (п. Только этот вид параметров — разрешен для формальных параметров функций Я)М:МАТК1Х(Х 'Р1КБТ..Х'1.АБТХ'Р(КБТ(2)..Х'ЬАБТ(2)); — отметим способ задания границ индексов Ьея!п 1ог 1 !и Х'КАХОЕ(1) 1оор 1ог Л 1п Х'КАЬ(ОЕ(2) 1оор — параметры цикла описаны неявно ЯЗМ(1, 5):= Х(1, 5) + У(1, Л); — используемый здесь знак + — это знак сложения — для типа РЕОАТ епо 1оор; епо 1оор; гегвгп Б()М; епо "+ "; При совмещении операции + для матричного сложения тип элементов матрицы несуществен, пока операция +, используемая в теле совмещенного сложения, йвв вняв определена для типа элементов. Например, предположим, что описание матрицы модифицировано таким образом, что тип элементов теперь 1НТЕОЕК, а не Р|ОАТ.
Описание совмещения операции + остается правильным для модифицированного типа МАТК1Х, поскольку операция + определена и для типа 1ХТЕОЕК. Совмещать можно все операции, за исключением операции проверки на включение и сокращенных операций. Описание формальных параметров Х и У Х, У: МАТК1Х; можно записать в альтернативном виде: Х: МАТИХ; У: МАТИХ; Отметим тонкость, заключающуюся в том, что в языке Ада проводится различие между этими двумя формами описания объектов неограниченного типа— первая форма в отличие от второй требует, чтобы границы соответствующих фактических параметров были одинаковыми.
Поэтому не нужна явная проверка равенства границ Х и г' в описании операции +. 1.5.3. Вызовы подпрограмм, (рактические параметры и соответствие параметров [6.41 Вызовы подпрограмм имеют форму: имя процедуры 1(список фактических параметров)1; нмя функции [(описание фактических параметров)) ~ имя функции Описание фактических параметров может быть позиционным или именным.
Начальные значения фактических параметров могут быть заданы по умолчанию. Это будут те же самые начальные значения, которые соответствуют неявным начальным значениям, соответствующим формальным параметрам. Такие фактические параметры можно не включать, но для остальных фактических параметров в вызове подпрограммы должна использоваться именная нотация.
Вызов процедуры — это оператор, например Б%АР(Р О); Р()Т(() РРЕК(СНА К)); Вызов функции можно использовать только как часть выражения, поскольку функция вычисляет значение, БОКТ (5 О)' — для второго фактического параметра используется неявное — значение, т. е. 0.001; см. описание Я)КТ в разд. — 5.2.2. Я~КТ(У, 0.05) ) 3.0 ВОКТ(ЕРБ = > 0.05, Х = ) У) — альтернативная запись приведенной ранее именной нотации — для параметров А:= В+С+1); — А, В, С и 1) — это массивы типа МАТК1Х с оди— иаковыми границами. Операция +, использованная здесь,— — это совмещенная операция для массивов типа МАТК1Х. Глава 1 типы формальных и фактических параметров должны в точности совпадать.
В случае параметров скалярного типа должны удовлетворяться требования, накладываемые ограничением диапазона. Для ссылочных типов должны удовлетворяться ограничения индекса и дискриминанта. Для параметров неограниченного индексируемого типа, именуемого или личного типа с дискриминантами должна удовлетворяться спецификация ограничения для типов формальных параметров.
Границы неограниченных массивов, выступающих в качестве формальных параметров, заимствуются из соответствующих фактических параметров. 1.5.4. Совмещение подпрограмм [б.б1 Совмещение лодщюграмм — зто использование одного и того же имени для различных подпрограмм. Например, в большинстве языков программирования одно и то же имя + обозначает различные действия, используемые для сложения различных типов целых и вещественных чисел. Совмещение очень удобно, поскольку пользователь должен помнить только одно имя для функции сложения, и оно совпадает с общепринятой математической нотацией. Язык программирования должен также разрешать пользователю совмещать подпрограммы, в частности, если пользователю дана возможность описывать новые типы.
Например, было бы неплохо, если бы операпдю + можно было использовать для представления сложения таких определяемых пользователем типов, как комплексный, рациональный или полиномиальный. В идеале одни и те же имена следует применять для подпрограмм, которые сходны в главном, например они используют один и тот же алгоритм, но отличаются деталями, такими как типы и число параметров.
Плохо, конечно, применять одно и то же имя для подпрограмм, реализующих существенно разные идеи. Например, вряд ли будет хорошо использовать имя МАХ для функции, вычисляющей максимальное значение в вещественном массиве, и для функции, определяющей максимальную частоту появления цифр в массиве строк. Имеет смысл, однако, использовать имя МАХ для функций, вычисляющих максимальное значение в вещественных, целых и символьных массивах и т.
д. В языке Ада пользователю разрешается совмещать имена подпрограмм. Совмещение подпрограммы скрывает ту подпрограмму, которая совмещается, если она и новая подпрограмма имеют идентичные спецификации. Две подпрограммы имеют идентичные спецификапии, если обе подпрограммы имеют одинаковые ° имена; ° число параметров; ° типы (на самом деле базовые типы) соответствующих параметров; ° тип результата (только в случае функций). Вызов совмещенной подпрограммы неправилен, если он неоднозначен, т.
е. если невозможно точно решить, к какой из совмещенных подпрограмм производится обращение. Подобная двусмысленность разрешается различными способами, такими как префиксация имени подпрограммы именем содержащего ее пакета нли переименованием ее. 1.6. Правила видимости [81 Обсуждение видимости объектов в данном разделе касается в основном идентификаторов (имен переменных, имен подпрограмм и т. д.), а также литералов, перечислимых значений и других объектов. Вее ение Описания связывают идентификаторы с такими объектами программ, как переменная, описание типа, подпрограмма или формальный параметр. Объект может быть описан различными способами, как, например, ° описательная часть подпрограммы, блока или пакета; ° спецификация пакета; ° одна из компонент записи; ° формальный параметр подпрограммы; ° неявное описание параметра цикла (просто появление идентификатора в заголовке цикла).
1.6.1. Область действия обьектов 18.2~ Область действия обьекгла — это часть программного текста, где его описание имеет силу. Область действия (1) объекта, описанного в блоке, подпрограмме или задаче, распространяется от этого описания до конца блока, подпрограммы или задачи; (2) объекта, описанного в видимой части пакета, совпадает с областью действия спецификации пакета, которая включает в себя оставшуюся часть спецификации пакета и тело пакета. С другой стороны, область действия объекта, описанного в личном разделе пакета, распространяется до конца спецификации пакета и на его тело; (3) описания входа в задачу распространяется от его описания до конца области действия описания задачи.
Она включает тело задачи; (4) компоненты записи распространяются от ее описания до конца области действия описания записи; (5) параметра цикла распространяется от его первого появления до конца цикла; (6) параметров (включая параметры рядовых процедур) распространяется от их описания до конца той области действия, в которой они описаны. (Только первый пункт приведенного списка прямо соответствует данной главе; остальные пункты включены для полноты изложения.) 1.6.2. Видимость объектов Области действия объектов с одними и теми же идентификаторами могут перекрываться за счет совмешения подпрограмм и перечислимых литералов, вложений и т, д.
Такие программные модули на языке Ада как подпрограммы, задачи и пакеты вместе с операторами и блоками могут быть вложенными. Правила видимости языка Ада похожи на правила языка Алгол-60. Дополнительно к этому язык Ада предоставляет пользователю механизм управления степенью видимости. Говорят, что объект видим непосредственно, если к нему можно обращаться непосредственно, используя связанный с ним идентификатор.
Если объект невидим непосредственно, то иногда добавление контекста делает его непосредственно видимым. Например, компоненту С пакета Р можно сделать видимой в том контексте, в котором видим сам пакет Р, используя для него именованную компоненту Р.С. Идентификатор„связанный с объектом, для которого совмещение невозможно (например, переменная, константа, параметр цикла или метка), скрывается во Глава 1 52 внутренних конструкциях, если эти внутренние конструкции содержат объект с тем же идентификатором.