【发布时间】:2011-01-31 08:44:40
【问题描述】:
我的模拟模型包含表面上的代理。代理由class Agent 表示,它们的位置由class Point 表示,表面本身由class Surface 表示。每个点实际上只是一对数字。
要模拟代理的运动,我需要知道他在哪个表面上(例如,在圆环上,他永远不会碰到陆地的尽头,但在圆柱体上,他会。)
我的问题是我是否应该向class Point 添加对Surface 对象的引用作为实例属性。
如果我这样做,class Point 会变得更加复杂,并且效率会受到影响(而不是处理成对的数字,我将处理成对的数字加上一个引用)。这尤其令人讨厌,因为在单个程序运行中只实例化了一个 class Surface 实例。
如果我不这样做,我将无法为 class Agent 提供 move 方法。相反,我必须从一个知道表面代理和单个代理的外部类对代理的运动进行建模。这种方法在逻辑上似乎不太吸引人。
【问题讨论】:
-
你不能在
Agent中存储有关表面的信息吗?这对我来说似乎是最自然的方法...... -
实际上我误读了帖子并认为这就是他的意思。添加到 Point 似乎很奇怪...
-
是的,添加到代理是完全没问题的。选择真的是在这里保留冗余信息是否可以。
-
嗯,我认为当你有许多这样的相互关联的类时,这种冗余是不可避免的。但这只是一个参考——它们很便宜。要问的问题是,信息属于哪里?由于信息对于给
Agent一个移动方法是必要的,所以它属于Agent。
标签: python oop software-design