И ещё по поводу дисциплины. Можно, конечно, как предлагает Мёссенбёк втретьемиздании Objektorientierte Programmierung in Oberon-2 (см. код Петра Кушнира), определять для типа T метод NewT в качестве одного единственного метода, ответственного за реализацию паттерна "конструктор". Но я бы тут дважды подумал, а стоит ли так делать?

Возможно, стоит ограничиться только инициализатором InitT и дисциплиной вызова InitT(t) после NEW(t) в клиентском коде, как всё тот же Мёссенбёк предлагал вовторомиздании всё того же опуса Object-Oriented Programming in Oberon-2 (см. раздел 8.1 Initialization of Objects). И не столько потому, что теряется наглядность, сколько потому, что всё равно остаётся возможность только выделить память посредством NEW без последующей инициализации. В КП для определённого типа записей (LIMITED), конечно, NEW запрещён за пределами определяющего модуля, но, во-первых, это касается только LIMITED-записей, а во-вторых, в Oberon-2 таких средств, вроде бы, вообще нет. Так что от дисциплины всё-равно никуда не деться: следует всегда создавать экземпляр класса T, используя обязательно определённый его создателем конструктор NewT, а не посредством NEW. С другой стороны, с конструктором NewT делаются возможными определённые вещи, невозможные с иcпользованием идиомы NEW-InitT, так что может Мёссенбёк и прав.