>>>в ООП не передают функции.
Самый что ни на есть объектно ориентированный смолток, например, вообще не содержит управляющих конструкций. Вместо них есть методы, которым передают блоки
The Smalltalk Language
X++:
"Prints the integers between 1 and 10, and a string stating whether each is even or odd"
1 to: 10 do: [:n |
n even ifTrue: [
Transcript show: n; show: ' is even'; cr]
ifFalse: [
Transcript show: n; show: ' is odd'; cr]
]
Здесь:
1 to: 10 do: <блок>
to:do: - это сообщение которое посылается объекту "число единица" с параметрами 10 и блоком (по сути дела анонимной функцией)
В обзщем в чистых объектноориентированнх языках все есть объект и даже функции это объекты, которые могут передаваться в качестве параметров, храниться в коллекциях и прочее.
Но в целом, я согласен с Маззи, что в X++ это выглядит настолько криво, что надо сильно взвещивать количество геморроя, использовать всяческие intristic functions типа methodStr или покрывать использоваение тестами.
Еще стоит напомнить, что есть такая вещь как интерфейсы, а рантайм при вызове методов типы классов не проверяет, а просто иет методы по имени.
То есть интерфейсы можно использовать для декларации вызова функционала, при этом не обязательно декларировать то, что класс имплементит этот функционал (им это даже может быть не класс, а недокласс, например, форма).
То есть реально рантайм поддерживает
"утиную типизацию" хотя на уровне проверки при компиляции и IDE поддерживается манифестная статическая типизация.
Этим можно пользоваться и пользуются.