Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 在这种情况下,如何使用UML建模数据?_Class_Oop_Design Patterns_Uml_Software Design - Fatal编程技术网

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