我想从 stackoverflow 社区寻求这个答案,即我们在设计类时如何决定进行组合或泛化。
Kunal
问问题
3032 次
3 回答
2
问问自己这两个类之间的关系是“is-a”还是“has-a”类型
于 2009-03-02T12:23:53.460 回答
2
当您有一个包含一组其他对象的类时,您可以使用组合,无论数量。当您的类与一组对象共享公共属性但也可以具有其他不同的属性或行为时,请使用泛化。
例如,汽车具有引擎、车轮等组件。这是一种组合关系。但是 Vehicle 是 Car 的概括,因为您可以拥有具有不同属性的其他类型的 Vehicle,例如 Truck。Car 和 Truck 是 Vehicle 的派生类。
于 2009-03-02T15:32:43.413 回答
1
如果我们谈论公共继承 (IS_A),关键是要了解 Liskov 替换原则以及它对继承的含义。特别是,这意味着 IS-A 关系依赖于上下文,这是公共继承中经常被忽视的一个方面。
要使用上面的示例,Car 和 Truck 类只能从 Vehicle 派生,前提是它们可以在任何为使用 Vehicle 类而编写的程序中替换 Vehicle 类而不影响调用代码。
如果我们谈论的是实现继承(也就是 C++ 中的私有继承),您应该更喜欢组合而不是继承作为重用机制。
于 2009-04-27T20:25:40.933 回答