Пишут, что это необычайно мощная весчь. Только я вот чего не пойму. Что если я вместо такого
(defgeneric collide (x y))
(defmethod collide ((x asteroid) (y asteroid))
;;астероид сталкивается с астероидом
)
(defmethod collide ((x asteroid) (y spaceship))
;;астероид сталкивается с космическим кораблем
)
;;......
(define (collide x y)
(cond
((and (instance? x asteroid) (instance? y asteroid))
("астероид сталкивается с астероидом"))
((and (instance? x asteroid) (instance? y spaceship))
("астероид сталкивается с космическим кораблем"))
;;;..............
))
; И вызываю так
(collide asteroid asteroid)
То что от этого принципиально изменится? То есть я понимаю, что тут есть небольшой синтаксический сахарок, но речь не об этом. Заявляется обычно о том, что это какая то неимоверно мощная техника ООП, которая, чуть ли не затмевает собой все остальное. Например Legioner недавно заявил
Полиморфизм (времени выполнения) это сердце ООП. В этой связи, как ни странно, квинтэссенция ООП это мультиметоды
.
Я не спорю, я, вероятно, чего-то не понимаю. Пока я вижу только небольшой сахарок над «функция + ветвление». Хотелось бы увидеть пример применения, который не может быть выражен банальной конструкцией типа «функция + ветвление».
Иными словами, в чем сила?
Спасибо.