是否有任何工具可以扩展面向对象的代码,因此没有任何类型的共享?例如,如果我有两个继承C的类A和B,那么该工具会将类A和B调整为不再使用C.如果该工具执行此操作并且它仍然编译并生成相同的结果也会很好。我认为,如果动态检查类类型,主要的难点是调整任何条件逻辑。
我知道从机器的角度来看,这是毫无意义的,但这将是一次有趣的学术活动。
答案 0 :(得分:2)
虽然有各种重构工具,但我怀疑你的问题是否具有实际应用,因为它需要大量的上下文知识和人工干预来执行这种自动操作。
在你的例子中,A和B获得C的方法和属性是不够的,但事实上,在许多情况下,有些地方你想把A(或B)交给一个方法并让它像对待一样C.或者,您可能希望将其交给带有C的东西,但调用了A(或B)特定的行为 - 想象一个集合,它调用.DoThing()对其内部的任何对象。
你不仅需要破坏类,还要拥有各种其他重载函数以及大量冗余的代码(尤其是类型,而不仅仅是行为)。
我会说一个有趣的思想实验,或许我们应该把它放在糟糕的想法堆中。我怀疑这对可读性,可扩展性或性能有帮助。
答案 1 :(得分:1)
这个问题是使用C而不是A或B的代码很难处理:
public void workWithSomeC( C useThis ) { ... }
在我们的OO代码中,我们可以将A或B传递给该函数。如果A和B不再有任何共同点,就不能这样做。
我认为通过复制这样的代码可以使某些东西可以工作,但是悲伤是多么可怕的想法; - )