【问题标题】:attribute having multiple types in class diagram类图中具有多种类型的属性
【发布时间】:2018-10-04 08:01:21
【问题描述】:

在UML类图中,是否可以表示一个可以有多种类型的属性?例如,MyClass 有一个名为 MyAttribute 的属性。如何在类图中指定 MyAttribute 可以采用浮点或字符串类型值?另一种选择是写MyAttribute: (https://docs.microsoft.com/en-us/visualstudio/modeling/uml-class-diagrams-guidelines?view=vs-2015),即不指定类型,但如果人们开始使用自己的类型,不指定类型可能会产生问题。

提前致谢。

【问题讨论】:

  • 你会如何在(OO)代码中做到这一点?在寻找用 UML 建模的方法时,回答这个问题通常会有所帮助。
  • 我认为在对象的实例化过程中,实例化它的实体可以独立使用浮点数或字符串作为 MyAttribute。
  • 我不明白你的意思,对不起。
  • MyObject:MyClass 将被实例化将有一个属性 MyAttribute ,允许使用浮点值或字符串值。
  • 你也不能在 Python 中做到这一点。无类型语言中的属性都没有类型。这与字符串或浮点数不同。

标签: uml class-diagram


【解决方案1】:

一种方法是对两种不同数据类型的联合进行建模。您将定义一个具有两个特化的数据类型,创建一个 {complete, disjoint} 的泛化集,将一般数据类型抽象化,并将一般数据类型用作属性的类型。

您可能难以说服代码生成器将其正确映射到可以表示此构造的编程语言(例如 C++ 或 XSD),但 UML 对任何读者来说都是非常清楚的。

【讨论】:

  • 这个联合会是什么样子?你能举个例子吗?
【解决方案2】:

一个 UML 属性或属性只能有一种类型。

因此,例如,如果您希望同时允许 String 和 Float 值,则必须使用它们共同的接口键入属性,例如 Object。 但当然,它会不太精确,因为您允许其他类型的值....

【讨论】:

    【解决方案3】:

    当您处理无类型语言(例如 Python)时,您的所有属性都没有特定类型。在任何类型的语言中,您在编译时决定属性可以采用哪种类型。我不知道任何允许将一组类型分配给任何属性的语言。

    假设您谈论的是无类型语言,您会为通常无类型的属性添加一个约束,告诉类似{ must take either type A or B }。当然,编译器/解释器不会帮助您检查这些约束。

    【讨论】:

      猜你喜欢
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 2012-09-12
      • 2016-11-06
      相关资源
      最近更新 更多