Мультиметод — Вікіпедія

Мультиме́тод (англ. multimethod) або множи́нна диспетчериза́ція (англ. multiple dispatch) — механізм, який дозволяє вибрати одну з декількох функцій в залежності від динамічних типів або значень аргументів. Є розширенням одиночної диспетчеризації (віртуальних функцій), де вибір методу здійснюється динамічно на основі фактичного типу об'єкта. Множинна диспетчеризація узагальнює динамічну диспетчеризацію для випадків з двома або більшою кількістю об'єктів.

В явному вигляді мультиметоди підтримуються «об'єктною системою типів 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))   ;;космічний корабель зіштовхується з космічним кораблем   ) 


Посилання

[ред. | ред. код]
  • Bjarne Stroustrup; Yuriy Solodkyy; Peter Pirkelbauer (2007). Open Multi-Methods for C++ (PDF). ACM 6th International Conference on Generative Programming and Component Engineering. Архів оригіналу (PDF) за 29 квітня 2021. Процитовано 2 серпня 2015.