Uml OCL约束强制字符串不为空

Uml OCL约束强制字符串不为空,uml,string-length,ocl,Uml,String Length,Ocl,我有一个包含许多类的类图,其中一些包含string类型的属性。我希望所有字符串的长度至少为1 简单(但丑陋)的解决方案如下: context Class1 inv: self.attributeOfTypeString.size > 0 context Class2 inv: self.attributeOfTypeString.size > 0 ... 您知道如何为与模板匹配的所有属性定义OCL约束吗?比如: global.select(attr | attr.T

我有一个包含许多类的类图,其中一些包含
string
类型的属性。我希望所有字符串的长度至少为1

简单(但丑陋)的解决方案如下:

context Class1
inv:    self.attributeOfTypeString.size > 0

context Class2
inv:    self.attributeOfTypeString.size > 0

...
您知道如何为与模板匹配的所有属性定义OCL约束吗?比如:

global.select(attr | attr.TYPE = string) -> forall (str : string | str.size > 0)

终于从别处得到了答案。我分享它,以防有人有一天需要它。 有三种可能的方法来解决这个问题

1°)首先要记住,UML中允许多重继承。因此,我们可以使所有具有string属性的类从
WithString
类继承,并在此父类上设置OCL约束。然而,这使得图表有点难以阅读

2°)另一种可能性是创建一个类
String
,并存储该类的一个实例,而不是所有字符串属性。这个封装解决方案的问题是性能(对所有字符串使用getter)


3°)最后,我认为最干净的解决方案是:我们可以在元级别声明OCL约束。在描述类图的类图中,我们可以声明所有字符串都是非空的。

最终从其他地方得到了答案。我分享它,以防有人有一天需要它。 有三种可能的方法来解决这个问题

1°)首先要记住,UML中允许多重继承。因此,我们可以使所有具有string属性的类从
WithString
类继承,并在此父类上设置OCL约束。然而,这使得图表有点难以阅读

2°)另一种可能性是创建一个类
String
,并存储该类的一个实例,而不是所有字符串属性。这个封装解决方案的问题是性能(对所有字符串使用getter)

3°)最后,我认为最干净的解决方案是:我们可以在元级别声明OCL约束。在描述类图的类图中,我们可以声明所有字符串都是非空的