> -- Цитата:
> У Вас, вроде, всё нормально. Архитектурно смущает открытость поля r (т.е. данные доступны кому угодно не через методы), но для каких-нибудь конкретных вычислительных задач, где не хочется громоздить и терять производительность на оборачивании всех-всех данных в методы, можно и так.
Это просто абстрактный пример, я не стал его "окультуривать". На самом деле,  у меня записи добавляются клонированием прототипа:
PROCEDURE (rs:RecSet) Add* (VAR prototype:Rec);
PROCEDURE (r:Rec) Clone* ():Rec;

Меня смущает, что модуль (назовем его Math) и его методы (DoMath) работают с указателями на абстрактный Rec, "не зная" о конкретных типах. Т.е. каким-то образом экземпляры Rec, на самом деле имеющие типы OneRec, TwoRec, и т.д. должны вызвать именно свой метод Do, и сделать это в момент выполнения. Есть сомнения, что я правильно организую работу. Что-то здесь не так...