【问题标题】:How to Model data using UML for this situation? [closed]在这种情况下,如何使用 UML 对数据进行建模? [关闭]
【发布时间】:2021-02-09 01:08:27
【问题描述】:

情况是有一个名为Progress 的数据有两个有效值(假设'A' 和B)。这意味着Progress = 'A' 或Progress = B。 A 只是 string,但 B 是 not string。 B 本身有一些有效值(假设字符串:'V1'、'V2'、'V3')。 progress 可以是A,即string,也可以是B,即'V1'、'V2' 或'V3'。如何对这些数据建模?

如果B 只是一个简单的字符串(就像A),那么我们可以将Progress 定义为string,但我认为一种解决方案是将progress 定义为一个有两个孩子的类:@ 987654348@ & Class B。 Class B 有 2 个字段:Id & state,所以我们有 3 个 ID,对应于 3 个 states:'V1'、'V2' 和 'V3' 和 Class A,其中 const 字段名为 state,固定名称为 state值'A'。所以使用这个解决方案progress 可以是对象A 或B,它有一个state。

如果这样的设计不好或者有任何适合这种情况的设计模式,请帮助我。

【问题讨论】:

  • a data named Progress :不,Progress 是一个变量,一个数据是一个值。 Progress = B ... but B is not string :您没有将 Progress 分配给 B 而是分配其值,并且该值是一个字符串,因此在所有情况下您都分配 Progress带有一个字符串(假设单引号定义了一个文字字符串,而不仅仅是 C(++) 中的一个字符)。你的问题的其余部分似乎表明你混淆了类和类的实例
  • @bruno - 你如何为图像建模?
  • 对其建模我首先需要知道您的图像代表什么,分配后 Progress 可以具有的可能值? 进度是什么?
  • 在我的系统中进度是构建结构的进度。我想知道结构所处的状态。状态可以是值:“A”、“V1”、“V2”或“V3”。但是状态“A”在逻辑上与“V1”、“V2”或“V3”是分开的。从逻辑上讲,它们是 2 种不同类型的进度。
  • @Christophe 呵呵。斯威夫特是我从中得到的。 (并不是说我太喜欢这种语言了。)

标签: class oop design-patterns uml software-design


【解决方案1】:

首先,由于我不能 100% 确定您是在谈论类型语言中的类还是动态类型语言中的对象,所以我想澄清一个显而易见的事实:UML 使用类型对象。因此,object 实例(例如 progress)必须属于定义其属性和行为的类 Progress。

如果您的问题真的只是关于数据和值,因为'A' 和'Vn' 之间没有重叠,最简单的方法是将Progress 定义为具有类型的唯一属性的类String.

但从您的叙述中,我了解到这不仅与数据有关,还与语义和潜在的对象行为有关:

  • 满足您的要求的一种方法是使用类特化:Progress 将有一个具有两个特化的泛化集,ProgressString(具有唯一的 String 属性)和 B(其自身具有字符串属性)。此外,泛化集将具有约束{complete, disjoint}
  • 另一种方法是使用object composition(注意不要将对象组合与UML 组合混淆):Progress 将有两个属性,一个String 和一个B(定义如上)。如果您要给他们0..1 的多重性,您可以使用一个约束来确保它是一个或另一个,而不是两个。

在这两种情况下,如果您希望将字符串限制为已记录的可能值,则需要添加约束。或者,您可以选择更具表现力的模型,使用 «enumeration» 来明确可能的值(如 cmets 中建议的 qwerty_so)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-15
    • 2020-12-27
    • 2021-11-22
    • 1970-01-01
    • 2021-09-16
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多