Задача стояла следующим образом - сделать так, чтобы запись нельзя было создать никак иначе, кроме как через конструктор.
Для Оберона был сделан следующий простой пример.
## Код:
```
MODULE Export;
TYPE
  a=RECORD
    b-:INTEGER;
  END;
VAR
  p-:POINTER TO a;
PROCEDURE Init*();
BEGIN
  NEW(p);
  p^.b:=100;
END Init;
BEGIN
END Export.
```

## Код:
```
<*+MAIN*>
MODULE Import;
IMPORT STextIO,SWholeIO,Export;
VAR
  c:CHAR;
BEGIN
  Export.Init;
  SWholeIO.WriteInt(Export.p^.b,4);
  STextIO.WriteLn;
  STextIO.ReadChar(c);
END Import.
```

Иван Денисов сделал аналогичный пример на Компонентном Паскале
## Код:
```
MODULE TestExport;
TYPE
  Item*=POINTER TO LIMITED RECORD
        b-:INTEGER;
  END;
PROCEDURE Init*():Item;
VAR
  temp:Item;
BEGIN
  NEW(temp);
  temp^.b:=100;
  RETURN temp;
END Init;
BEGIN
END TestExport.
```

## Код:
```
MODULE TestImport;
IMPORT Log,TestExport;
VAR
  Item:TestExport.Item;
PROCEDURE Do*;
BEGIN
  Item:=TestExport.Init();
  Log.Int(Item^.b);
  Log.Ln;
END Do;
END TestImport.
TestImport.Do
```

P.S. Прошу извинить, если данная тема уже поднималась на форуме - не нашёл.