Class 在这种情况下,如何使用UML建模数据?
情况是,有一个名为Class 在这种情况下,如何使用UML建模数据?,class,oop,design-patterns,uml,software-design,Class,Oop,Design Patterns,Uml,Software Design,情况是,有一个名为Progress的数据,它有两个有效值(假设'a'和B)。这意味着Progress='A'或Progress=BA只是一个string,而B是而不是stringB本身有一些有效值(假设字符串:'V1','V2','V3')进度可以是A这是字符串,也可以是B这是'V1','V2'或'V3'。如何对这些数据建模 如果B只是一个简单的字符串(就像a),那么我们可以将Progress定义为string,但我认为一种解决方案是将Progress定义为一个有两个子类:class a和cl
Progress
的数据,它有两个有效值(假设'a'
和B
)。这意味着Progress='A'
或Progress=B
A
只是一个string
,而B
是而不是string
B本身有一些有效值(假设字符串:'V1'
,'V2'
,'V3'
)<代码>进度
可以是A
这是字符串
,也可以是B
这是'V1'
,'V2'
或'V3'
。如何对这些数据建模
如果B
只是一个简单的字符串(就像a
),那么我们可以将Progress
定义为string
,但我认为一种解决方案是将Progress
定义为一个有两个子类:class a
和class B
<代码>B类有两个字段:Id和状态
,因此我们有3个Id,分别对应于3个状态:'V1'
,'V2'
和'V3'
和A类
,其中常量
字段称为状态
,具有固定值'A'
。因此,使用此解决方案,progress
可以是具有状态的对象A
或B
如果这样的设计不好,或者这种情况下是否存在任何设计模式,请帮助我。首先,因为我不能100%确定您是否谈论类型化语言中的类或动态类型化语言中的对象,我想澄清一个显而易见的问题:UML使用类型化对象。因此,诸如progress
之类的实例必须属于定义其属性和行为的类progress
如果您的问题实际上只是关于数据和值,因为'A'
和'Vn'
之间没有重叠,那么最简单的方法是将进度
定义为一个具有唯一属性的类,该类的类型为字符串
但从您的叙述中,我了解到,这不仅与数据有关,还与语义和潜在的对象行为有关:
- 解决您的需求的一种方法是使用类专门化:
Progress
将有一个包含两个专门化的泛化集,ProgressString
(只有一个String
属性)和B
(本身有一个String属性)。此外,泛化集将具有约束
- 另一种方法是使用(注意不要将对象组合与UML组合混淆):
Progress
将有两个属性,一个是String
,一个是B
(定义如上所述)。如果你给他们一个多重数0..1
,你可以使用一个约束来确保它是一个或另一个,而不是两个
在这两种情况下,如果希望将字符串限制为已记录的可能值,则需要添加约束。或者,您可以选择一个更具表现力的模型,使用一个来明确可能的值(正如qwerty_在评论中所建议的)。首先,由于我不能100%确定您是否谈论类型化语言中的类或动态类型化语言中的对象,我想澄清一个显而易见的问题:UML使用类型化对象。因此,诸如progress
之类的实例必须属于定义其属性和行为的类progress
如果您的问题实际上只是关于数据和值,因为'A'
和'Vn'
之间没有重叠,那么最简单的方法是将进度
定义为一个具有唯一属性的类,该类的类型为字符串
但从您的叙述中,我了解到,这不仅与数据有关,还与语义和潜在的对象行为有关:
- 解决您的需求的一种方法是使用类专门化:
Progress
将有一个包含两个专门化的泛化集,ProgressString
(只有一个String
属性)和B
(本身有一个String属性)。此外,泛化集将具有约束
- 另一种方法是使用(注意不要将对象组合与UML组合混淆):
Progress
将有两个属性,一个是String
,一个是B
(定义如上所述)。如果你给他们一个多重数0..1
,你可以使用一个约束来确保它是一个或另一个,而不是两个
在这两种情况下,如果希望将字符串限制为已记录的可能值,则需要添加约束。或者,您可以选择一个更具表现力的模型,使用一个来明确可能的值(正如qwerty_在评论中所建议的)。一个名为Progress的数据:不,Progress是一个变量,data是一个值<代码>进度=B。。。但是B不是字符串:您不使用B来分配进度,而是使用它的值,并且该值是一个字符串,因此在所有情况下,您都使用字符串来分配进度(假设单引号定义的是文字字符串,而不是C(++)中的字符)。您的问题的其余部分似乎表明您混淆了的类和实例class@bruno-您如何对图像进行建模?要对图像进行建模,我首先需要知道您的图像代表什么,任务完成后进度可能具有什么价值?什么是进步?在我的系统中,进步是构建结构的进步。我想知道结构的状态。状态可以是值:“A”、“V1”、“V2”或“V3”。但状态“A”在逻辑上与“V1”、“V2”或“V3”分开。它们在逻辑上是两种不同类型的进步。@Christophe Hehe。斯威夫特是我从那里得到的。(并不是说我太喜欢这种语言。)一个名为Progress的数据:不,Pr