哪些对象拥有该方法?从离散数学翻译
Which objects own the method? Translating from discrete math
所以,假设我在离散数学领域工作并且我有一些函数
f: A x B x C -> D
.
有了这个函数,我可以进行类似 f(a,b,c) = d
的计算。 (我在这里故意含糊不清)。
现在假设我想用一些现代 OO 编程语言显式地实现这个计算。所以我用 b
和 c
初始化了一个名为 a
的 class ClassA
等变量。然后呢?哪个对象应该 拥有 计算?或者它可以是一个初始值设定项。它可以是静态函数吗?
我可以:
d = a.f_1(b,c)
,
d = b.f_2(a,c)
,
d = c.f_3(a,b)
,
d = new ObjD(a,b,c)
,
d = ZStatic.f_4(a,b,c)
所有这些都是合理的选择,我不能吗?
鉴于这种情况,对称性是否应该要求我实施所有这些选项?
我宁愿完全避免构造函数方法,但除此之外,我不知道除了基本上任意信息的假设之外还能取得什么进展。
那么,什么对象应该拥有函数 $f$(如果有的话)?
要给出最佳答案,了解您使用的变量类型很重要。
oop 中一个非常重要的指标是实现高内聚。内聚是模块的元素属于在一起的程度。如果您的变量 a、b 和 c 在特定上下文中属于一起,那么最好将它们放在一个 class 中。如果它们在一个 class 中,您不必担心,哪个 class 应该拥有计算(您的第四个解决方案)。
你最后的建议,用静态函数也是可以的。这种方法经常用于不同语言的数学库中(例如 Java: Math class)
所以,假设我在离散数学领域工作并且我有一些函数
f: A x B x C -> D
.
有了这个函数,我可以进行类似 f(a,b,c) = d
的计算。 (我在这里故意含糊不清)。
现在假设我想用一些现代 OO 编程语言显式地实现这个计算。所以我用 b
和 c
初始化了一个名为 a
的 class ClassA
等变量。然后呢?哪个对象应该 拥有 计算?或者它可以是一个初始值设定项。它可以是静态函数吗?
我可以:
d = a.f_1(b,c)
,d = b.f_2(a,c)
,d = c.f_3(a,b)
,d = new ObjD(a,b,c)
,d = ZStatic.f_4(a,b,c)
所有这些都是合理的选择,我不能吗?
鉴于这种情况,对称性是否应该要求我实施所有这些选项?
我宁愿完全避免构造函数方法,但除此之外,我不知道除了基本上任意信息的假设之外还能取得什么进展。
那么,什么对象应该拥有函数 $f$(如果有的话)?
要给出最佳答案,了解您使用的变量类型很重要。
oop 中一个非常重要的指标是实现高内聚。内聚是模块的元素属于在一起的程度。如果您的变量 a、b 和 c 在特定上下文中属于一起,那么最好将它们放在一个 class 中。如果它们在一个 class 中,您不必担心,哪个 class 应该拥有计算(您的第四个解决方案)。
你最后的建议,用静态函数也是可以的。这种方法经常用于不同语言的数学库中(例如 Java: Math class)