1

我有一个包含许多类的类图,其中一些包含 type 的属性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)
4

1 回答 1

1

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

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

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

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

于 2013-12-02T11:35:26.730 回答