Подтвердить что ты не робот

Почему это называется "открытой (или закрытой) рекурсией?

Я нашел некоторые объяснения открытой/закрытой рекурсии, но я не понимаю, почему определение содержит слово "рекурсия" или как оно сравнивается с динамической/статической диспетчеризацией. Среди объяснений, которые я нашел, есть:

Открытая рекурсия. Еще одна удобная функция, предлагаемая большинством языки с объектами и классами - это возможность для одного метода тело для вызова другого метода того же объекта через специальный переменная называется self или, на некоторых языках, this. Специальный поведение "я" заключается в том, что оно связано с поздним сроком, что позволяет определить метод в одном классе для вызова другого метода, который определен ниже, в некоторый подкласс первого. [Ральф Хинзе]

... или в Wikipedia:

Семантика отправки this, а именно, что этот метод вызывает это, динамически отправляется, называется открытой рекурсией и означает, что эти методы могут быть переопределены производными классами или объектами. Напротив, прямая именная рекурсия или анонимная рекурсия функции использует закрытую рекурсию с ранним связыванием.

Я также прочитал вопрос StackOverflow: Что такое открытая рекурсия?

Но я не понимаю, почему слово "рекурсия" используется для определения. Конечно, это может привести к интересному (или опасному) побочному эффекту, если вы используете "открытую рекурсию", выполнив... метод рекурсивного вызова. Но определения не принимают рекурсивный вызов метода/функции непосредственно во внимание (добавьте "закрытую рекурсию" в определение Википедии, но это звучит странно, поскольку "открытая рекурсия" не относится к рекурсивному вызову).

Вы знаете, почему в определении есть слово "рекурсия" ? Это потому, что оно основано на другом определении компьютерной науки, о котором я не знаю? Должно просто сказать "динамическая отправка" недостаточно?

4b9b3361

Ответ 1

Я попытался начать писать ответ здесь, а затем закончил тем, что написал весь пост в блоге об этом. TL; DR:

Итак, если вы сравниваете реальный объектно-ориентированный язык с более простым языком с помощью только структур и функций, различия заключаются в следующем:

  • Все методы могут видеть и звонить друг другу. Порядок, который они определены, не имеет значения, поскольку их определения являются "одновременными" или взаимно рекурсивными.
  • Базовые методы имеют доступ к полученному объекту получателя (т.е. к этому или к себе на других языках), поэтому они не закрываются друг над другом. Они открыты для переопределенных методов.

Таким образом: открытая рекурсия.