当前位置: 首页 > 知识库问答 >
问题:

UML中类图的关系是否正确?

卫高谊
2023-03-14

图像显示了仓库的物流。非常非常简单。它的概念是什么:有单据:< code > receiving lubril ,< code > dispatchinglirl ,< code>ReplacementOrder。

它们与主要类交互:仓库交易对手项目

以及< code>Register类:< code > ItemRemainsInWarehouse 。原来,文件是操作、接收、发送等的确认。< code>Register仅存储关于剩余商品数量的信息。

如果你错过了这个方案的很多问题,比如:缺乏泛化、getter和setter以及一堆其他的东西。

谁能判断:类之间的关系,以及到处都是具体的聚合,是否放置正确,或者我们是否可以更详细地考虑关联?

共有2个答案

南宫松
2023-03-14

聚合是恶!

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

none:指示属性没有聚合语义。[听到了,听到了!

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

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

复合聚合是一种强聚合形式,它要求一个部件对象一次最多包含在一个复合对象中。如果复合对象被删除,其所有作为对象的部件实例也会随之删除。

现在,最后一句清楚地指出了应该在哪里使用composite(!)聚合:在安全相关的应用中。删除数据库中的人员记录时,还需要删除所有相关的实体。经常使用的例子是汽车由发动机、轮胎等组成。不太合适。当你“删除”汽车时,轮胎不会消失。因为你不能删除它。更糟糕的是使用共享组合,因为它没有每个定义的定义(原文如此!).

那你该怎么办?使用乘数!这是人们通常想要展示的。有0..n1等元素与另一侧的类相关。最终,您可以通过使用角色来明确这些角色。

如果您考虑<code>DispatchingWaybill</code>和<code>ReceivingWaybill>,看起来它们是关联类。使用正确的乘法(1-*/*-1),您可以这样做。(编辑:注意关联末尾的小点,它们告诉对面的类有一个以角色命名的属性。)

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

丌官炎彬
2023-03-14

很难(也许不可能)用提供的解释来纠正整个模型。我提出了一些改进。

>

  • 你应该把你的关系的多重性。它们太重要了。在某些关系中,你有1个(替换订单仓库),你的一些关系可能是*(项目接收WayBill

    您将聚合放在类之间,我们知道聚合是关联类型。您也可以放置关联。您可以找到许多类似的问题和答案,这些问题和答案解释了关联和聚合(以及组合)之间的差异。请参阅问题 1、问题 2 和问题 3。但我推荐这个答案。

    我认为,聚合和关联之间没有非常显著的区别。请看这个问题中我的例子。

    罗伯特·C·马丁说(见这里):

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

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


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

  •  类似资料:
    • 我对我要在类图中使用哪些关系有些怀疑。我知道我可以使用一般关联(使用关联行)或更多特定的关联,如聚合或组合。我已经知道聚合和组合的定义,但我的问题是: 何时需要使用一般关联,何时需要使用更具体的关联 有什么规则吗

    • http://i.imgur.com/8fwhsai.jpg

    • 我试图为我的项目管理软件画一个类图,描述如下。它包含以下类别: 项目 - 软件 - 管理项目的人/她 - 从事项目工作的人员 以及以下关系/关联: > < li> 一个项目经理可能要管理多个项目,而一个项目只能由一个项目经理管理 项目经理可以将员工分配给他/她管理的项目 对于上面的关联,我创建了这个类图: < li >如何对第一个关联(在< code>ProjectManager和< code>P

    • 在UML图中,这些场景之间的关系是什么? <code>1.取2个类,类A和类B。类A中有一些方法,例如:public function(ArrayList <代码> 2。取两个类,A类和b类。A类中有一些方法,比如:公共函数(ArrayList

    • 我目前正在研究UML类图,对一些事情有点困惑。所以我有我的类,继承和使用接口,但我把不继承或使用接口的类放在哪里?我是不是像下图那样把它们放在一边?

    • 那么,如何在解决方案域中解决此问题呢?