首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >组合和聚合的示例代码?

组合和聚合的示例代码?
EN

Stack Overflow用户
提问于 2013-05-28 22:07:04
回答 1查看 231关注 0票数 0

我是面向对象程序设计的新手--有很多关于组合和聚合的文章,但是我找不到真正的代码示例,所以我写了一个简单的例子:

代码语言:javascript
运行
复制
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)

以下是做出这些决定的原因:

  1. 在这种情况下,当其所有者 car实例不再存在时,引擎实例将不可用。所以发动机跟随着汽车的生命周期。
  2. 发动机是汽车的一部分,所以汽车拥有的发动机。
  3. 当汽车实例不再存在时,乘客实例仍然可以使用,所以乘客有自己的生命周期,

如果我在这方面有什么问题,请指出,我的代码是好的设计吗?

更新:澄清一下,我认为汽车->引擎是合成的,汽车->乘客是聚合的。

EN

回答 1

Stack Overflow用户

发布于 2020-03-10 17:01:49

组合

当两个实体之间存在组合时,组合对象不能在没有其他实体的情况下存在。组合是强关联,而聚集是弱关联。

Tree -组合.叶子是树的一部分。没有树,叶子就不可能存在。

聚合

当两个实体之间存在组合时,组合对象可以在没有其他实体的情况下存在。

aggregation. - Engine is因为如果汽车停止工作,并且我们从我们的数据库中删除它,引擎将不会被删除,因为它可能仍然有功能。我们可以在另一辆车里用这个引擎。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16802285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档