在知道派生类的基类中创建一个方法是一种好的 OO 编程实践吗?
例如,考虑 A、B、C、D 类,其中 B 类从 A 继承,C 和 D 类从 B 继承。现在考虑一个方法,该方法对从 A 继承的所有类(包括 A 本身)通用,并且需要了解 B 类以便工作(例如:A/B/C/ 或 D 类对象与对象 B 的相对距离)。由于此方法对所有类(A、B、C、D)都是通用的,因此应该将它放在类 A 中听起来是合乎逻辑的。但是在这种情况下,我们将在基类中有一个方法“知道”派生类班级。
例子:
Class A {
# simple coordinate system
distance_to_complex_coordinate_system (B complexCoord) {
return complexCoord.distance_to_simple_coord_system(self)
}
}
Class B extends A {
# complex coordinate system
distance_to_simple_coordinate_system (simpleCoord) {
# do calculations
}
}
Class C extends A {}
Class D extends A {}
...
上面的例子distance_to_complex_coordinate_system
是所有简单坐标系(即 A、B、C 和 D)都应该具有的方法,并且它们的实现完全相同。它不是抽象类,因此不应被覆盖。
从 OO 的角度来看,这是否有意义?如果确实如此,这真的是一种很好的编程实践吗?如果没有,任何有关如何避免这种情况的建议将不胜感激。
在我看来,这不是一个好习惯,但我找不到一种避免它的好方法,而无需不必要地重复代码。顺便说一句,虽然可能并不重要——我正在使用 Perl。