【发布时间】:2014-05-26 20:28:53
【问题描述】:
如果我必须定义一个不变量来说明申请贷款的人的年龄应该大于 18 岁,那么这将是
context Person
inv: age > 18
或
context Person
inv: self.age > 18
这两者有什么区别?
感谢您的指导
【问题讨论】:
标签: invariants ocl
如果我必须定义一个不变量来说明申请贷款的人的年龄应该大于 18 岁,那么这将是
context Person
inv: age > 18
或
context Person
inv: self.age > 18
这两者有什么区别?
感谢您的指导
【问题讨论】:
标签: invariants ocl
您的示例中的两个不变量完全相同(“self”隐含在第一个中)。尽管如此,您只是说所有“人”对象的年龄值必须至少为 18,这不完全是您描述的不变量(在您的不变量中,似乎系统中可能有 18 岁以下的人,它只是 18 岁以下的人不能与贷款挂钩)
【讨论】:
正如 Jordi 已经说过的,它们在语义上是等价的。第一个隐含地包含self。
正如他所提到的,您的 OCL 不变量与您提供给我们的文本表示不匹配。在您的不变量中,人必须年满 18 岁。但是,负载的所有者应该大于 18。所以您的不变量应该在 Loan 上制定。
context Loan
inv: owner.age > 18
它也有隐含的self,所以第二个在语义上等价于第一个:
context Loan
inv: self.owner.age > 18
【讨论】: