Interfaces
Monkey Forums/Monkey Programming/Interfaces
| ||
Looking over the Monkey docs, I see that it supports use of interfaces. I understand, basically, what they are. But what are some interesting and handy uses for them? |
| ||
when the extends system isnt flexible enough, I have only one interface in my game cos I wanted villages and people to take turns so i made an interface called 'turn_taker' I couldnt get village and person to extend turn_taker easily. village extended world_map_object and person extended iso_map_object so it would have been diffiuclt to make them both extend turn_taker. A tree is also a world_map_object and I didnt want a tree to take a turn Some programmers dont use extends at all and only use interfaces, this is silly because for example a GUI system would repeat a lot of code if it was programmed only with interfaces |
| ||
One example is callbacks: Say you want to want to know when some object has finished it's action. Interface EventHandler Method OnEvent:Void (id:String) End Class Action Field counter:Int Field listener:EventHandler Method Update:Void() counter += 1 If counter > 99 Stop() End End Method Stop:Void() If listener listener.OnEvent ("Counter Finished") End End End Class Game Implements EventHandler Field Actions:List<Action> = New List<Action> Method Update:Void() For Local a:Action = Eachin Actions a.Update() End End Method OnEvent:Void (id:String) Select id Case "Counter Finished" 'Now do something Default End End End The game listens when an action has finished and when one does, the action notifies the game through the OnEvent Method. Example: Local game:Game = New Game Local action:Action = New action game.Actions.AddLast (action) action.listener = Game |
| ||
Is that the replacement for function pointers? Are there no function pointers in Monkey? |
| ||
correct |
| ||
@zoqfotpik: Is that the replacement for function pointers? Are there no function pointers in Monkey? It's a way of (as Mark would put it) "kludging" function pointers, but that's not the sole purpose of interfaces. |
| ||
They are a limited form of multiple inheritance that is harder to go wrong with. Like in slenkar's example. |