OOP:如果组件在对象被销毁时被销毁,但该组件可以在不同的对象中使用,这是合成吗?

OOP:如果组件在对象被销毁时被销毁,但该组件可以在不同的对象中使用,这是合成吗?,oop,Oop,假设一个类Car总是创建相同的对象,不同的是Car对象内部可以有不同的电机 这是因为当汽车物体被破坏时,它的发动机也被破坏了吗 或者是因为同一类型的电机可能位于不同的汽车对象内部 我想我困惑的地方在于决定某个类是组合类还是聚合类。如果您的决策基于组件对象被销毁时是否被销毁,那么什么是组件?组件是专门为汽车创建的电机的具体实例,还是一般的电机类?在第一种情况下,我想说它是组合,在第二种情况下,我想说它是聚合 很抱歉,我不能发布代码详细信息,我不允许发布。我只想得到一个抽象的答案。我这样想: 存在

假设一个类Car总是创建相同的对象,不同的是Car对象内部可以有不同的电机

这是因为当汽车物体被破坏时,它的发动机也被破坏了吗

或者是因为同一类型的电机可能位于不同的汽车对象内部

我想我困惑的地方在于决定某个类是组合类还是聚合类。如果您的决策基于组件对象被销毁时是否被销毁,那么什么是组件?组件是专门为汽车创建的电机的具体实例,还是一般的电机类?在第一种情况下,我想说它是组合,在第二种情况下,我想说它是聚合


很抱歉,我不能发布代码详细信息,我不允许发布。我只想得到一个抽象的答案。

我这样想:

  • 存在依赖(某事物的存在依赖于另一事物的存在)
  • 使用“使用”一词表示聚合,使用“拥有”一词表示合成
聚合示例:

  • 乐队使用人。如果你摧毁了乐队,它不一定“摧毁”了人们。这意味着人的存在并不取决于乐队的存在,因为你可以用同样的人创建另一个乐队
组成示例:

  • 公司拥有账户。如果你摧毁了公司,账户也会被摧毁。这意味着账户的存在取决于公司的存在,因为你不能拥有一个不存在的公司账户,也不能在另一家公司使用这些账户
所以汽车和汽车的关系可以是两者,这取决于你想如何设计你的代码,但我认为它是一种聚合,因为你可以在两辆不同的汽车中使用相同的汽车实例,或者你可以改变汽车的发动机

设计代码时,请考虑在何处创建Motor实例的最佳位置:

  • 如果在类Car中创建Motor实例,则Motor实例的存在将取决于创建它的Car实例的存在。(组成)
在Python中:

class Motor:
   ...

class Car:
def __init__(self):
   self.motor = Motor()

my_car = Car()
class Motor:
   ...

class Car:
def __init__(self, motor):
   self.motor = motor

fast_motor = Motor()
my_car = Car(fast_motor)
  • 如果在类Car之外创建Motor实例,则Motor实例的存在将不取决于传递给它的Car实例的存在。(汇总)
在Python中:

class Motor:
   ...

class Car:
def __init__(self):
   self.motor = Motor()

my_car = Car()
class Motor:
   ...

class Car:
def __init__(self, motor):
   self.motor = motor

fast_motor = Motor()
my_car = Car(fast_motor)

这回答了你的问题吗@部分是jaco0646,是的。但我想更深入地解释一下软件中的对象和现实世界中的对象是如何进行比较的。“你可以在两辆不同的车上使用相同的发动机实例”:这正是我试图理解的细微差别。你说一个马达实例可以用在两辆不同的车上,但在现实世界中,不可能在两辆车上同时使用同一个马达对象,对吗?所以,当我们想到合成或聚合时,我们不能像在现实世界中那样真正地考虑对象,而应该像在我们的代码中那样考虑对象?嗯,现在你让我想到了哈哈。在现实世界中,我们可以将一个电机转移到另一辆汽车上,但我们不能同时在两辆不同的汽车上安装相同的电机。这是一个非常棘手的关系,因为合成和聚合都是有效的,所以我认为这一切都取决于你正在设计的应用程序,基本上考虑到电机的存在,它是否取决于汽车?