UML中类图的正确关系是什么?

时间:2018-01-15 18:45:04

标签: oop uml aggregation modeling staruml

图像显示仓库的物流。非常简单。它的概念是什么:有文件:ReceivingWayBillDispatchingWaybillReplacementOrder

他们与主要类别互动:WarehouseCounterpartyItem

Register班级:ItemRemainsInWarehouse。事实证明,该文件是对操作,接收,发送等的确认。 Register只存储有关剩余商品数量的信息。

如果你错过了这个方案的很多问题,例如:缺乏泛化,吸气剂和制定者以及其他所有问题。

谁可以告诉:类之间的关系,到处都有具体的聚合,是否正确放置,还是我们能以某种方式更详细地考虑关联?

class diagram

2 个答案:

答案 0 :(得分:0)

聚合是邪恶的

阅读有关他们引入的两种变体的UML规范(第110页):

  

:表示该属性没有聚合语义。 [听,听!]

     

shared :表示该属性具有共享聚合语义。共享聚合的精确语义因应用领域和建模者而异。

     

复合:表示属性是复合聚合的,即复合对象负责组合对象的存在和存储(参见11.2.3中部分的定义)。

     

复合聚合是一种强大的聚合形式,需要一次将一个零件对象包含在最多一个复合对象中。如果删除了复合对象,则会删除作为对象的所有零件实例。

现在,最后一句清楚地表明了在安全相关的应用程序中应该使用复合(!)聚合的位置。删除数据库中的人员记录时,还需要删除所有相关实体。通常用汽车由电机,轮胎等组成的例子并不适合。当你“删除”汽车时,轮胎不会消失。只是因为你无法删除它。更糟糕的是使用共享复合,因为它没有每个定义的定义(原文如此!)。

那你该怎么办?使用多重性!这就是人们通常想要展示的东西。有0..n1等元素与另一方的班级相关。最后,您可以使用角色将其命名为显式。

如果您考虑DispatchingWaybillReceivingWaybill,它们看起来就像是关联类。使用正确的多重性(1-* / *-1),您可以这样做。 (编辑:注意关联结尾的小点,告诉相反的类有一个以角色命名的属性。)

enter image description here

或者用虚线附加到它们当前连接到的类之间的关联。

enter image description here

答案 1 :(得分:0)

用提供的解释纠正整个模型是如此困难(可能是不可能的)。我做了一些改进。

  1. 您应该将多重性与您建立关系。它们非常重要。在某种关系中,您有1(ReplacementOrderWarehouse),并且您的一些关系可能是*(ItemReceivingWayBill

  2. 您将聚合放在您的类之间,我们知道聚合是关联类型。你也可以放置关联。您可以找到许多类似的问题和答案,解释关联和聚合(和组合)之间的差异。见Question 1Question 2Question 3。但我建议this answer

  3. 我认为聚合关联之间存在 NOT 显着差异。请参阅this question中的示例。

    Robert C. Martin说(见here):

      

    关联表示一个实例向另一个实例发送消息的能力。

         

    聚合是典型的整体/部分关系。这与实例异常的关联完全相同   不能有循环聚合关系(即一部分不能   包含它的全部。)


    因此:您的一些关系正是一种聚合。 (Item与其他类之间的关系)。您的Counterparty没有良好的API定义。您的其他关系是关于使用Warehouse类。我认为(只是猜测)其他类只使用Warehouse类服务(公共方法)。在这种情况下,它们可以是关联。否则,如果他们需要Warehouse的实例作为其一部分,则它们是聚合。

相关问题