类图:我可以分享作文吗?

时间:2014-08-10 10:37:31

标签: c++ uml

让我们说我使用mvc模式在c ++中制作一个简单的游戏,并拥有一个世界对象,其生命周期由控制器类管理。这感觉就像一个组合,但如果游戏逻辑类需要永久引用同一个世界,或者这个世界的环境(由世界拥有)需要引用它,那么这些只是常规关联或者我应该制作所有共享聚合?

令我困惑的是,作文被定义为“未共享”。但这是否意味着不与任何其他关系共享,或者只是不与其他聚合和组合共享。此外,共享聚合通常如何在c ++中实现?我的意思是,有人必须管理一生。现在我们可以使用shared_ptr,但没有它们是刚刚在main中创建并从那里传递(和destroyd)的所有内容?这让我想知道;如果只对模型部件进行建模,那么在类图中对控制器进行建模是不对的吗?

作为我主要问题的另一个例子(复合允许与uml类图中的任何其他类型的关系共享)例如汽车上的轮子可以与其他物体共用吗?如果引擎需要永久引用,应该如何建模?一个简单的联想?

3 个答案:

答案 0 :(得分:1)

是的,这是可能的,其中一个最好的例子是游泳池(结构,而不是带水的那个......)。在池中,池管理器与所有元素具有组合关系。池管理器根据需要管理元素到“用户”的分配。用户现在正在共享这些agregate元素。

重要的是要注意池管理器是池元素的所有者,因此负责它们的创建和销毁(根据需要将池维持在规定的限制内)并需要跟踪它们的分配。池元素也可以只有一个所有者。池的用户只能在此场景中借用和返回元素。

在您的场景中,我怀疑您可以使用聚合或仅使用简单关联,请记住对象的所有者(具有合成的对象)可以将其销毁...

答案 1 :(得分:0)

把你的车作为问题的一部分,如果你的意思是在同一张照片中同时使用白色和黑色钻石是合法的......

enter image description here

..然后我认为这是完全有效和可行的。

根据我的理解,黑钻只代表“所有权”,说谁负责释放内存并将调用析构函数链接并使其他弱指针无效(那些来自白色钻石和没有钻石的线条)

另一张同时存在两颗钻石的图片可以在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类图中的任何其他类型的关系共享")表达不是很好。您可能是指组件而不是复合材料。实际上,作为汽车的一部分/组件的车轮不能与其他车辆(同时)共享,而作为公司或团队的一部分的员工可以与其他几个公司或团队共享。

但这种不可分享性仅涉及构成关系中涉及的两个类别(汽车和轮子,公司和员工)。并且它不会限制组件对象参与实例化其他关联的其他关系。