Коллеги,

выскажитесь, пож, чем руководствоваться при выборе ABSTRACT RECORD versus EXTENSIBLE RECORD?

Поясню.

В ББ есть абстрактные типы (TextViews.View), и стандартная реализация полностью отделена от абстрактного интерфейса.
Есть также "полуабстрактные" типы (Containers.View), которые часть функциональности реализуют в своем модуле, а часть - оставляют для реализации производными.
А вот у меня задача, где я полностью могу реализовать функциональность и тип данных. Причем это не "стандартная" реализация, а всеобщая реализация: т.е. "так должно быть всегда и для всех". Но при этом нужно предусмотреть возможность расширения, чтобы клиенты могли дополнять своими данными и, возможно, своим поведением (о котором мне не нужно ничего знать).


Я бы сделал так:
## Код:
```
TYPE Type* = POINTER TO EXTENSIBLE RECORD x*, y-, z: ... END;
PROCEDURE (t: Type) P*, NEW, EXTENSIBLE;  (* производные ДОЛЖНЫ вызывать P^ *)
```

Ну или так, чтобы не полагаться на ^ супервызовы:
## Код:
```
PROCEDURE (t: Type) P2*, NEW, EMPTY;
PROCEDURE P* (t: Type);   (* или PROCEDURE (t: Type) P*, NEW; *)
BEGIN ...; t.P2
END P;
```


Или все-таки стоит сделать
## Код:
```
TYPE Type* = POINTER TO  ABSTRACT RECORD x*, y-, z: ... END;
StdType = POINTER TO RECORD(Type) ... END;
```


Какими руководствоваться критериями при выборе?