Мёссенбок пишет, что конструктор - это "порождающий паттерн" (Приёмы проектирования в Обероне-2 и Компонентном Паскале):
> -- Цитата:
> При создании объекта желательно инициализировать его поля. Если вы не желаете забыть об инициализации, разумно будет объединить создание и определение в одно действие. Для этого и существует шаблон "конструктор"
Можно ли данную процедуру назвать конструктором?

## Код:
```
TYPE
   DropValue* = POINTER TO RECORD (Value)
      val*: Dialog.List;
      data: ListsMap.IntMap;
   END;

PROCEDURE NewDropValue*(): DropValue;
   VAR dv: DropValue;
BEGIN
   NEW(dv); dv.val.index:=keepSel; RETURN dv
END NewDropValue;
```


Проблема в том, что тип DropValue не LIMITED, а значит, при создании объекта клиентам модуля можно обходиться без NewDropValue. Если эта процедура необязательна к использованию, можно ли сказать, что это уже формально не конструктор, а просто "утилитарная функция"?