Это продолжение темы, выросшей из
просьбы рассказать о процедурных переменных в Компонентном Паскале.
Код:
Context = ABSTRACT RECORD END;
p: PROCEDURE(VAR ctx: Context; par: Parameter);
На первый взгляд, при наличии ООП они видятся избыточностью, потому что архитектурно любую процедурную переменную, как минимум, можно заменить объектом с одним методом. И как свидетельствуют разработчики, делается такое довольно часто даже несмотря на наличие процедурных переменных.
Код:
Abr = ABSTRACT RECORD END;
PROCEDURE (VAR ctx:Abr) Do(par: Parameter) ABSTRACT;
p: POINTER TO Abr;
Естественно, ООП этим не ограничивается, но речь про избыточность процедурного типа при уже включённом в язык ООП, а не ООП как таковом, в том числе, и о потребности в нём строго в том виде, в котором оно представлено в КП.
Так как есть и обратное мнение, хотелось бы увидеть его в более конкретном выражении. Лучше всего в виде рабочего, но минимального кода. Это то, что позволяет лучше понимать суть в противовес растеканию слишком абстрактной мысли.
Дмитрий Викторович, я посмотрел Ваш
доклад, но, к сожалению, так и не смог увидеть потребность в использования именно процедурных типов, а не ООП. Возможно, мы просто о разных темах? Как мне показалось, то, что Вы изложили, прекрасно оформляется в виде ООП. Если нет, было бы интересно рассмотреть такой код.