我是OOP设计的新手,有很多关于组合与聚合的文章,但我找不到真正的代码示例,所以我写了一个简单的:
class Car
attr_reader :model, :valve
attr_writer :passenger
def initialize(model, valve)
@model = model
@engine = Engine.new(valve)
end
def run
puts "wowowowo"
end
end
class Engine
def initialize(valve)
@valve = valve
end
end
class Passenger
def initialize(name)
@name = name
end
end
p = Passenger.new("Foo")
car = Car.new("9-3 convertible", 4)
car.passenger(p)
以下是决定的原因:
对于这种情况,当所有者汽车实例不再存在时,引擎实例将无法使用。因此引擎遵循汽车生命周期。
引擎是汽车的一部分,所以Car 拥有引擎。
当汽车实例不再存在时,乘客实例仍然可用,因此乘客拥有自己的生命周期,
请指出我是否有任何不妥之处,我的代码是否设计良好?
更新:为了澄清,我认为Car - >发动机是组合物,Car - >乘客是聚合
答案 0 :(得分:0)
组成
当两个实体之间存在合成时,没有另一个实体就不能存在组成对象 。 组成是强关联,而聚集是弱关联。
树 - 叶 是 组成 。叶子是树的 的一部分。没有树就没有叶子。
汇总
当两个实体之间存在合成时,组成的对象可以存在而没有另一个实体。
汽车 - 引擎 是 聚合 。因为如果汽车停止工作,并且我们从数据库中将其删除,则不会删除引擎,因为它可能仍在运行。我们可以在另一辆车内使用该发动机。