Мультиметод

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Мультиме́тод (англ. 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.