1

是否有任何工具可以扩展面向对象的代码,因此不存在任何类型的共享?例如,如果我有两个继承 C 的类 A 和 B,那么该工具将调整类 A 和 B 以不再使用 C。如果该工具这样做并且它仍然编译并产生相同的结果,那也很好。我认为如果动态检查类类型,主要困难将是调整任何条件逻辑。

我知道从机器的角度来看这完全没有意义,但这将是一个有趣的学术练习。

4

2 回答 2

2

虽然有各种重构工具,但我怀疑您的问题是否具有实际应用,因为它需要大量的上下文知识和人工干预才能执行这种自动操作。

在您的示例中,A 和 B 获得 C 的方法和属性不仅足够,而且在许多情况下,有些地方您希望将 A(或 B)交给方法并将其视为 C。或者,您可能希望将它交给带有 C 的东西,但调用了 A(或 B)的特定行为 --- 想象一个在其中的任何对象上调用 .DoThing() 的集合。

您不仅要拆分类,还要拥有所有其他重载函数以及大量看起来冗余的代码(尤其是对于类型,而不仅仅是行为)。

我想说,虽然是一个有趣的思想实验,但也许我们应该把它放在坏主意堆里。我怀疑它是否有助于提高可读性、可扩展性或性能。

于 2010-10-01T20:38:47.107 回答
1

问题在于使用 C 而不是 A 或 B 的代码很难处理:

public void workWithSomeC( C useThis ) {  ... }

在我们的 OO 代码中,我们可以将 A 或 B 传递给该函数。如果 A 和 B 不再有任何共同点,就不能这样做。

我认为通过复制这样的代码可以使某些东西起作用,但是真是个可怕的主意;-)

于 2010-10-01T20:39:17.507 回答