1

我有一些来自存储在测试集合对象中的一系列测试运行的测量对象实例。我还有一些逻辑可以比较两个测试结果对象实例并告诉我它们是否“足够接近”。

这个逻辑应该放在哪里?

  1. 把对象当作方法?像:instance.approximately_equal(other)
  2. 在对象的类上作为类/静态方法? class.approximately_equal(a,b)
  3. 把集合对象当作方法? collection.approximately_equal(a,b)

什么是正确的面向对象设计?

(我问,因为虽然#1 似乎是正确的解决方案,但我永远不会问某个实例是否近似_等于另一个实例。只有当“某些对象组”彼此相等时。这让我思考。 ..)

谢谢

4

3 回答 3

1

我会使用选项 1(实例方法),因为这使您能够改进派生类中的比较逻辑(如果需要)。

于 2010-11-01T21:40:02.267 回答
1

我读过的面向对象设计书籍建议将跨类功能放入服务提供者对象中。这将解耦这两个对象并降低复杂性,但如果您的项目很小,则可能会过大。

于 2010-11-01T21:41:34.277 回答
0

我发现#3 是最不显眼的并且导致代码不那么臃肿,因为它往往会迫使您使这些方法尽可能灵活/可重用。例如,在 C++ 中,您可能只使用运算符重载来处理它;如果您有一个实用程序类(或者,如果您计划扩展本机数据类型),则最终效果是相同的,只是呈现方式不同。

于 2010-11-01T21:44:26.250 回答