概述
對象約束語言是一種形式化語言,它主要用於表示UML中模型上的約束。UML的圖形如類圖,通常不可能詳細地表達系統的各個細節,為了表達這些細節問題,需要為建模對象添加一些約束。這些約束可以使用自然語言來表達,但是自然語言的二義性增加了約束表達的複雜性和不可確定性。為了解決約束表達的問題,對象約束語言OCL應運而生。
OCL最初由IBM公司設計,由JosWarmer和SteveCook等人從一個項目中得到靈感而產生。作為一種業務建模語言的一部分,OCL已經為標準化組織OMG所接受,成為了UML標準的一部分。
特點
OCL具有如下特點:
1、OCL是一種精確的、無二義性的語言,它易於使用和掌握。
2、OCL是一種規範說明性語言,所有有關實現的問題都不能用OCL來表達。
3、OCL是一種純表達式語言,它是沒有任何副作用的聲明性語言。對OCL表達式的計算將返回一個值,計算不會改變系統的狀態。
4、OCL是一種類型化語言,即OCL中的每個表達式都是具有類型的。
5、OCL不是一種程式設計語言,不能用OCL編寫程式邏輯和控制流程。
組成
大部分OCL語句都是由如下結構化元素組成的:
1、上下文定義了表達式有效的域,通常是特定類型的實例,例如類圖中的對象。連結(即關聯的實例)也可能是OCL表達式的上下文。
2、作為表達式上下文的實例的屬性,可能包括特性、關聯角色和查詢操作。
3、套用於屬性的OCL操作包括(但是不限於)代數操作符*十、一和/,諸如size、isEmpty和select之類的集合操作符,以及諸如oclIsTypeOf之類的類型操作符。
OCL語句也可以包括關鍵字,例如邏輯操作符and、or、implies、if,else和not,以及集合操作符in。這些操作符可以用於定義操作特別複雜的前置條件和後置條件。OCL表達式可以規範特性的初始值和派生值,可以用於檢查各種操作結果,例如對象是否已經創建,或者在操作執行期間傳送的訊息。