OOP设计:在哪里放置特定于对象的“比较”方法?

时间:2010-11-01 21:37:35

标签: oop class-design static-methods ooad class-method

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

这个逻辑应该放在哪里?

  1. 在对象上作为一种方法?喜欢:instance.approximately_equal(other)
  2. 在对象的类上作为类/静态方法? class.approximately_equal(a,b)
  3. 在集合对象上作为方法? collection.approximately_equal(a,b)
  4. 对此有什么正确的OO设计?

    (我问,因为虽然#1似乎是正确的解决方案,但我永远不会问一个实例是否与另一个实例近似等同。只有当“某些对象组”彼此相等时才会出现。我在想......)

    由于

3 个答案:

答案 0 :(得分:1)

我会使用选项1(实例方法),因为这样可以优化派生类中的比较逻辑(如果需要)。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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