让我们说我使用mvc模式在c ++中制作一个简单的游戏,并拥有一个世界对象,其生命周期由控制器类管理。这感觉就像一个组合,但如果游戏逻辑类需要永久引用同一个世界,或者这个世界的环境(由世界拥有)需要引用它,那么这些只是常规关联或者我应该制作所有共享聚合?
令我困惑的是,作文被定义为“未共享”。但这是否意味着不与任何其他关系共享,或者只是不与其他聚合和组合共享。此外,共享聚合通常如何在c ++中实现?我的意思是,有人必须管理一生。现在我们可以使用shared_ptr,但没有它们是刚刚在main中创建并从那里传递(和destroyd)的所有内容?这让我想知道;如果只对模型部件进行建模,那么在类图中对控制器进行建模是不对的吗?
作为我主要问题的另一个例子(复合允许与uml类图中的任何其他类型的关系共享)例如汽车上的轮子可以与其他物体共用吗?如果引擎需要永久引用,应该如何建模?一个简单的联想?
答案 0 :(得分:1)
是的,这是可能的,其中一个最好的例子是游泳池(结构,而不是带水的那个......)。在池中,池管理器与所有元素具有组合关系。池管理器根据需要管理元素到“用户”的分配。用户现在正在共享这些agregate元素。
重要的是要注意池管理器是池元素的所有者,因此负责它们的创建和销毁(根据需要将池维持在规定的限制内)并需要跟踪它们的分配。池元素也可以只有一个所有者。池的用户只能在此场景中借用和返回元素。
在您的场景中,我怀疑您可以使用聚合或仅使用简单关联,请记住对象的所有者(具有合成的对象)可以将其销毁...
答案 1 :(得分:0)
把你的车作为问题的一部分,如果你的意思是在同一张照片中同时使用白色和黑色钻石是合法的......
..然后我认为这是完全有效和可行的。
根据我的理解,黑钻只代表“所有权”,说谁负责释放内存并将调用析构函数链接并使其他弱指针无效(那些来自白色钻石和没有钻石的线条)
另一张同时存在两颗钻石的图片可以在Kirill Fakhroutdinov的网站上找到。
编辑:@gwag评论之后
http://www.uml-diagrams.org/library-domain-uml-class-diagram-example.html(参见 Library
类)
.. http://www.uml-diagrams.org/dicom-real-world-uml-class-diagram-example.html(请参阅Visit
班级)
答案 2 :(得分:-2)
你的主要问题("复合允许与uml类图中的任何其他类型的关系共享")表达不是很好。您可能是指组件而不是复合材料。实际上,作为汽车的一部分/组件的车轮不能与其他车辆(同时)共享,而作为公司或团队的一部分的员工可以与其他几个公司或团队共享。
但这种不可分享性仅涉及构成关系中涉及的两个类别(汽车和轮子,公司和员工)。并且它不会限制组件对象参与实例化其他关联的其他关系。