如何将变形连接到一个它应该在Morphic中可视化的对象?

时间:2012-10-12 11:02:09

标签: smalltalk squeak pharo morphic

假设我有Bird类和BirdMorph类。鸟类有一个位置,只要相应的鸟改变它的位置,我希望BirdMorphs改变它们在屏幕上的位置。

将Morph连接到它应该在Morphic中可视化的Object的预期方法是什么?

2 个答案:

答案 0 :(得分:4)

通常,BirdMorph会在实例变量中保存Bird,并在其step方法中更新自己的位置。

以这种方式思考:每个对象都需要“保持”在某个地方。如果没有引用它,它会自动进行垃圾回收。在Morphic中,该引用通常以World为根,每个变形都通过其容器的submorphs集合引用。

因此,您的变形保留在“域模型”上是有道理的。例如。你可能有一个物体BirdSimulation,它可以容纳所有的鸟类,还有一个屏幕上的窗口可以保持BirdSimulation。然后当你关闭窗口时,模拟对象也将消失。

如果您的程序主要是视觉效果,您可能甚至不需要单独的Bird类。相反,变形只能 “一只鸟”。这可以大大简化设计。

答案 1 :(得分:2)

恕我直言,你的第一个想法是正确的:MVC是要走的路。 将BirdMorph的引用保存到它的Bird模型似乎是最简单的方法,但是使用Observer pattern你的BirdMorph是你的Bird的“观察者”:BirdMorph在创建时将自己注册到Bird通知每个事件。每当鸟移动时,它会通知所有观察者他的移动。 所以你可以有一个Bird的多个观察者,例如一个Morph用于显示(位置和其他),一个用于记录(到网络对等体用于exmaple)等等...... 代码中较少的“硬”引用,较少的spagethi。

许多框架都是基于这种模式构建的,因为它打破了对象之间的依赖关系并简化了很多。


此外,Pharo还有一个包 Announcements: an Object Dependency Framework