Справочное руководство по языку Ада-83


Описания переименования


Описание переименования задает другое имя для понятия.

описание-переименования ::= идентификатор : обозначение-типа renames имя-объекта; | идентификатор : exception renames имя-исключения;

| package идентификатор renames имя-пакета; | спецификация-подпрограммы renames имя-подпрограммы-или-входа;

Предвыполнение описания переименования вычисляет имя, которое следует после зарезервированного слова

renames,

и таким образом определяет понятие, обозначенное этим именем (переименованное понятие). В любой точке, где описание переименования видимо, идентификатор или знак операции, заданный в этом описании, обозначает переименованное понятие.

Первая форма описания переименования используется для переименования объектов. Переименованное понятие должно быть объектом базового типа обозначения типа. Описание переименования не изменяет свойств переименованного объекта. В частности, описание переименования не оказывает влияния на значение объекта и на то, является ли он константой или нет; аналогично переименования не затрагивают ограничения, накладываемые на объект (любое ограничение, которое следует из обозначения типа, входящего в описание переименования, игнорируется). Описание переименования правильно только в том случае, если точно один объект имеет этот тип и может быть обозначен этим именем объекта.

Существуют следующие ограничения, связанные с переименованием подкомпоненты переменной, которая зависит от дискриминантов. Переименование недопустимо, если подтип переменной, как это определено в соответствующем описании объекта, описании компоненты или указании подтипа компоненты, является неограниченным типом или если переменная — это формальный объект настройки (вида

in out).

Также если переменная — формальный параметр, то переименование недопустимо, если заданное в спецификации параметра обозначение типа обозначает неограниченный тип, чьи дискриминанты имеют выражения по умолчанию.

Вторая форма описания переименования используется для переименования исключений;


третья форма — для переименования пакетов.


Последняя форма описания переименования используется для переименования подпрограмм и входов. Переименованная подпрограмма или вход и спецификация подпрограммы, заданная в описании переименования, должны иметь один и тот же профиль типа параметров и результата (см. 6.6). Описание переименования правильно только в том случае, если точно одна видимая подпрограмма или вход удовлетворяют упомянутым выше требованиям и могут быть обозначены конкретным именем подпрограммы или входа. Кроме того, виды параметров должны совпадать с видами соответствующих по позиции формальных параметров.
Переименование не оказывает влияния на подтипы параметров и результата (если он есть) переименованной подпрограммы или входа. Эти подтипы заданы в первоначальном описании подпрограммы, конкретизации настройки или описании входа (но не в описании переименования), а также для вызовов, которые используют новое имя. С другой стороны, описание переименования может вводить имена параметров и выражения по умолчанию, которые отличаются от заданных для переименованной подпрограммы; именованные сопоставления в вызовах с новым именем подпрограммы должны использовать новое имя параметра; вызовы со старым именем подпрограммы должны использовать старые имена параметров.
Процедура может быть переименована только как процедура. Функция либо операция могут быть переименованы как функция либо как операция; при переименовании функции или операции операцией спецификация подпрограммы, заданная в описании переименования, подчиняется правилам разд. 6.7 для описаний операции. Литералы перечисления могут быть переименованы как функции; аналогично'атрибуты, определенные как функции (такие, как SUCC или PRED), могут быть переименованы как функции. Вход может быть переименован только как процедура; новое имя допускается только в контексте, допускающем имя процедуры. Вход из семейства может быть переименован, но семейство входов не может быть переименовано целиком. /


Примеры:
declare
L : PERSON renames LEFTMOST_PERSON; -- см. 3.8.1 begin
L.AGE := L.AGE + 1; end;
FULL : exception renames TABLE_MANAGER.TABLE_FULL; -- CM. 7.5
package TM renames TABLE.MANAGER;
function REAL_PLUS(LEFT, RIGHT : REAL ) return REAL renames "+"; function INT_PLUS (LEFT, RIGHT : INTEGER) return INTEGER renames "+";
function ROUGE return COLOR renames RED; —- CM. 3.5.1 function ROT return COLOR renames RED; function ROSSO return COLOR renames ROUGE:
function NEXT(X : COLOR) return COLOR renames COLOR'SUCC; - CM. 3.5.5
Примеры описания переименования с новыми именами параметров:
function "*" (X.Y : VECTOR) return REAL renames DOT_PRODUCT; —- CM. 6.1
Пример описания переименования с новым выражением по умолчанию:

function
MINIMUMtL : LINK := HEAD)
return
CELL
renames
MIN-.CELL; — CM. 6.1
Примечание.
Переименование может быть использовано для разрешения конфликта имен и введения сокращений. Переименование другим идентификатором или символом операции не скрывает старое имя; новое и старое имена (символ операции) не обязательно видимы в одних и тех же точках. Атрибуты РОЗ и VAL не могут быть переименованы, так как не могут быть написаны соответствующие спецификации; это положение справедливо для предопределенных мультипликативных операций с результатом
универсального-фиксированного
типа.
Вызовы переименованного входа с новым именем являются операторами вызова процедуры и недопустимы в местах, где синтаксис требует оператора вызова входа в условном и временном вызовах входа; аналогично атрибут COUNT нельзя применить к новому имени.
Объект задачного типа, описанный посредством описания объекта, может быть переименован как объект. Однако одиночная задача не может быть переименована, так как соответствующий задачный тип является анонимным. По тем же причинам не может быть переименован объект анонимного индексируемого типа. Не существует синтаксической формы для переименования настраиваемого модуля.


Для достижения эффекта переименования типа (включая задачный тип) может быть использован подтип, например:

subtype MODE is
TEXT_IO.FILE_MODE ; \
Ссылки:
атрибут 4.1.4, базовый тип 3.3, вид 6.1, видимость 8.3, временный вызов входа 9.7.3, вход 9.5, вызов входа 9.5, вызов подпрограммы 6.4, выражение по умолчанию 6.1, вычисление имени 4.1, дискриминант 3.7.1, допустимый 1.6, зависеть от дискриминанта 3.7.1, задачный объект 9.2, зарезервированное слово 2.9, знак операции 6.1, идентификатор 2.3, имя 4.1, исключение 11, константа 3.2.1, литерал перечисления 3.5.1, обозначение типа 3^3.2, объект 3.2, ограничение 3.3, ограниченный подтип 3.3, оператор вызова входа 9.5, оператор вызова процедуры 6.4, операция 6.7, описание 3.1, описание входа 9.5, описание объекта 3.2, описание операции 6.7, описание подпрограммы 6.1, пакет 7, параметр 6.2, переменная 3.2.1, подкомпонента 3.3, подпрограмма 6, подтип 3.3.2, правильно 1.6, предвыполнение 3.1, процедура 6.1, семейство входов 9.5, спецификация параметра 6.1, спецификация подпрограммы 6.1, тип 3.3, условный вызов входа 9.7.2, формальный параметр 6.1, функция 6.5.

Пред.  Уровень выше  След.
8.3. ВИДИМОСТЬ
 
Содержание  
8.6. СТАНДАРТНЫЙ ПАКЕТ
Содержание раздела