2013-05-30 236 views
0

最近,我发现了一个令人费解的(对我来说)问题:比方说,我有一个类的层次结构C ... C_ n。假设至少某些类有多个(直接)子类,但没有多个父类(即没有多重继承)。我想改变层次结构的行为。我的第一个冲动是创建子类D ... D n并根据需要重写方法,但有一个问题:当调用新重写的方法时,可能需要将实际的D i作为正式的D (或之间的某个级别);这可以通过子类C1 -> D1 -> D2 ...来解决。但是,当调用未改变的方法时,任何实际的需要作为正式C ,因此我们必须直接从Ci导出每个D i。有没有优雅的或普遍接受的方式来解决这个谜题?如果是这样,有没有办法诉诸多重继承?扩展类层次结构

如果没有通用的方法来实现这一点,原始C层次结构的作者是否可以遵循某些规则来提供这种可能性?

对于那些更喜欢更实用的方法,原始层次结构在Ada中实现SOAP。我正在研究XML-RPC。从抽象的角度来看,SOAP是XML-RPC的超集,但实际的“在线”上的XML是完全不同的。原则上,可以通过丢弃一些数据类型来执行大部分工作(例如,XML-RPC有一个整数和一个浮点类型,而SOAP每个都有几个),并将其余类型转换成的例程替换为来自XML。 但是,由于上述继承问题,我最终复制了几乎整个SOAP层次结构。我已经能够正确地重用的唯一代码原来就是HTTP部分(因为它不仅仅涉及文本有效载荷,而且涉及SOAP对象)。

[编辑:删除了一个简化的假设将允许并不适用于更一般的问题的简单解决方案]

回答

2

的解决方案,因为你承担单一继承,并直接子类的关系,是刚刚创建d( 1)作为C(n)的子类,在这种情况下,所有D也将在每个C类中。

实际上,解决方案不是无故创建深层类层次结构。如果你真的进入了小型课堂,那么使用一种能够以某种形式容纳多重继承的系统。

+0

+1为快速响应,以及简单的解决方案。不幸的是,这只是简单的,因为我过于简单化了,并不认为这会引入新的解决方案。 –

+0

@AnsgarEsztermann不是。我认为这个问题实际上并不存在,我挑战你展示它出现的层次结构。 – Marcin