2Vlad,
это остатки обобщенного программирования
Большая Комиссия решила, что обобщенное программирование нарушает Гармонию Единства формы и содержания, но были отмечены и положительные моменты, которые им хотелось бы иметь, не сильно изменяя компилятор и язык - сильно их напрягают новые ключевые слова и интеллектуальность компиляторов, да и программисту жизнь не должна малиной казаться, иначе за что им зарплату платить.
В результате получилось то, что получилось, но хоть не весь код пришлось выбросить.
В текущей реализации уточнения (расширения) методов есть два подхода:
1) Уточнить МОЖНО любой метод базового типа, при условии, что в базовом типе отсутствует вызов этого метода, что контролируется компилятором - подобный метод используется разработчиками основного заказчика и именно так было сформулировано ТЗ при исключении механизмов обобщенного программирования.
2) Основанный на модификаторе EXTENSIBLE (procedure [extensible] f(a:object). В данном случае метод, объявленный как extensible, ДОЛЖЕН быть переопределён и расширен(уточнён) в потомке или объявлен как extensible. Методы с модификатором extensible (как и методы объявленные с ключевым словом abstract (procedure f(); abstract;) являются абстрактными и их непосредственный вызов запрещён. Объекты, у которых есть абстрактные методы является абстрактным, со всеми вытекающими из этого особенностями. Тогда как при первом методе все объекты считаются реализованными.
Мы в своих разработках используем только второй подход.
К сожалению, в отличии от обобщенного программирования, никаких средств (за исключением необходимости реализовать все абстрактные и расширяемые методы) проверки полноты и целостности реализации типа(пресловутой герметичности) нет. Но его нет и при обычном проектировании объекта - ничего, кроме здравого смысла.
Вероятно либо нужно вернуть обобщенку либо както совместить с ней.
К тому же я думаю, что первый подход нужно вообще выпилить из компилятора