Реферат: Generaliting Dispatching in Distributed Object System
ник и аргументы. Hапример:
(aShape 'draw aDevice)
В этом случае конкретный исполняемый код зависит не только от
aShape, но и от aDevice. Здесь вместо тупого выстраивания кон-
струкции типа case целесообразно воспользоваться техникой кратно-
го dispatching. В классической модели единственно определяющим
аргументом является сообщение; соответственно, разумно объеди-
нить сообщение draw, посылаемое aDevice с различными вариантами
aShape, например, drawRectangle. Это решение делает проблему вы-
бора скрытой от диспетчера.
Соответствующий механизм называется родовыми функциями. Это
группа методов, обеспечивающих сходную функциональность над мно-
жеством классов. draw есть родовая функция, описываемая как
(defgeneric draw (aShape, aDevice))
(defmethod draw (aShape Rectangle) (aDevice X-Window) ... )
...
В DOS для реализации такого подхода требуется описание спе-
циального объекта - родовой функции; ее задача заключается в "ре-
гистрации" соответствующих частных методов; получив заклинание,
диспетчер родовой функции направляет его тому или иному методу в
зависимости от параметров. Hа языке DOS это описывается так:
(DEFINE draw
(GENERIC-FUNCTION (shape device))
(ADD-METHOD draw (shape device)
(AND (is-rectangle shape) (is-X-Window device))
...
)
...
Так как мы не вправе пользоваться никакой предопределенной инфор-