这更像是一个主观问题,所以我将抢先将其标记为社区 wiki。
基本上,我发现在我的大部分代码中,有很多类,其中很多是相互使用的,但很少有直接相互关联的。回首我的大学时光,想起传统的 class Cat : Animal
类型示例,你有巨大的继承树,但我在我的代码中没有看到这些。我的类图看起来像巨大的蜘蛛网,不像漂亮的树。
我觉得我在逻辑上分离信息方面做得很好,最近我在通过 DI/IoC 技术隔离类之间的依赖关系方面做得很好,但我担心我可能会遗漏一些东西。我确实倾向于在接口(interface)中聚集行为,但我根本不子类化。
我可以根据 class Dog : Animal
等传统示例轻松理解子类化。或 class Employee : Person
,但我根本没有任何明显的事情要处理。事情很少像 class Label : Control
那样清晰。 .但是当涉及到在我的代码中将真实实体建模为层次结构时,我不知道从哪里开始。
所以,我想我的问题可以归结为:
最佳答案
继承应始终表示“is-a”关系。如果 A 从 B 派生,您应该能够说“A is a B”。如果不是,则更喜欢组合。没有必要时不子类化是完全可以的。
例如,说 FileOpenDialog
"is"Window
有道理,但是说 Engine
"is"Car
是胡说八道。在这种情况下,Engine
的实例在 Car
内instance 更合适(可以说 Car
"is-implemented-in-terms-of"Engine
)。
有关继承的详细讨论,请参阅 Part 1和 Part 2 gotw.ca 上的“继承的使用和滥用”。
关于oop - 我应该使用继承吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3311964/