Re[6]: Недоучки по настоящему ООП не освоили (из-за Basic и
От: korvin_  
Дата: 02.09.25 07:57
Оценка:
Здравствуйте, ·, Вы писали:

·>Так в данном случае это отличие динамической типизации и статической, а не особенности ООПшнсти. Во всяких Java вызов неизвестного метода просто не может произойти, т.к. такой код даже невалиден с т.з. компилятора.


ООПшность динамична по определению: только объект, в общем случае, знает какие сообщения он может обработать и как, а не компилятор. Объект может находится в другом процессе, на другой машине. Во всяких Java через рефлексию можно попробовать вызывать любой метод у любого объекта. Во всяком случае можно было раньше. На этом строятся mock-фреймворки, AFAIK, и AOP-фреймворки (Aspect-Oriented Programming).

·>А можно развернуть плз?

·>Как по мне, вызов метода — это частный случай отправки сообщения: синхронно, с получением результата, ровно одному получателю.

Сообщение -- это тоже объект, с ним можно делать всё то, что и с другими объектами, до, после, во время обработки. Методы -- это реакции на сообщения, практически просто вызов процедуры по указателю из VMT. Метод "принадлежит" объекту (классу, интерфейсу), сообщение -- нет, оно само по себе. Можно сохранить (в переменную) ссылку на метод (с объектом или без), но не параметры, либо сохранить замыкание с телом-вызовом метода.

obj.Foo(x, y);

var objFooRef = obj.Foo;
objFooRef(x, y);

var fooRef = TheObj.Foo;
fooRef(obj, x, y);

var fooCall = fun (obj: TheObj) -> obj.Foo(x, y);
fooCall(obj);

--

obj.Dispatch(new Foo{x, y});

var foo = new Foo{x, y};
obj.Dispatch(foo);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.