ГОСТ Р И С 0 10303-11 — 2009
емых для представления формальных параметров функций и процедур. Тип данных AGGREGATE, общий
агрегированный тип данных (см. 9.5.3.5) и родовой объектный типданных (GENERIC_ENTITY) могут, кроме
того, использоваться для объявления явных или вычисляемых атрибутов абстрактных объектных типов
данных. Общий агрегированный тип данных может также использоваться, чтобы обеспечить обобщение
базисных типовданных, разрешенное для конкретных агрегированных типовданных.
9.5.3.1 Типданных AGGREGATE
Тип данных AGGREGATE является обобщением всех агрегированных типов данных.
При вызове процедуры или функции, формальный параметр которой определен типом данных
AGGREGATE, передаваемый фактический параметрдолжен иметь тип данных ARRAY. BAG. LIST или SET.
При этом операции, которые могут быть выполнены, должны зависеть от типа данных фактического пара
метра.
П р и м е ч а н и е — Метки типов (см. 9.5.3.4) могут использоваться для обеспечения того, чтобы при
вызове два или более параметров, представленных типом данных AGGREGATE, имели одинаковый тип
данных, или чтобы тип данных возвращаемого результата был таким же. как и у одного из переданных
параметров, независимо от переданных фактических типов данных.
Если явный или вычисляемый атрибут в объявлении типа данных ABSTRACT ENTITY представлен
типом данных AGGREGATE, то данный атрибут должен быть объявлен в подтипахданного абстрактного
объекта какARRAY, BAG. LIST или SET.
Синтаксис:
171 aggregate_type = AGGREGATEtypeJabel ] OF parameter_type.
329 typejabel = typejabeljd | type_label_ref.
266 parameter_type = generalized_types | named_types |simple_types.
Правила и ограничения:
a) Тип данных AGGREGATE должен использоваться только в качестве типа формального пара
метра функции или процедуры, либо типа результата функции, либо типа локальной переменной внутри
функции или процедуры, либо представления явного или вычисляемого атрибута в объявлении типа
данных ABSTRACT ENTITY.
b) Если типданных AGGREGATE используется в качестве типаданных результата функции или типа
данных локальной переменной внутри функции или процедуры, тодля такого применения требуются ссыл ки
меток типов. Ссылки меток типов должны ссылаться на метки типов, объявленные формальными пара
метрами (см. 9.5.3.4).
c) Если тип данных AGGREGATE используется в качестве представления явного или вычисля
емого атрибута в объявлении типа данных ABSTRACT ENTITY, то данный атрибут должен быть
повторно объявлен как ARRAY. BAG. LIST или SET в неабстрактных подтипах данного объектного типа
данных.
Пример — Данная функция получает агрегированную структуру чисел. Функция должна возвра
щать результат того же типа, что и у переданной ей агрегированной структуры, содержащий
масштабированные числа.
FUNCTION scale (input : AGGREGATE: intype OF REAL:
scalar : REAL): AGGREGATE: intype OF REAL;
LOCAL
result : AGGREGATE: intype OF REAL := input:
ENDLOCAL;
IFSIZEOF( ( ’BAG,’SET*] * TYPEOF(input)) > OTHEN
REPEAT i:= LOINDEX(input) TO HIINDEX(input):
— удалить исходный
— вставить масштабированный
result := result-inputfi];
result := result* scalar *input[i];
ENDREPEAT;
ELSE
REPEAT i:= LOINDEX(input) TO HIINDEX(input);
result [I] := scalar*input[i):
ENDREPEAT;
ENDJF
RETURN(result):
END_FUNCTION:
49