Posts tagged: Multimethoden

Visitor statt Multiple Dispatch

Vor einiger Zeit hab ich mal Multimethoden vorgestellt. Dabei hab ich auch angedeutet, dass man Multiple Dispatch über das Visitor-Pattern simulieren kann. Das hab ich jetzt mal selbst gebraucht. Da bietet sich direkt mal die Gelegenheit, das vor zu führen. Der Einfachheit halber bleibe ich bei meinem Asteroids-Beispiel.

Normalerweise gibt es beim Visitor-Pattern zwei getrennte Hierarchien: Elemente und Visitor. In unseren Fall fallen beide Hierarchien zusammen. Wir haben nur eine Hierarchie, nämlich die Hierarchie der Objekte, die kollidieren können. Im folgenden betrachten wir daraus Raumschiffe und Asteroiden.

Das Problem ist ja eigentlich, wie im oben verlinkten Blog-Post erläutert, dass der dynamische Typ des Parameters bzw. der Parameter nicht bekannt ist. Zumindest nicht direkt. Der Parameter selbst kennt natürlich seinen dynamischen Typ. Und das ist auch schon die Idee, die man braucht um Multiple Dispatch zu simulieren: Der Parameter weiß den Typ, also kann der Parameter auch gleich die ganze Arbeit machen.

Und so sieht das Ganze im Code aus:
weiter lesen »

Multimethoden oder: wie Asteroids zu SpaceBillard mutiert

Ein Feature, das ich bei den etablierten objektorientierten Programmiersprachen vermisse, sind Multimethoden, auch bekannt unter dem Namen “multiple dispatch”. Ein kurzes Beispiel soll verdeutlichen, was Multimethoden sind und was sie so interessant macht.

“Asteroids” ist manchem vielleicht ein Begriff. Es handelt sich dabei um ein Arcade-Spiel aus dem Jahre 1979 (mit diversen Klonen, Abwandlungen, Portierungen, etc.). Der Spieler steuert ein kleines Raumschiff und muss Asteroiden und gegnerischen Raumschiffen ausweichen bzw. sie durch Abschießen unschädlich machen. Wird das Raumschiff von gegerischem Feuer oder von Asteroiden getroffen, wird es zerstört. Vielleicht hat das Raumschiff noch einen Schild, aber um so Feinheiten gehts mir hier nicht. Die Frage ist: Wie implementiert man sowas?
weiter lesen »

powered by WordPress | QuickLaTeX | WordPress Themes