0
Class Game
Method: addPlayer(param Player)

我想为我的方法 addPlayer 创建一个不变量,以便验证参数 Player 是否存在。

例子:

context Game::addPlayer(pl:Player)
    inv pl->exists( p : Player | p.playerID = pl.playerID )

不确定语法是否有效

4

1 回答 1

2

如果约束本身有意义,我不会进入讨论。在这种情况下,只是一些有助于您理解 OCL 的注释。

  1. 不变量是在类上创建的。它们在操作环境中没有意义。
  2. 可能您想要的是 Operation precondition
  3. “exists”是一个操作符(存在量词)来处理一个集合。关键是您正在使用参数p1隐式创建一个集合(通过这样做pl->exists(...),因此您的约束将始终为真。
  4. 一个可能更好的约束条件如下

使用 allInstances() 操作

context Game::addPlayer(pl:Player)
pre : Player.allInstances()->exists(p : Player | p.playerID = pl.playerID )
于 2013-11-17T13:38:48.600 回答