ГОСТ Р И С 0 10303-11 — 2009
При создании экземпляра сложного объекта (экземпляра объекта, присутствующего в графе подти-
пов/супертипов) конструкторы всех составляющих его объектов должны объединяться посредством опе
ратора || (см. 12.10).
Правила и ограничения:
a) Конструктордолжен иметьодин формальный параметр для каждого явного атрибута, объявленного
вданном объектном типеданных. Это не относится катрибутам, унаследованным от супертипов и повторно
объявленным вданном объектном типеданных.
b
) Порядокформальных параметровдолжен быть идентичен порядкуобъявления явных атрибутов в
объекте.
c) Параметрический тип данных каждого из формальных параметров должен быть идентичен типу
данных соответствующего атрибута.
d) Если объект не имеет явных атрибутов, то должен быть указан пустой список параметров (то есть
круглые скобки всегдадолжны присутствовать).
П р и м е ч а н и е — Обязательное присутствие круглых скобок отличается от явно объявленных функций.
e) Необязательные атрибуты могут быть заданы неопределенным (?) значением при вызове неявно
определенного конструктора. Это указывает на то. что явное значение не было задано.
f) Если вэкземпляре сложного объекта имеется подтип, содержащий вычисляемые атрибуты, являю
щиеся повторно объявленными явными атрибутами супертипа, то конструктор супертипа должен задавать
значения для данных повторно объявленных атрибутов. Вместо этих значений используется вычисленное
значение.
Пример — Допустим, имеется следующее объявление объекта:
ENTITY point:
х, у.
2
: REAL;
END_ENTITY:
Тогда неявно объявленный конструктор объекта point может быть представлен следующим
образом:
FUNCTION point(х.у
.2
: REAL):point;
Данный конструктор затем может использоваться при присваивании значений экземпляру данно
го объектного типа данных:
CONSTANT
origin :point := point(0.0, 0.0. 0.0);
END_CONSTANT;
9.2.7 Конкретизация
Конкретизация является более ограниченной формой исходного объявления. Существуют следую
щие варианты определения конкретизации:
- объект, относящийся к подтипу данных, является конкретизацией любого из своих супертипов:
- тип данных ENTITY является конкретизацией типаданных GENERIC_ENTITY;
- тип данных EXTENSIBLE GENERIC_ENTITY SELECT является конкретизацией типа данных
GENERIC_ENT!TY;
- типданных SELECT, содержащий только типы данных ENTITY, является конкретизацией типа дан
ных GENERIC_ENTITY;
- агрегированные типы данных являются конкретизациями типаданных AGGREGATE;
- типданных SELECT, состоящий из объектов а, Ь. с. является конкретизацией типаданных SELECT,
состоящего из объектов d. е, f. если объекты а. Ь. с являются конкретизациями объектов d. е. f:
- тип данных SELECT, состоящий из объектов а. Ь. с. является конкретизацией супертипа, если а. Ь. с
являются подтипамиданного супертипа;
- типы данных INTEGER и REAL оба являются конкретизациями типа данных NUMBER;
- тип данных INTEGER является конкретизацией типа данных REAL.
- тип данных BOOLEAN является конкретизацией типаданных LOGICAL:
- выражение LIST OF UNIQUE item является конкретизацией выражения LIST OF item;
- выражение ARRAY OF UNIQUE item является конкретизацией выражения ARRAY OF item;
- выражение ARRAY OF item является конкретизацией выражения ARRAY OF OPTIONAL item;
- выражение SET OF item является конкретизацией выражения BAG OF item;
- пусть AGG обозначает один из типов данных ARRAY. BAG. LIST или SET. тогда выражение
AGG OF item является конкретизацией выражения AGG OF original при условии, что item является
конкретизацией original;
45