我有一个包含许多类的类图,其中一些类包含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)
答案 0 :(得分:1)
终于从其他地方得到了答案。如果有人有一天需要,我会分享它。 有三种方法可以解决这个问题。
1°)第一个是要记住UML中允许多重继承。因此,我们可以使所有具有字符串属性的类继承自WithString
类,并在此父类上设置OCL约束。然而,这使得图表有点不可读。
2°)另一种可能性是创建一个类String
并存储此类的实例而不是所有字符串属性。这种封装解决方案的问题在于性能(对所有字符串使用getter)。
3°)最后,我认为最干净的解决方案如下:我们可以在元级别声明OCL约束。在描述类图的类图中,我们可以声明所有字符串都是非空的。