7.5.10 类自身上的特征

到目前为止所讨论的OCL中的所有属性都是在类的实例上。这些类型要么是OCL中预定义的,要么是在类模型中定义的。在OCL中,还可以使用定义在类自身而非它们的实例上的静态特征。举个例子,类 Employee 可以定义一个静态操作 “uniqueID”以用于在实例化员工ID属性时生成一个唯一的ID:

context Employee::id : String init:
    Employee::uniqueID()

静态特征使用‘::’操作符来调用,这是与来自分类符元类的特征(包括OCL预定义的操作 allInstances)截然不同的。如果我们想确保Person的所有实例都有唯一的名称,我们可以写:

context Person inv:
    Person.allInstances()->forAll(p1, p2 | 
        p1 <> p2 __implies__ p1.name <> p2.name)

allInstances的调用使用‘.’而非‘::’是因为它不是一个静态操作。它是一个适用于分类符元类的实例(此处是Person)的操作。

results matching ""

    No results matching ""