【问题标题】:Confusion about how attributes work in UML Class Diagrams关于 UML 类图中属性如何工作的困惑
【发布时间】:2012-02-02 12:20:52
【问题描述】:

我在斯德哥尔摩大学学习了面向对象系统和设计课程。我不得不提交一个额外的任务,我必须创建一个 UML 类图来反映一个销售汽车的网站(这不是我要求你做作业的线程)。这是我交的:


老师说“这不是你使用属性的方式”,并且似乎不愿意解释我应该做些什么不同的事情。都是瑞典语,但我认为无论语言如何,要点都很清楚。

我的问题是:这应该如何以不同的方式建模?我对某些对象、枚举进行了聚合,因为该网站的某些类的属性数量有限。

非常感谢任何帮助。

亲切的问候,

雨果

【问题讨论】:

  • 您的图像完全无法读取。你应该为它提供一个不错的分辨率。
  • 对不起,我刚刚更新了它。这不是完整的图像,但应该足够了(我的老师主要提到了“Bil”和“Drivmedel”)。

标签: uml argouml


【解决方案1】:

我在您的图表中发现了一些问题:

  • 我相信您的图表中有一些未正确定义的枚举。枚举应类似于 this
  • 除了聚合之外,您还定义了属性(例如,Bil 与此SäkerhetsTilägg 具有聚合关系,并另外定义了属性säkerhet。您应该使用关系或属性,请参阅here
  • 虽然我们在这里,但多重性有点令人困惑。你说Bil 可以有任意数量的SäkerhetsTilägg,而属性säkerhet 恰好有一个SäkerhetsTilägg
  • Afaik,您必须定义属性和方法的可见性(例如 +- 等)。

【讨论】:

  • 感谢您花时间查看它。我现在明白枚举在这个类图中的实现不正确。我不太确定为什么你应该使用关系或属性。我不能同时将 Drivmedel 作为类和 Bil 的属性吗?如何写出属性 säkerhet 恰好包含一个 SäkerhetsTilägg?如果它可以容纳多个,它将​​如何编写?我的老师并没有真正表达对可见性的任何关注,尽管我们确实在单独的课程中介绍了这一点。感谢您的宝贵时间。
  • 您可以将Drivmedel 定义为一个类并将其用于属性类型。但是,您应该将DrivmedelBil 之间的关系表达为依赖项,而不是聚合(再次,请参阅我链接的问题的答案)。至于多重性,SäkarhetsTilägg 上的0..* 告诉我Bil 可以有任意数量的SäkarhetsTilägg。只需写1(或不写任何数字)。如果你想在一个属性中表达多个可能,你可以使用类似SäkarhetsTilägg[1..n] 作为类型。但是,这是特定于编程语言的,而聚合则不是。
  • 请记住,UML 除非用于生成目的,否则仅用于通信。因此聚合线不必是属性,因为图表只是模型的视图。此外,UML 中枚举的概念有点模糊,因为大多数人将其映射到像 Java 这样的静态/编译的东西,并没有改变。不一定是这种情况,例如,有人可能会争辩说它不应该是一个枚举,而是一个类,因为每种语言都可以有一个字符串等。只是更多的上下文。
【解决方案2】:

在我看来,您已将枚举建模为类。尽管 Enumeration 在视觉上看起来像一个具有 构造型的类,但它确实是完全不同的东西,当 Attributes 用于类时,它在隔间中有 EnumerationLiterals。

在 ArgoUML 中,您可以使用工具栏右侧的第四个按钮创建枚举。这是一个下拉菜单,默认创建一个新的数据类型,但如果你把它拉下来并选择绿色矩形,它会创建一个枚举。首先创建您的枚举,然后您可以选择它们作为属性的类型。

最终结果应如下所示:

【讨论】:

  • 请阅读我上面的回答,我说,虽然它们看起来很相似,但枚举并不是刻板印象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 2020-02-23
相关资源
最近更新 更多