OCl,对象约束语言,是一种指定约束和查询的文本语言。OCL不可用于编写动作或可执行代码。
语义:
对象约束语言(OCL)是一种文本语言,用于编写导航表达式、布尔表达式和其他查询语句。它可用于构建约束表达式、监护条件、动作、前置条件和后置条件、断言和其他UML表达式。有关OCL完整的语法和语义描述请看OMG网站上的规范。关于OCL的总结性说明请看[Warmer-99]。下面的概述包含了有关创建导航表达式和布尔表达式最有用的OCL语法。完整语言包括了大量的预定义集合操作符和基本类型操作符。
表示法:
下面列出一些普通导航表达式的语法。这些形式可以连在一起。最左元素必须是对象或对象集合表达式。表达式应该适用于一组合适的值。详细资料和语法请看OCL描述。
item.selector selector是项的一个属性名称或项目链接的目标端的角色名。其结果是属性的值或相关的对象。该结果是一个值或一组值,这取决于项的多重性和关联。
item.selector(argument list.) selector是项的一个操作名称。其结果是作用在项上的操作的返回值。
item.selector[qualifier-value] selector指明了限定项的限定关联。qualifier-value是限定符属性的值。其结果是通过限定符选择的相关对象或集合。注意这种语法与数组相符,数组下标就是一种形式的限定符。
collection -> collection-property collection-property是内建的OCL集合函数名。其结果是集合特性。如果collection-property不是预定义的OCL函数,则表达式不合法。下面列出了若干特性。
collection -> select(boolean-expression) boolean-expression是根据集合中的对象来写的。其结果是集合中满足布尔表达式的对象子集。
collection -> size 集合中元素的数目。
self 表示当前对象(如果上下文清晰则可省略。)
operator 常用的数学和布尔操作符: = < > <= >= <> + – * / not
示例:
flight.poilot.training_hours >= flight.plane.minimum_hours
拥有足够训练时间的飞行员集
company.employees -> select(title="Boss" and self.reports->size>10)
做报告超过10次的老板的数目


























