OCL约束强制字符串不为空

时间:2013-11-24 15:38:22

标签: 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.TYPE = string) -> forall (str : string | str.size > 0)

1 个答案:

答案 0 :(得分:1)

终于从其他地方得到了答案。如果有人有一天需要,我会分享它。 有三种方法可以解决这个问题。

1°)第一个是要记住UML中允许多重继承。因此,我们可以使所有具有字符串属性的类继承自WithString类,并在此父类上设置OCL约束。然而,这使得图表有点不可读。

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

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