gpt4 book ai didi

oop - 是否使用 has-a(组合)或 is-a(继承)对汽车对象(及其部件,如引擎)进行建模?

转载 作者:行者123 更新时间:2023-12-04 22:25:54 25 4
gpt4 key购买 nike

我正在开发一个包含对象 Car 的类库。

困境是,汽车本身将是一个具有诸如注册号等字段的类,以及汽车的其他一般信息。

但是汽车有引擎、底盘等。这些对象也需要建模。它们应该是嵌入在 Car 中的类吗?如果不是,嵌入式类的使用场景是什么?

我了解到组合是“一部分”,因此您可以对单独的类进行建模并使用引擎类型,例如,在汽车的字段级别来实现这一点。但是,“聚合”是与在 ctor 中传递的类型“有”的关系,也适用(汽车“有”引擎)。

我该走哪条路?

编辑:我目前正在做作业,因此我没有回复。类库用于基于汽车的 Web 应用程序。我是一名专业开发人员(我以 .NET 为生,但作为一名初级开发人员),所以这不是一个家庭作业问题。

谢谢

最佳答案

这实际上取决于您的应用程序。

例如,您可以将轮子实现为单独的类,包含有关轮胎上的轮胎、磨损程度等信息,但如果您的应用程序甚至不关心轮子,那么整个类就是浪费代码。

我可以看到三个组合用例:

  • 拥有类变得过于复杂,应该分解。
  • 所属类具有一组属性的多个副本,这些属性可以映射到一个类中。这允许您将所有这些属性绑定(bind)在一起。
  • 包含的对象可能需要与拥有它的对象分开检查或考虑(例如,您可能希望将 Engine 对象移动到另一辆车)或可能作为一个单元被替换。

  • 总结:使用组合作为封装复杂性或消除重复的工具。如果它不能满足其中一个目的,则可能不值得为此创建一个新类(class)。

    关于oop - 是否使用 has-a(组合)或 is-a(继承)对汽车对象(及其部件,如引擎)进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1913007/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com