Re[2]: method(obj) то же самое, что и obj.method() ? Что за
От: Perseus  
Дата: 04.07.07 18:25
Оценка:
Здравствуйте, 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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.