




已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1,第13章對象約束語言,對象約束語言(ObjectConstraintLanguage),簡稱OCL,是一種指示用戶建模系統(tǒng)中的限制方式。它是UML可選的附加內(nèi)容,可以用來更好地定義對象的行為,并為任何類元指定約束。在對象約束語言中,對象代表了系統(tǒng)的組件,它定義了完善的項目,約束代表限制,而語言并非是指一種正式的計算機語言。OCL是一種形式語言,可以應用于任何實現(xiàn)方式的非正規(guī)語言。對象約束語言對UML中圖形或其他組件都沒有控制權(quán),它只是在使用時返回值。OCL并不能修改對象的狀態(tài),而是用來指示對狀態(tài)的修改何時發(fā)生。,2,本章學習要點:,了解OCL的概念理解OCL的結(jié)構(gòu)掌握OCL語法掌握三種固化類型掌握OCL數(shù)據(jù)類型和運算符掌握let和def的功能和作用理解集合類型掌握并應用對集合操作熟悉OCL標準庫,3,13.1OCL概述,UML圖(例如類圖)通常不夠精細,無法提供與規(guī)范有關(guān)的所有相關(guān)部分。這其中就缺少描述模型中關(guān)于對象的附加約束。這些約束常常用自然語言描述。而實踐表明,這樣做經(jīng)常造成歧義。為了寫出無歧義的約束,已經(jīng)開發(fā)出幾種所謂的“形式語言”。傳統(tǒng)上的形式語言,缺點是僅適合于有相當數(shù)學背景的人員,而普通商務或系統(tǒng)建模者則難以使用。OCL的出現(xiàn)解決了這一問題,它是一種保留了易讀易寫特點的形式語言。OCL不僅用來寫約束,還能夠用來對UML圖中的任何元素寫表達式。每個OCL表達式都能指出系統(tǒng)中的一個值或者對象。OCL表達式能夠求出一個系統(tǒng)中的任何值或者值的集合,因此它具有了和SQL同樣的能力,由此也可得知OCL既是約束語言,同時也是查詢語言。,4,13.2OCL結(jié)構(gòu),OCL在兩個層次上共同定義對象約束語言,一個是抽象語法(元模型),另一個是具體語法。元模型定義OCL概念和應用該概念的規(guī)則,具體語法則真正用于在UML模型中指定約束和進行查詢。,5,13.2.1抽象語法,抽象語法指的是OCL語言定義的概念層,在該層中抽象語法解釋了類、操作等內(nèi)容的元模型。例如,類被定義為“具有相同的特征、約束和語義說明的一組對象”,并在該層將類解釋為可與任何數(shù)目的特性(或?qū)傩裕?、操作、關(guān)系甚至嵌入類相關(guān)聯(lián)。抽象語法只是定義了相類似的元模型,并沒有創(chuàng)建一個具體的模型或?qū)ο?。OCL要求清楚地區(qū)分OCL抽象語法和其他自抽象語法派生的所有具體語法。抽象語法還支持其他約束語言的發(fā)展。正如基于MOF(MetaObjectFacility,元對象設施標準)的UML基礎(chǔ)結(jié)構(gòu)元模型支持各種專業(yè)領(lǐng)域的建模,例如軟件建模的UML語言,數(shù)據(jù)倉庫領(lǐng)域建模的CWM語言等。,6,13.2.2具體語法,與面向規(guī)則的語法相反,具體語法(即模型層語法)描述代表現(xiàn)實世界中一些實體的類,它應用抽象語法的規(guī)則來創(chuàng)建可以在運行時段計算的表達式。OCL表達式與類元相關(guān)聯(lián),應用于該類元自身或者某個屬性、操作或參數(shù)。不論哪種情況,約束都是根據(jù)其位移(replacement)、上下文類元(contextualclassifier)和OCL表達式的自身實例(selfinstance)來定義。位移表示UML模型中使用OCL表達式所處的位置,即作為依附于某個類元的不變式、依附于某個操作的前置條件或依附于某個參數(shù)的默認值。上下文類元定義在其中計算表達式的名字空間。如,前置條件的上下文類元是在其中定義該前置條件的操作所歸屬的那個類。也就是說該類中所有模型元素(屬性、關(guān)聯(lián)和操作)都可以在OCL表達式中被引用。自身實例自身實例是對計算該表達式對象的引用,它總是上下文類元的一個實例。也就是說,OCL表達式對該上下文類元每個實例的計算結(jié)果可能不同。因此,OCL可以用于計算測試數(shù)據(jù)。使用如下所示的方法為表定義主鍵。,7,13.3OCL表達式,OCL表達式用于一個OCL類型的求值,它的語法用擴展的巴斯科范式(EBNF)定義。在EBNF中,“|”表示選擇,“?”表示可選項,“*”表示零次或多次,“+”表示一次或多次。OCL基本表達式的語法用EBNF定義如下:PrimaryExpression:=literalCollection|literal|pathNametimeExpression?FeatureCallparameters?|(expression)|ifExpressionLiteral:=|#timeExpression:=featureCallparameters:=(declarator)?(actualParameterList)?)ifExpression:=ifexpressionthenexpressionelseexpressionendif,8,13.4OCL語法,OCL指定了每一個約束都必須有一個上下文。上下文(context)指定了哪一個項目被約束。OCL是一個類型化的語言,因此數(shù)據(jù)類型扮演了重要角色,如高級語言C+、Java一樣,也有多種數(shù)據(jù)類型。,9,13.3.1固化類型,一個約束就是對一個(或部分)面向?qū)ο竽P突蛘呦到y(tǒng)的一個或者一些值的限制。UML類圖中的所有值都可以使用OCL來約束。約束的應用類似于表達式,在OCL中編寫的約束上下文可以是一個類或一個操作。其中需要指定約束的固化類型,而約束的固化類型可以由以下三項組成:invariantpre-conditionpost-condition,10,13.3.2數(shù)據(jù)類型、運算符和操作,對象約束語言是類型化語言,具有四種數(shù)據(jù)類型分別是:整數(shù)(Integer)可以是任何不帶小數(shù)部分的值,如0,-1,1等。實數(shù)(Real)可以是任何數(shù)字,可以帶有小數(shù)。如,3.0,7.5,-3.0等。字符串(String)可以包含任何數(shù)量的字符或文本。布爾(Boolean)布爾型值只有兩個True和False,11,13.5深入固化類型,前面曾經(jīng)簡單要介紹固化類型的基本語法知識。本節(jié)將進一步講解有關(guān)三種固化類型invariant、pre-condition和post-condition約束的更多知識。,12,13.5.1屬性約束建模,以屬性的約束表示為不變量,不變量表達式是通過引用模型的元素,并使用邏輯運算符和算術(shù)運算符來構(gòu)造,表達式內(nèi)創(chuàng)建的引用可以在let和def語句中再次使用。在計算OCL表達式時,必須引入僅在表達式中使用的中間值。使用let表達式可以定義變量,通過冒號賦予數(shù)據(jù)類型,甚至可以使用通過等號運算符賦予初始值。一旦該變量被定義,就可以在表達式的其他地方使用。當表達式完成時,該變量不再可使用。也就是說表達式規(guī)定了該變量的使用范圍,變量只在對其進行定義的表達式內(nèi)可用。以下實例中,legthOfEmployment僅在contextEmployee不變式中可用。,13,13.5.2對操作約束建模,前面介紹了使用前置條件和后置條件對操作進行約束建模。前置條件表示為當操作被激發(fā)時輸入?yún)?shù)和模型狀態(tài)的可接受值;后置條件表示操作完成時必須滿足的條件,它表示為操作完成時檢測該操作的結(jié)果值和模型的狀態(tài)。使用前置條件和后置條件一般形式如下所示:contextoperateName(parameters):returnpre:constraintpost:constraint,14,13.6使用集合,在OCL表達式的許多結(jié)果包含不止一個值,允許存在多個值被OCL稱為Collection的一個對象列表。OCL中共定義了四種類型的對象列表,分別是:Collection(集合)、Set(集)、Bag(袋子)和Sequence(序列)。,15,13.6.1創(chuàng)建集合,集合可以通過字符顯式地創(chuàng)建,創(chuàng)建集合時只需要寫出創(chuàng)建集合的類型名稱,后跟以列表值,各值項使用逗號隔開,并被花括號包括。創(chuàng)建集合如下所示:Set1,5,6,99SetJim,Tim,xySequence1,3,94,0,1,3SequenceJim,Tim,JimBag1,2,4,5,4BagJim,Tim,Tim,16,13.6.2操作集合,為了便于操作集合,OCL加定義了一些操作,這里只給出一些常用且重要的操作來示例,更多具體的操作會在OCL的標準庫中介紹。操作如下所示:select按照一定的規(guī)則選擇選取符合規(guī)則的項,組成一個新的集合。reject從集合中選擇不滿足規(guī)則的項,組成一個新的集合。forAll指定一個應用于集合中每個元素的約束。exists確定某個值是否存在于集合中的至少一個或多個成員中。isEmpty操作判斷集合中是否有元素。count判斷集合中等于count參數(shù)的元素個數(shù),并返回該數(shù)值。iterate訪問集合中的每個成員,對每個元素進行查詢和計算。,17,13.7使用消息,OCL支持對已有操作的訪問,也就是說OCL可以操作信號和調(diào)用信號,來發(fā)送消息。針對信號的操作,OCL提供了三種機制:第一種機制“”“”為hasBeenSent已經(jīng)發(fā)送的消息。該符號表示指定對象已經(jīng)發(fā)送了指定的消息。第二種機制OclMessageOclMessage是一種容器,用于容納消息和提供對其特征的訪問。第三種機制“”它是已發(fā)送符號“”的增強形式,允許訪問已經(jīng)發(fā)送消息的集合,所有的消息被容納在OclMessage中。,18,13.8元組,元組是對一組數(shù)據(jù)元素,如文件中的一個記錄或數(shù)據(jù)庫中的一行等內(nèi)容的定義,每個元素被賦予名稱和類型。元組可以使用字符或基于表達式的賦值來創(chuàng)建。在OCL中,元組是使用被花括號包圍的一系列“名稱-類型”對和可選值來定義的,其定義形式如下所示:Tuplename:String=Jim,age:Integer=23元組只是將一組值集合在一起的一種途徑,然后元組必須被賦予一個變量。以下表達式使用def表達式來創(chuàng)建一個代理類元上下文內(nèi)叫sales的新屬性。,19,13.9OCL標準庫,OCL標準庫(StandardLibrary)定義用于開成OCL表達式的所有可用的OCL類型,每種類型都有一組可用于該類型對象的操作,有時還會有屬性。OCL中預定義的標準類型包括基本類型和集合類型,OCL的標準類型分布呈現(xiàn)一種層次結(jié)構(gòu)。,20,13.9.1OclVoid和OclAny類型,OclVoid類型是與所有其他類型相一致的一種類型,它只有一個叫OclUndefined的實例,應用于未定義類型的任何特性調(diào)用,除了oclIsUndefined()返回“真”,其他都會產(chǎn)生OclUndefined。colIsUndefined():Boolean如果對象與OclUndefined相同,那么oclIsUndefined()的計算結(jié)果為“真”。OclAny類型是一個UML模型里所有類型和OCL標準庫的父類,它包括了諸多子類例如Real、Boolean、Sring、OclState和Integer等,如圖13-3所示。模型里所有的子類都繼承由OclAny定義的特性。下面是對所有OclAny中操作的描述。=(object:OclAny):Boolean如果self與object是同一對象,則返回值為“真”。post:result=(self=object)(object:OclAny):Boolean如果self是一個與object不同的對象,則返回值為“真”。pre:result=(selfobject),21,13.9.2OclMessage類型,OclMessage是一個模板類,不能被直接初始化,而可以通過參數(shù)來初始化。每個OCL消息類型實際上是帶一個參數(shù)的模板類型,創(chuàng)建OCL消息實例時將參數(shù)替換為一個操作或信號來實現(xiàn)。每個OclMessage類型完全由作為參數(shù)的操作或信號確定,并且每種OclMessage類型都將操作或信號的名稱以及該操作的所有形式參數(shù)或該信號的所有屬性作為OclMessage類型的屬性。,22,13.9.3集合類型,前面也對集合類型有過概述,集合(Collection)是OCL標準庫中所有集合類型的父類。所有子類包括Set、Bag和Sequence。每種類型都是帶有一個參數(shù)的模板類型,具體集合類型是通過將該參數(shù)替換為某種類型來創(chuàng)建。,23,13.9.4模型元素類型,模型元素類型是一種枚舉類型,它們允許建模人員引用在UML模型中定義的元素。模型元素類型中某些特性可被用于在使用對象之前計算該對象。使用這些特性的標準操作提供
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 語文-福建省漳州市2025屆高三畢業(yè)班第三次教學質(zhì)量檢測(漳州三檢)試題和答案
- 《探索與發(fā)現(xiàn):三角形邊的關(guān)系》(教學設計)-2023-2024學年四年級下冊數(shù)學北師大版
- 鄉(xiāng)村公路養(yǎng)護合同范例
- 幼兒園小班角色游戲與社會認知計劃
- 賣車正規(guī)交易合同范例
- 高中教師工作計劃
- 如何在變化中保持年度目標的穩(wěn)定計劃
- 加強行業(yè)知識的學習目標計劃
- 信貸行業(yè)月度個人工作計劃
- 社團資源整合優(yōu)化計劃
- 高管履歷核實調(diào)查報告
- 2024-2030年中國澆筑型聚氨酯彈性體(CPU)行業(yè)前景研判與應用需求潛力分析報告
- 制作塔臺模型課件科學六年級下冊教科版
- 中國新能源汽車“車電分離”行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報告2024-2029版
- 雙t板屋面施工方案
- 【消毒供應中心護理人員職業(yè)暴露與安全防護探究5200字(論文)】
- 2025年湖南省邵陽市新寧縣初三第一次聯(lián)考綜合試題含答案
- 2024-2025學年新教材高中地理 第三章 產(chǎn)業(yè)區(qū)位因素 第二節(jié) 工業(yè)區(qū)位因素及其變化(2)教案 新人教版必修2
- 財務管理委托代理會計服務 投標文件(技術(shù)方案)
- 常用焊管規(guī)格表
- 認知心理學:認知科學與你的生活
評論
0/150
提交評論