Мультиме́тод () або множи́нна диспетчериза́ція () — механізм, який дозволяє вибрати одну з декількох функцій в залежності від динамічних типів або значень аргументів. Є розширенням одиночної диспетчеризації (віртуальних функцій), де вибір методу здійснюється динамічно на основі фактичного типу об'єкта. Множинна диспетчеризація узагальнює динамічну диспетчеризацію для випадків з двома або більшою кількістю об'єктів.
В явному вигляді мультиметоди підтримуються «об'єктною системою типів Common Lisp’а» (CLOS).
Приклад Для кращого розуміння різниці між мультиметодами і одиночною диспетчеризацією можна продемонструвати наступний приклад. Уявимо собі гру, в якій поряд з різноманітними іншими об'єктами, присутні астероїди та космічні кораблі. Коли два яких-небудь об'єкти зіштовхуються, програма повинна вибрати певний алгоритм дій, в залежності від того що із чим зіштовхнулось.
В мові з підтримкою мультиметодів, такій, як Common Lisp, код виглядав би так: (defgeneric collide (x y))
(defmethod collide ((x asteroid) (y asteroid)) ;;астероїд зіштовхується з астероїдом )
(defmethod collide ((x asteroid) (y spaceship)) ;;астероїд зіштовхується з космічним кораблем )
(defmethod collide ((x spaceship) (y asteroid)) ;;космічний корабель зіштовхується з астероїдом )
(defmethod collide ((x spaceship) (y spaceship)) ;;космічний корабель зіштовхується з космічним кораблем )
Посилання