ГОСТ Р И С 0 10303-11 — 2009
9.5.3.2 Обобщенный тип данных
Тип данных GENERIC является обобщением всехдругих типовданных.
При вызове процедуры или функции с типомданных формального параметра GENERIC, передавае
мый фактический параметр может не иметь тип данных GENERIC. Операции, которые при этом могут быть
выполнены, зависят от типа данных фактического параметра.
П р и м е ч а н и е — Метки типов (см. 9.5.3.4) могут быть использованы для обеспечения того, чтобы при
вызове два или более параметров, представленных типом данных GENERIC, имели одинаковый тип данных, или
чтобы тип данных возвращаемого результата был таким же. как и у одного из переданных параметров, независи
мо от переданных фактических типов данных.
Синтаксис:
231 generic_type = GENERIC [typejabel ].
329 typejabel = typejabelJd | typeJabel_ref.
Правила и ограничения:
a)Тип данных GENERIC должен использоваться только в качестве типа формального параметра
функции или процедуры, типа результата функции либо типа локальной переменной внутри функции или
процедуры.
b
)Если тип данных GENERIC используется в качестве типа данных результата функции или типа
данных локальной переменной внутри функции или процедуры, то для такого применения требуются
ссылки меток типов. Ссылки меток типов должны ссылаться на метки типов, объявленные формаль
ными параметрами (см. 9.5.3.4).
Пример — В данном примере показана универсальная функция, осуществляющая сложение чисел
или векторов:
FUNCTION add (а.Ь: GENERIC: intype): GENERIC: intype;
LOCAL
nr : NUMBER; — целое или действительное число
vr : vector;
ENDJ.OCAL;
IF ( ’NUMBER- IN TYPEOF(a)) AND (’NUMBER’ IN TYPEOF(b)) THEN
nr := a+b;
RETURN (nr);
ELSE
IF (THIS_SCHEMA.VECTOR’ IN TYPEOF(a) ) AND
(THIS_SCHEMA.VECTOR’ IN TYPEOF(b) ) THEN
vr :=vector(a.i + b.i, a.j
+ b.j, a.k +
b.k);
RETURN (vr);
ENDJF;
если получен неправильный входной параметр, то
возвращается неопределенное значение
END IF;
RETURN (?); —
—
END FUNCTION;
9.5.3.3 Обобщенный объектный тип данных
Тип данных GENERIC_ENTITY является обобщением всех объектных типов данных.
При вызове процедуры или функции с формальным параметром, имеющим тип данных
GENERIC_ENTITY. передаваемый фактический параметр должен быть экземпляром объекта. Операции,
которые при этом могут быть выполнены, зависят от типаданных фактического параметра.
П р и м е ч а н и е — Метки типов (см. 9.5.3.4) могут быть использованы для обеспечения того, чтобы
при вызоведвух или более параметров, представленных типом данных GENERIC_ENTrTY. имели одинаковый
тип данных или чтобы тип данных возвращаемого результата был таким же. как и у одного из переданных пара
метров. независимо от переданных фактических типов данных.
Если в объявлении типа данных ABSTRACT ENTITY явный или вычисляемый атрибут представлен
типом данных GENERIC_ENTITY. то данный атрибут должен быть объявлен в подтипах данного объекта
конкретным объектным типом данных.
50