При объявлении объекта, одновременно неявным образом объявляется конструктор. Идентификатор конструктора совпадает с идентификатором объекта и область видимости объявления конструктора совпадает с областью видимости объявления объекта.
При запуске конструктора он должен возвращать в точку вызова значение частичного сложного объекта для данного объектного типа данных. Каждый атрибут данного значения частичного сложного объекта задается фактическим параметром, заданным в вызове конструктора мнимой копией. Мнимая копия представляет собой объект, в который экземпляр объекта копируется посредством ссылки, то есть атрибут является ссылкой на экземпляр, используемый в качестве фактического параметра, простой тип данных имеет скопированное значение, а агрегированные структуры имеют элементы, скопированные в мнимую копию. Конструктор должен обеспечивать только явные атрибуты из объявления конкретного объекта.
Синтаксис: |
При создании экземпляра сложного объекта (экземпляра объекта, присутствующего в графе подтипов/супертипов) конструкторы всех составляющих его объектов должны объединяться посредством оператора || (см. 12.10).
Правила и ограничения:
a) Конструктор должен иметь один формальный параметр для каждого явного атрибута, объявленного в данном объектном типе данных. Это не относится к атрибутам, унаследованным от супертипов и повторно объявленным в данном объектном типе данных.
b) Порядок формальных параметров должен быть идентичен порядку объявления явных атрибутов в объекте.
c) Параметрический тип данных каждого из формальных параметров должен быть идентичен типу данных соответствующего атрибута.
d) Если объект не имеет явных атрибутов, то должен быть указан пустой список параметров (то есть круглые скобки всегда должны присутствовать).
Примечание - Обязательное присутствие круглых скобок отличается от явно объявленных функций.
e) Необязательные атрибуты могут быть заданы неопределенным (?) значением при вызове неявно определенного конструктора. Это указывает на то, что явное значение не было задано.
f) Если в экземпляре сложного объекта имеется подтип, содержащий вычисляемые атрибуты, являющиеся повторно объявленными явными атрибутами супертипа, то конструктор супертипа должен задавать значения для данных повторно объявленных атрибутов. Вместо этих значений используется вычисленное значение.
Пример - Допустим, имеется следующее объявление объекта:
ENTITY point;
х, у, z : REAL;
END_ENTITY;
Тогда неявно объявленный конструктор объекта point может быть представлен следующим образом:
FUNCTION point (x,y,z : REAL) : point;
Данный конструктор затем может использоваться при присваивании значений экземпляру данного объектного типа данных:
CONSTANT
origin : point := point (0.0, 0.0, 0.0);
END_CONSTANT;