Здравствуйте, IB, Вы писали:
IB>Здравствуйте, LaPerouse, Вы писали:
LP>>Я смотрю, в последнее время бытует следующее, на мой взгляд извращенное, представление — что любой метод объекта
IB>Не любой... А только тот, который не имеет доступа к закрытым методам и полям объекта. То есть тот, функционал которого можно реализовать пользуясь только публичным контрактом объекта.
Вы меня совсем неправильно поняли. Ну совершенно все поставили с ног на голову. То, о чем вы говорите — это сервисные методы, вещь абсолютно нормальная и необходимая, т е когда внешние функции общаются с объектом через его интерфейс. Я же говорил о трансформации ООП->ФП.
LP>>который уже и не метод вовсе, а функция, которая принимает на вход объект класса ObjectClass, и возвращает измененый объект вместо того, чтобы изменять его состояние.
IB>Угу.
LP>> Как минимум, туда вшита неявно информация о типе, и это помогает организовать полиморфизм.
IB>Если сделать это явно, то уже не полиморфизм?
Если это сделать явно, то это уже не полиморфизм, а х з что.
if (obj instanceof A)
//
else if (obj instnceof B)
//..
LP>>В результате при вызове метода method по интерфейсу I вызовется нужная реализация. Ничего подобного нельзя сделать с функциями.
IB>Хм...
IB>Method(A a)
IB>Method(B b)
Это вообще к чему?

В данном случае вам придется делать ЯВНОЕ преобразование типа, те с помощью рантаймовой инфы узнавать тип объекта, делать нужный каст и вызывать нужную функцию, либо ловить ClassCastException

Какой к черту полиморфизм?
LP>> Отсюда следует естественный вывод, что высказывания такого рода — низкопробная лажа, не выдерживающая никакой критики.
LP>>Кто что думает по этому поводу? Надеюсь, дискусия, если она вообще состоится, не превратится в спор pattern matching vs виртуальные функции.
IB>Ты точно на дискуссию надеялся, когда это писал?
IB>На самом деле, крайности вредны, меру надо знать. Но при проектировании, прежде чем делать функцию методом класса, надо три раза подумать — действительно ли она там нужна.
Я это не отрицаю
IB>Объяснение очень простое и логичное — каждый метод-член класса, который можно вынести во внешнюю функцию, уменьшает инкапсуляцию и увеличивает связность, что, в свою очередь, увеличивает стоимость поддержки.
Чертовски верно сказано. Так я о том же.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>