2017-02-22 52 views
1

在考虑组合时的UML图中。我们是否应该以逻辑或实现的方式来使用它。两个条款的示例:UML中的组合

  • 实施 - 机场将包含对该国家的引用。换句话说,一个国家是机场的一部分。
  • 逻辑 - 一个国家可以有零个或多个机场。换句话说,一个机场是该国的一部分。

UML example diagram

从图的上方,这种情况下,示出的组合物,正确使用? 注意:如果这两种情况都不好,请建议其他方式来显示国家和机场之间的关系。

+0

这不是'1:1',除非每个国家都有一个机场。这是'*'国家机场。我猜想钻石应该在关系的“机场”一侧(但不会发誓)。 – khelwood

+0

一个'<>'是一个数据类型,而不是一个刻板的类(尽管它们看起来相同)。从这个意义上讲,你不能编写一个'<>'的类。这意味着这两个图都是错误的。第二名甚至比第一名更“低调”。 –

回答

2

我认为这是而不是在强烈的“UML意义”这个词的组成。

wikipedia

复合和部件之间的关系是一个强烈的“具有”的关系,作为复合对象采用该组件的所有权。这意味着复合材料负责组件的创建和销毁。

机场不是创建国家(在IT意义上,“国家”对象也不负责提供/创建“机场”对象)。

从这个意义上说,你正在寻找一个协会在这里;我认为第一个更合适(以“一般”的方式说话)。但核心方面是:您的型号必须明确您的域的具体要求。换句话说:两种解决方案都是有效的;它非常依赖于选择哪个环境。换句话说:你选择一个能够帮助你解决问题的人!

+0

我将改变只是简单的关联,就是这样。 –

+0

枚举永远不是组成部分的方向!这是(几乎)永远的依赖(其他人依赖于它)。 –

0

这将取决于您尝试构建的最终模型。

如果你的模型包含国家作为一流的对象或实体,那么显然一个国家包含机场。如果国家是机场属性(更适当地说是机场位置的一个属性),则将其模型化。

除非你有充分的理由将国家建模为实体,否则我会选择属性,因为边界可能会改变,机场可能会改变国家。

换句话说,这个问题没有一个确定的答案,要么取决于你的最终目标。

+0

'国家'将属于'机场' - 这是我的模型 –

0

如果我可以建议: cf. UML规范的第9.5.3节(2015年3月):

复合:表示该属性是复合聚合的,即复合对象负责组合对象的存在和存储(请参见11.2中的零件定义0.3)。

复合凝聚是聚集的强有力的形式,需要一个部分对象在每次最多一个复合 对象被包括英寸如果复合对象被删除,则它的所有零件实例都将被删除。

对我来说,实现和逻辑的问题更多的是关于db模型的问题。但也许我错了。

而如果我必须做出选择,我将只设计实施案例。

0

你可以说机场是一个国家的一部分,换句话说就是负责它。所以从商业角度来看,第二种方法是正确的。为了从机场角度表明关于该国的“知识”,您可以在钻石前面的国家方向上添加一个空心箭头。

无论采用何种方法,您想要建模的第一个图都是不正确的。有了这个图表,每个机场将负责一个国家,所以每个机场将在不同的国家。