7.5.9 所有对象上的预定义属性
OCL中预定义了一些适用于所有的对象的属性,它们是:
oclIsTypeOf(t: Classifier): Boolean
oclIsKindOf(t: Classifier): Boolean
oclIsInState(s: OclState): Boolean
oclIsNew(): Boolean
oclAsType(t: Classifier): instance of Classifier
操作oclIsTypeOf在self的类型与 t 相同时为真。例如:
context Person
inv: self.oclIsTypeOf(Person) --真
inv: self.oclIsTypeOf(Company) --假
上面的属性处理的都是对象的直接类型。oclIsKindOf属性判断一个对象是否是类型 t 或其子类。
操作oclIsInState(s)在对象处于状态 s 时为真。可用于该操作的状态是定义该分类符行为的状态机的所有状态。对于状态的内嵌状态,可以使用双分号“::”来组合。
图7.5 Statemachine Example
在上面的状态机示例中,s 的值可以是 On, Off, Off::Standby, Off::NoPower。如果object的分类符具有如上的状态机,那么有效的OCL表达式是:
object.oclIsInState(On)
object.oclIsInState(Off)
object.oclIsInState(Off::Standby)
object.oclIsInState(Off::NoPower)
如果对象的分类符附有多个状态机,那么状态名称可以用状态机名称为前缀,同样使用双分号‘::’,如同内嵌状态一般。
操作oclIsNew在用于后置条件,且对象在执行该操作中被创建时(即它在前置条件时不存在)计算为真。
操作oclAsType(t)将对象的类型转换为类型 t ,它必须是对象类型的子类或超类。