关于图上的OCL不变量的问题

时间:2019-01-10 05:05:17

标签: invariants ocl

我是OCL的新手,目前正试图弄清楚如何进行不变式。 我附上了正在处理的图表的图片。

https://imgur.com/1ucZq5w

我要解决的不变式是:

a)玩家手中有0或2张牌。

   Context Player
   inv i1: self.card->size()=0 or self.card->size()=2

b)没有玩过任何回合的玩家,其游戏资本不能超过桌子的最高买入额。

 Context Player
   inv i2: self.numberOfRounds=0 implies (self.gameCapital < self.Table.maxBuyIn)

c)在每个桌子上只能有属于不同用户的玩家

   Context Player
   inv i3: Player.UserAccount.allInstances().userID->isUnique()

我不确定'allInstances()'应该在Player之后还是在PlayerAccount之后。  而且我不知道我该如何处理文本的“在每张桌子上”部分。

还有两点我真的不知道该怎么做。

d)甲板上有52张卡片,它们在颜色或价值上互不相同

e)当bidDone为True时,手中仍然有纸牌的所有玩家的输入均相等。

您能告诉我我到目前为止所做的是否正确,也许可以为d)和e)提供一些建议或解决方案?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

似乎合理,但我建议您使用明智的名称,因为验证工具会报告例如Constraint Player :: i2对于...不满意。

b)似乎有一个

c)allInstances采用类型源,因此为“ Player”。是错的。 allInstances通常执行效率非常低,因此仅应作为最后的手段。对于您而言,这显然是错误的,因为您的范围是“在每个表中”。您应该使用上下文表,然后在表上对玩家进行推理。

d)如果将“与...不同”改写为“相对于”而言是唯一的,则也许可以看到如何使用颜色+值元组作为唯一性的基础。

e)不知道输入是什么,但似乎就像是一系列的impacts子句。