Double Dispatch

Anuncio
Double Dispatch
Ing. Nicolás Paez
Noviembre 2010
FIUBA
Problema
Como modelar una interacción
cuando el resultado depende del
receptor y del argumento
FIUBA
Problema
- Nodriza explota contra la estrella pero atraviesa la nube
- Destructor destruye la estrella y dismuye su velocidad
al atravesar la nube
FIUBA
Solución trivial
Nodriza >> chocar: unCuerpo
unCuerpo class = Estrella
ifTrue: [ self chocarEstrella: unCuerpo].
UnCuerpo class = Nube
ifTrue: [ self chocarNube; unCuerpo ].
FIUBA
Solución: double dispatching
Nodriza >> chocar: unCuerpo
unCuerpo chocarConNodriza: self
Nube >> chocarConNodriza: nodriza
“hacer algo”
nodriza chocarNube: self
Estrella >> chocarConNodriza: nodriza
“hacer algo”
unaNave chocarEstrella: self
FIUBA
Double Dispatching
FIUBA
Ejemplo 2
FIUBA
Ejemplo 2 (cont.)
FIUBA
¿Preguntas?
Material disponible en site de la
materia
FIUBA
Recursos
●
http://www.c2.com/cgi/wiki?DoubleDispatch
FIUBA
Descargar