开始学习UML和OCL以及何时使用Inv、pre、post

开始学习UML和OCL以及何时使用Inv、pre、post,uml,ocl,Uml,Ocl,所以,我大约3小时前开始学习OCL。我很困惑什么时候可以使用inv,什么时候需要使用pre和post。 所以我想知道在这种情况下你是否可以使用inv context Service :: cost(d : double) inv result = workDone.cost -> sum() 这是对一个问题的回答: 写一个OCL不变量,说明服务的总成本是成本的总和 对于汽车上所做的所有工作,您必须假设存在一种方法 Service::cost()并指定结果 正如您看到的,它要求ocl

所以,我大约3小时前开始学习OCL。我很困惑什么时候可以使用
inv
,什么时候需要使用
pre
post
。 所以我想知道在这种情况下你是否可以使用
inv

context Service :: cost(d : double)
   inv result = workDone.cost -> sum()
这是对一个问题的回答: 写一个OCL不变量,说明服务的总成本是成本的总和 对于汽车上所做的所有工作,您必须假设存在一种方法 Service::cost()并指定结果

正如您看到的,它要求ocl不变量声明,这是否意味着我必须使用
inv


干杯

我不认为使用不变量是正确的。当该方法在某些实现语言中首次启动时,在求和得到其最终值之前,将违反不变量。因此,我认为您需要一个post条件。post条件告诉您当方法返回时应该为true的内容

我不认为使用不变量是正确的。当该方法在某些实现语言中首次启动时,在求和得到其最终值之前,将违反不变量。因此,我认为您需要一个post条件。post条件告诉您当方法返回时应该为true的内容

我会用
对约束进行定型。我仍然不能编写OCL,而且因为没有真正的OCL编译器,我想没有必要再继续了。我会用
对约束进行定型。我仍然不能写OCL,而且因为没有真正的OCL编译器,我想没有必要继续写下去。整个OCL形成了约束。当它适用时,是inv、pre或post。所以,虽然我不是OCL专家,但我认为你的答案是不正确的。根据我在OP中读到的内容,OP的形式是正确的。约束应该被命名为
totalCostSum
或类似的名称,而不是
result
。@ThomasKilian:甚至那个讲座也说,“不变量是一个在对象的整个生命周期内都应该为真的约束。”在方法完成之前,不变量是假的。我的回答怎么不正确?正如所说:我不是OCL大师,我只是在猜测。但任务是编写一个假定命名条件的不变量。这是通过
inv=
完成的。我只是不确定如何编写
,很可能上面的说法是错误的。但这并不是关于不变量/post。有时人们在措辞上很马虎。整个OCL形成了约束。当它适用时,是inv、pre或post。所以,虽然我不是OCL专家,但我认为你的答案是不正确的。根据我在OP中读到的内容,OP的形式是正确的。约束应该被命名为
totalCostSum
或类似的名称,而不是
result
。@ThomasKilian:甚至那个讲座也说,“不变量是一个在对象的整个生命周期内都应该为真的约束。”在方法完成之前,不变量是假的。我的回答怎么不正确?正如所说:我不是OCL大师,我只是在猜测。但任务是编写一个假定命名条件的不变量。这是通过
inv=
完成的。我只是不确定如何编写
,很可能上面的说法是错误的。但这与不变量/帖子无关。有时人们在措辞上很马虎。