亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于動態(tài)系統(tǒng)實現(xiàn)復(fù)合斷言計算的方法

文檔序號:6375386閱讀:1343來源:國知局
專利名稱:一種基于動態(tài)系統(tǒng)實現(xiàn)復(fù)合斷言計算的方法
一種基于動態(tài)系統(tǒng)實現(xiàn)復(fù)合斷言計算的方法本專利申請為2008年9月10日提交的發(fā)明名稱為“復(fù)合斷言和動態(tài)的系統(tǒng)定義和⑶I”的中國專利申請No. 200880002646. 6的分案申請。中國專利申請No. 200880002646. 6要求2007年9月11日提交的發(fā)明名稱為“System and GUI for specifying composite predicates AND DYNAMIC SYSTEMS”美國臨時專利申請No. 60/993, 258的優(yōu)先權(quán),在此以引證的方式并入其全部內(nèi)容。
技術(shù)領(lǐng)域
本發(fā)明是有關(guān)于圖形表達(dá)法或者圖形語言的設(shè)計,用來描述斷言、布爾表達(dá)式、條件表達(dá)式、流程控制、活動、業(yè)務(wù)流程、系統(tǒng)行為以及如何借助軟件工具來進(jìn)行系統(tǒng)行為的實施。
背景技術(shù)
由于基于文本的電腦語言具有連貫順序的特性,而對一個有很多并行活動的復(fù)雜行為,比如業(yè)務(wù)流程,用文本型語言就不太容易來描述。半個世紀(jì)以來,流程圖已被用于克服文本型語言的這個弱點。但是,流程圖有它自己的局限性。近年來,許多新的電腦圖形語言被設(shè)計出來用以克服其中的一些限制,比如Business Process ModelingNotation (BPMN)、United Modeling Language (UML)活動圖(Activity Diagram)和動態(tài)系統(tǒng)圖(Dynamic Systems Chart, DSC)。雖然相對于流程圖有很多改進(jìn),但這些新的圖形語言仍有一個和流程圖同樣的弱點,就是在描述復(fù)雜判斷或者條件時,仍然是使用了基于文本型的表達(dá)式。在流程圖中,決策點(decision point) —般是用菱形來表示的。在菱形的內(nèi)部,布爾表達(dá)式則是用文本描述的。一個決策點可以有兩個或者更多向外的箭頭,而每個箭頭則指向下一個步驟。例如,一個菱形有兩個箭頭。菱形里面的布爾表達(dá)式可以定義為“X和Y”,一個箭頭可能被標(biāo)注為“真”,另一個箭頭可能被標(biāo)注為“假”。這個決策點所描述的是,如果X和Y都為真,為“真”的箭頭將會繼續(xù)。否則,為“假”的箭頭將會繼續(xù)。在BPMN中,有多種形式的“Gateway”用來描述一個決策點。一個“ConditionExpression"屬性可以用來定義一個Gateway或者其向外的箭頭(在BPMN中叫做“sequence flow”)。而這個 ConditionExpression 屬性通常是用 XML Path Language(XPath)的基于文本的表達(dá)式來定義的。在UML活動圖(Activity Diagram)中,一個決策節(jié)點(node)可以有多個向外的直線(edge),其中每條直線有一個guard條件定義了什么情況下該直線將被選擇。UML活動圖中的join節(jié)點也可以有一個join條件的定義,該join條件的定義描述了在什么情況下會沿著其單一的輸出直線繼續(xù)。在這兩種情況下,這些條件都是由基于文本的布爾表達(dá)式來定義的。DSC是一種以動態(tài)系統(tǒng)(Dynamic System, DS)為單元來描述行為的圖形語言。在DSC中,有兩個地方需要制訂決策。一個是在和遷移箭頭相關(guān)聯(lián)的遷移條件中,另一個是在和結(jié)束點相關(guān)聯(lián)的結(jié)束條件中。遷移條件和結(jié)束條件都可以定義為布爾表達(dá)式。當(dāng)描述一個簡單條件時,基于文本的布爾表達(dá)式就可以做的很好,比如“X和Y”。但是,當(dāng)描述一個需要使用“和”或“或”的邏輯操作符來連接多個簡單表達(dá)式的復(fù)雜條件時,由于下面一些原因,一個基于文本的布爾表達(dá)式就不是很理想了。首先,基于文本的行為描述、復(fù)雜布爾表達(dá)式可能是違反直覺的,因為運算的順序依賴于一些隱含的優(yōu)先法則。比如“A| B&&C ID&&E”是一個C/C++/Java表達(dá)式,其中,I I代表“或”的邏輯符,而&&代表“和”的邏輯符。在這些編程語言中,有一些隱含的優(yōu)先法則,比如&&比I I有更高的優(yōu)先級。因此,“Al B&&C |D&&E”實際上意味著“Al I (B&&C) I I (D&&E)”,而不是一些人可能期望的 “((A| B)&&C |D)&&E”。第二,基于文本的布爾表達(dá)式在同一時間只能有兩個操作數(shù),所以不能同時操作多個操作數(shù)。如果許多操作數(shù)需要被同時檢驗,就需要重復(fù)定義一些邏輯操作符,比如AND和0R。例如如果我們想要描述一個條件“A,B,C,D,和E全都為真”,那么表達(dá)式必須定義 為“A&&B&&C&&D&&E”。而理想情況下,應(yīng)當(dāng)不需要重復(fù)地定義這些邏輯操作符。另外,因為同一時間只有兩個操作數(shù)被運算,重復(fù)應(yīng)用這些操作符無意中可能產(chǎn)生一些不必要的副作用。第三,當(dāng)有多個操作數(shù)時,基于文本的布爾表達(dá)式通常不能描述若這些操作數(shù)中有任何兩個為真,該條件即滿足。它也不能描述若這些操作數(shù)中至少或者至多有兩個為真,該條件即滿足。如果一個決策是基于有多少個為真的操作數(shù),那么又如何來定義呢? 一個布爾表達(dá)式是沒有一個機(jī)制來簡單地處理這些情況的。但是,這些都是可能需要在電腦系統(tǒng)中被描述的現(xiàn)實世界的條件。第四,一個布爾表達(dá)式通常只被運算為兩個不同的結(jié)果,叫做是(真)或者否(偽)。但用來定義需要同時選擇多個選項的一個決策,這就不合適了。為了要定義一個決策的多個選項,這些多個選項中的每個都要定義一個布爾表達(dá)式,使得當(dāng)相關(guān)聯(lián)的布爾表達(dá)式被測試為真時,這些選項中的一個就會被選擇。在BPMN中,可以通過為一個Gateway的每個向外的sequence flow定義一個布爾表達(dá)式來做到這點。如果該條件比較簡單,這個方法是可行的。但是,對于比較復(fù)雜的條件,寫多個長的布爾表達(dá)式會顯得冗長。比如,下面是可能需要定義布爾表達(dá)式的部分列表I)如果年齡小于5歲,宗教信仰為X,國籍為A ;2)如果年齡小于5歲,宗教信仰為Y,國籍為A ;3)如果年齡大于20歲,宗教信仰為X,國籍為B ;4)如果年齡大于20歲,宗教信仰為X,國籍為C等等。最壞的情況下,需要定義Ν*Μ*0個布爾表達(dá)式,其中N是年齡范圍,M是宗教種類數(shù)目,O是國家種類數(shù)目。更壞的情況下,為了找到一個為真的條件,年齡、宗教、國籍可能會被重復(fù)測試Ν*Μ*0次。因此,有必要對復(fù)雜條件有更加結(jié)構(gòu)化的描述。第五,復(fù)雜的決策邏輯和條件不能像其他行為的定義一樣用圖形來顯示。因為決策邏輯是任何復(fù)雜行為的基礎(chǔ)部分,如果仍然保持復(fù)雜決策邏輯為文本的形式,則不能達(dá)到將一個計算機(jī)系統(tǒng)行為徹底地圖形化。需要解決的問題是如何將復(fù)雜的決策和條件也能以圖形語言來描述,并克服了上面談到的所有基于文本的布爾表達(dá)式的不足。本發(fā)明就提供了這樣一個解決方案。

發(fā)明內(nèi)容
本發(fā)明描述了 如何使用復(fù)合斷言和圖形用戶界面(GUI)來定義作為計算機(jī)系統(tǒng)行為的一部分的復(fù)雜決策或者條件。此外,可以對復(fù)合斷言的GUI廣義化,使得計算機(jī)系統(tǒng)的整個行為都可以用一致的方式圖形化地加以描述。本發(fā)明的一個目的是在應(yīng)用系統(tǒng)中通過圖形表現(xiàn)來定義復(fù)雜決策和復(fù)雜條件,從而能夠更加方便地理解系統(tǒng)中的決策是如何做出來的。另一個目標(biāo)是改進(jìn)如何對可能有多個參數(shù)和多個結(jié)果的復(fù)雜決策或者條件進(jìn)行定義。為了達(dá)到這些目標(biāo),本發(fā)明中提供了如何定義復(fù)合斷言的系統(tǒng)和如何圖形化地展示這些復(fù)合斷言。
本發(fā)明使用復(fù)合斷言來描述復(fù)雜決策或者條件。復(fù)合斷言有如下組件1)子斷言;2)遷移;3)終點;4)結(jié)束點。并且描述了處理或者執(zhí)行一個復(fù)合斷言的過程。本發(fā)明也描述了如何使用一種圖形語言將復(fù)合斷言用圖形展現(xiàn)出來,包括動態(tài)系統(tǒng)圖(DSC),BPMN和UML活動圖。為了描述計算機(jī)系統(tǒng)更多的常見行為,復(fù)合斷言的復(fù)合結(jié)構(gòu)被廣義化為復(fù)合動態(tài)系統(tǒng)(以下簡稱為復(fù)合DS)。一個復(fù)合DS有如下組件1)子動態(tài)系統(tǒng)(子DS) ;2)遷移;3)起點;4)終點;5)結(jié)束點。并描述了一個復(fù)合DS如何用圖形來顯示。另外,本發(fā)明提供了一些方法來擴(kuò)展已有的圖形語言,來描述和支持復(fù)合DS的構(gòu)造,比如BPMN和UML活動圖。最后,提供了一些典型的例子來展示如何將本發(fā)明應(yīng)用在各個方面。參考了本說明的其余部分,包括圖片和權(quán)利要求,可實現(xiàn)本發(fā)明的其他特性和優(yōu)點。下文用附圖及參考資料中的類似功能來對本發(fā)明的特性和優(yōu)點以及其結(jié)構(gòu)和各種例子的操作做了更詳細(xì)的描述。

圖I是一個簡化的框圖(block diagram),顯示了一個分布式計算機(jī)環(huán)境的例子;圖2是一個簡化的框圖,闡明了可用于實施本發(fā)明的計算機(jī)系統(tǒng);圖3顯示了一個復(fù)合DS ;圖4顯示了復(fù)合斷言的通用形式;圖5顯示了一個復(fù)合斷言的特例;圖5A顯示了在序列中如何定義一個并行子斷言。圖5B顯示了一個復(fù)合斷言的具體例子。圖6顯示了一個帶有隱含終點的復(fù)合斷言;圖7顯示了一個帶有一個V結(jié)束條件的復(fù)合斷言;圖8顯示了一個帶有“等于N”的復(fù)合斷言;圖9顯示了一個帶有Λ結(jié)束條件的復(fù)合斷言;圖10顯示了一個帶有“小于等于N”結(jié)束條件的復(fù)合斷言;圖11顯示了一個嵌套的復(fù)合斷言;圖12顯示了一個簡化的復(fù)合斷言,該斷言省略了終點;圖13顯示了一個簡化的復(fù)合斷言,該斷言省略了 “Yes”遷移條件;圖14顯示了一個簡化的復(fù)合斷言,該斷言省略了遷移條件;
圖15顯示了一個復(fù)合斷言的例子,該斷言以“Yes”作為指向一個終點的遷移箭頭的遷移條件;圖16顯示了一個簡化的復(fù)合斷言,該斷言以“Yes”為遷移條件并且省略了終點;圖17顯示了一個簡化的復(fù)合斷言,該斷言省略了默認(rèn)的結(jié)束點;圖18是一個有多個簡單斷言的例子;圖19是一個流程圖,顯不了如何運算一個復(fù)合斷目;圖20顯不了如何用一個復(fù)合斷言來描述一個復(fù)雜決策;圖21顯示了使用復(fù)合斷言描述復(fù)雜決策的另一種方法;圖22顯示了在UML中如何在決策節(jié)點中使用復(fù)合斷言;圖23顯示了在UML中如何將復(fù)合斷言用作活動節(jié)點;圖24是一個BPMN圖例,其復(fù)雜Gateway定義為一個復(fù)合斷言;圖25顯示了在BPMN中如何將復(fù)合斷言用作一個活動;圖26為空圖;圖27顯示了在BPMN的擴(kuò)展版本中如何模擬圖4中的復(fù)合斷言;圖28是一個復(fù)合斷言的例子,該斷言只有并行的子斷言;圖29顯示了和圖28同樣的復(fù)合斷言,該斷言有一個“Yes”結(jié)束點;圖30顯示了在BPMN的擴(kuò)展版本中如何模擬圖29中的復(fù)合斷言;圖31是一個有2個序列的復(fù)合斷言;圖32顯示了在BPMN的擴(kuò)展版本中如何模擬圖31中的復(fù)合斷言;圖33顯示了在BPMN的擴(kuò)展版本中一個模擬復(fù)合斷言如何用作Gateway ;圖34顯示了在BPMN的擴(kuò)展版本中一個模擬復(fù)合斷言如何當(dāng)作Activity來用;圖35顯示了在UML活動圖的擴(kuò)展版本中如何模擬圖4中的復(fù)合斷言;圖36顯示了在UML活動圖的擴(kuò)展版本中如何模擬圖29中的復(fù)合斷言;圖37顯示了在UML活動圖的擴(kuò)展版本中如何模擬圖31中復(fù)合斷言;圖38A顯示了在UML活動圖的擴(kuò)展版本中模擬復(fù)合斷言如何當(dāng)作decision節(jié)點來用。圖38B顯示了在UML活動圖的擴(kuò)展版本中模擬復(fù)合斷言如何當(dāng)作Activity節(jié)點來用。圖39顯示了在一般的圖形語言中如何模擬一個復(fù)合斷言;圖40顯示了在BPMN的擴(kuò)展版本中如何模擬圖3中一個復(fù)合DS ;圖41顯示了在UML活動圖的擴(kuò)展版本中如何模擬圖3中的一個復(fù)合DS ;圖42是一個嵌套復(fù)合DS的例子。圖43顯示了在BPMN的擴(kuò)展版本中,如何模擬圖42中的一個嵌套復(fù)合DS ;圖44顯示了在UML的擴(kuò)展版本中如何模擬圖42中的嵌套復(fù)合DS ;圖45顯示了復(fù)合斷言的一個例子,該復(fù)合斷言帶有一個子簡單斷言和一個間接結(jié)束點;圖46顯示了復(fù)合斷言的一個例子,該復(fù)合斷言帶有一個子復(fù)合斷言和一個間接結(jié)束點;圖47顯示了復(fù)合斷言的一個例子,該復(fù)合斷言帶有一個子簡單斷言、一個遷移和Iv間接結(jié)束點;圖48顯示了復(fù)合斷言的一個例子,該復(fù)合斷言帶有兩個子簡單斷言和一個間接結(jié)束點;圖49顯示了復(fù)合斷言的一個例子,該復(fù)合斷言帶有一個子簡單斷言、一個子復(fù)合斷言和一個間接結(jié)束點;圖50顯示了復(fù)合斷言的一個例子,該復(fù)合斷言帶有一個子簡單斷言、一個遷移和一個直接結(jié)束點;圖51顯示了復(fù)合斷言的一個例子,該復(fù)合斷言帶有兩個子簡單斷言、一個遷移和一個直接結(jié)束點;圖52顯示了復(fù)合斷言的一個例子,該復(fù)合斷言帶有一個子復(fù)合斷言、一個遷移和一個直接結(jié)束點。
具體實施方式現(xiàn)在將以一個或者多個例子的形式對本發(fā)明進(jìn)行描述。在下面的描述中,將列出諸多細(xì)節(jié),以對本發(fā)明進(jìn)行更全面的描述。對于本領(lǐng)域的技術(shù)人員它是顯而易見的,即使缺了這些細(xì)節(jié),也是可以應(yīng)用本發(fā)明的。為了避免不必要的混亂,對于一些眾所周之的特性,就不作詳細(xì)描述了。許多計算機(jī)系統(tǒng)都有復(fù)雜的行為。本發(fā)明使用動態(tài)系統(tǒng)(Dynamic-SystenuDS)來描述計算機(jī)系統(tǒng)的內(nèi)部行為。為了向人類用戶顯示計算機(jī)系統(tǒng)的內(nèi)部行為,本發(fā)明提供了一些圖形語言作為人機(jī)交互接口,以方便理解所描述的復(fù)雜行為。一個設(shè)計工具可以使用其中的一種圖形語言,來讓用戶定義計算機(jī)系統(tǒng)的行為。另一個設(shè)計工具也可以使用其中的一種圖形語言,在圖形化的屏幕上展示計算機(jī)系統(tǒng)運行時的行為。 為了執(zhí)行一些有用的功能,一個計算機(jī)系統(tǒng)可能需要做出復(fù)雜的決策。本發(fā)明用斷言構(gòu)造來定義決策的內(nèi)部行為。用戶可以使用本發(fā)明中提供的一種圖形語言,將斷言的行為用圖形來顯示。本發(fā)明中所描述的復(fù)雜行為,包含了復(fù)雜決策,可以廣泛地應(yīng)用在實時或者分布式環(huán)境中的軟件或者硬件系統(tǒng)中,如圖I所示。一個分布式環(huán)境通常由多個硬件系統(tǒng)構(gòu)成,這些硬件系統(tǒng)由網(wǎng)絡(luò)連接起來。每個硬件系統(tǒng)有一個或者多個中央處理器(CPU)、內(nèi)存(ROM,RAM,磁盤)、輸入和輸出設(shè)備,如圖2所示。在這樣的硬件系統(tǒng)上運行的計算機(jī)系統(tǒng)的行為可以顯示在輸出設(shè)備上,而以圖形化顯示來操作系統(tǒng)行為的用戶輸入則可以用輸入設(shè)備來采集。硬件系統(tǒng)通常是一臺計算機(jī),也可能是個人數(shù)據(jù)助理(Personal DataAssistant)、多功能電話、膝上計算機(jī)、桌上計算機(jī)、工作站(workstation)、大型計算機(jī)、實時控制設(shè)備、網(wǎng)絡(luò)設(shè)備或者其它任何一種提供計算和輸入/輸出性能的設(shè)備。下面的部分將描述DS、斷言并用圖形來表現(xiàn)出其技術(shù)特性。用DSC來定義一個復(fù)雜行為DSC是一個用DS來描述復(fù)雜行為的圖形語言。基本上,每個計算機(jī)系統(tǒng)的行為都可以用一個DS描述。一個DS有一個“結(jié)果”屬性來記錄其執(zhí)行的結(jié)果狀況。一個DS既可以是簡單的也可以是復(fù)合的。一個復(fù)合DS可以在更低的層次分解為多個子DS,而一個簡單DS則不可以被進(jìn)一步分解。一個復(fù)合DS內(nèi)部有以下組件1) 一個或者更多的子DS ;2)零個或者更多的起點;3)零個或者更多的終點;4)零個或者更多的遷移;5)零個或者更多的結(jié)束點。圖3顯示了一個復(fù)合DS,為一個包含了上述組件的復(fù)合框310。復(fù)合DS的名字顯示在一個小的標(biāo)簽框300中,該標(biāo)簽框在復(fù)合框的上沿。“DS0”復(fù)合DS有6個子DS :“sub-DSr’301, “sub-DS2”302, “sub_DS3”303, “sub_DS4”304, “subDS5”305 和“sub_DS6”306。復(fù)合DS的一個子DS既可以是順序的,也可以是并行的。一個并行子DS與其它的子DS相互獨立,而一個順序子DS則至少有I個遷移連接到另一個順序型的子DS。每個遷移有一個遷移箭頭和一個遷移條件。遷移箭頭顯示為一個從源頭子DS指向目標(biāo)子DS的箭頭,而相應(yīng)的遷移條件則顯示為箭頭旁邊的一個標(biāo)簽。源頭子DS完成其執(zhí)行后,檢測其每一個往外的遷移箭頭所關(guān)聯(lián)的遷移條件。如果任何一個為真,就選擇與其遷移箭頭相關(guān)聯(lián) 的目標(biāo)子DS來作為下一步將要執(zhí)行的子DS。例如,如圖3所示,“sub-DS3”303有2個遷移箭頭,其中一個指向終點307 (顯示為一個小實心方塊),另外一個指向“sub-DS5”305。與指向終點307的遷移箭頭相聯(lián)系的遷移條件為“cond5”,與指向“sub-DS5”的遷移箭頭相聯(lián)系的遷移條件是“cond6”。所有被一個或者多個遷移箭頭連接在一起的順序型子DS組成了復(fù)合DS中的一個序列。例如圖3中的“sub-DSl” 301和“sub-DS2”組成第一個序列,而“sub-DS3”303, “sub_DS4”304 和“sub_DS5”305 組成“DS0”300 中的第二個序列。為了區(qū)分一個復(fù)合DS中的不同的序列,復(fù)合DS中的每個序列都有一個唯一的內(nèi)部標(biāo)識“序列-ID”以便區(qū)分。一個序列中除了有順序型子DS,也可以有多個起點和終點。每個起點可以有多個往外的遷移。一個起點可以在包含它的復(fù)合DS內(nèi)部顯示為一個空的正方形。例如圖3中的起點309有兩個遷移。其中一個遷移條件是“cond3”,另一個遷移條件是“cond4”。序列中的每個終點可以有一個名字或者一個標(biāo)識符,并且顯示為一個實心正方形。例如,如圖3所示,“DS0”300的第二個序列中,“EP2”307是一個終點,“EP3”308是另一個終點。當(dāng)復(fù)合DS開始執(zhí)行的時候,其所有的序列可以同時開始執(zhí)行。但在一個序列中,在任何時候只能執(zhí)行其中一個順序型子DS。一個序列是從它的一個起始子DS開始執(zhí)行,這個起始子DS既可以是沒有被任何遷移箭頭所指向的子DS,也可以是源自起點的一個遷移箭頭所指向的目標(biāo)子DS。如果一個序列中有不止I個起始子DS,只有其向內(nèi)的遷移條件為真的子DS才會被選中。例如當(dāng)圖3中的“DS0”300開始,作為第一個序列中唯一的起始子DS,“sub-DSI”301開始執(zhí)行。另外,當(dāng)“DS0”開始,第二個序列也開始。如果“cond3”為真,“sub-DS3” 303開始執(zhí)行,而如果“cond4”為真,則“sub_DS4” 304會開始。在序列中,順序型子DS會一個接一個地執(zhí)行,直到抵達(dá)了終點。抵達(dá)終點時,包含該終點的序列即終止,而該終點的內(nèi)部終止值會被記錄下來。稍后,包含它的復(fù)合DS的結(jié)束條件可能需要檢查這個終止值。不像一個順序型的子DS,一個復(fù)合DS中的并行子DS沒有連接到任何遷移。當(dāng)一個復(fù)合DS開始執(zhí)行,其所有并行子DS可以隨著所有其他序列同時開始。例如,圖3中,“sub-DS6”306 是一個并行子 DS,當(dāng) “DS0” 300 開始時,“sub_DS6” 306 也開始。從另一個方面來看,一個并行子DS可以視為是一個只有一個子DS的序列,該子DS只有一個遷移條件為“Yes”的遷移,直接指向一個名為“Yes”的終點。因此,如果一個并行子DS以一個正值結(jié)束,它可以被視為與其相對應(yīng)的序列以一個正的終止值而終止。所以本文檔之后的部分,并行子DS也可以視為這種特殊的序列。一個復(fù)合DS可能有多個結(jié)束點,每個結(jié)束點內(nèi)部都有一個相應(yīng)的結(jié)束值。一個結(jié)束點可能是直接的,也可能是間接的。除了相聯(lián)系的結(jié)束值,直接結(jié)束點還可以有一個名字。當(dāng)?shù)?達(dá)一個直接結(jié)束點時,復(fù)合DS即結(jié)束,其“結(jié)果”屬性設(shè)為剛到達(dá)的結(jié)束點的結(jié)束值。直接結(jié)束點可以顯示為直接由一個遷移箭頭指向的一個實心三角形,而其名字則顯示在實心三角形的旁邊。例如圖3中的“DS0”300有2個直接結(jié)束點,叫做“Result0”311和“Result3” 314。和“cond2”遷移條件相應(yīng)的遷移箭頭指向“ResultO”結(jié)束點jP“cond9”遷移條件相應(yīng)的遷移箭頭則指向“Result3”結(jié)束點?!皊ub_DS2”302結(jié)束時,如果“cond2”為真,則抵達(dá)“ResultO” 311結(jié)束點。當(dāng)?shù)诌_(dá)“ResultO”結(jié)束點時,“DS0”復(fù)合DS就結(jié)束了,其“結(jié)果”設(shè)為與“ResultO”結(jié)束點相聯(lián)系的結(jié)束值。一個間接結(jié)束點顯示為一個和任何子DS都不相連的實心三角形。除了結(jié)束值外,一個間接結(jié)束點還可以有一個名字和一個結(jié)束條件。結(jié)束條件描述了在什么情況下該復(fù)合DS就會結(jié)束,并且將其“結(jié)果”設(shè)為與該間接結(jié)束點相聯(lián)系的結(jié)束值。一個用戶定義的間接結(jié)束點顯示為一個實心三角形,并在旁邊顯示其結(jié)束條件。例如,圖3中的“DS0”300有2個用戶定義的間接結(jié)束點“Resultl” 312和“Yes” 313。當(dāng)一個序列結(jié)束時,復(fù)合DS中的每個結(jié)束條件都會被檢驗。如果任何結(jié)束條件的結(jié)果運算為正,該復(fù)合DS則結(jié)束,其“結(jié)果”設(shè)為相應(yīng)結(jié)束點的結(jié)束值。例如,如圖3所示,當(dāng)?shù)诌_(dá)” EP2 ” 或者 “ EP3 ” 時,或者 “ sub-DS6 ” 306 結(jié)束時,“ Exi tCondI ” 和 “ Exi tCond2 ”都要被檢驗。如果“ExitCondl”的結(jié)果被檢驗為正,則“DS0” 300結(jié)束,其“結(jié)果”設(shè)為“Resultl” 312的結(jié)束值。另一方面,如果“ExitCond2”的結(jié)果運算為正,“DS0” 300結(jié)束,其“結(jié)果”設(shè)為“Yes”313的結(jié)束值。如果所有的結(jié)束條件都不為真,復(fù)合DS會繼續(xù)執(zhí)行直到所有的序列都結(jié)束為止。除用戶定義的結(jié)束點之外,每個復(fù)合DS有一個系統(tǒng)預(yù)定義的間接的隱含結(jié)束點。這個隱含結(jié)束點的名字是“No”,結(jié)束條件是“Else”。當(dāng)所有的序列都結(jié)束后,并且所有用戶定義的結(jié)束條件都沒有正的結(jié)果,復(fù)合DS即在這個隱含的結(jié)束點處結(jié)束,將其“結(jié)果”設(shè)為“No”結(jié)束點的結(jié)束值。為了把“No”結(jié)束點和其他用戶定義的結(jié)束點相區(qū)分開來,用戶定義的每個結(jié)束點都有一個正值,而“No”結(jié)束點的結(jié)束值則有一個非正值。在擴(kuò)展版的DSC中來定義一個復(fù)雜斷言在基本的DSC中,一個斷言只能以基于文本的表達(dá)式來定義,比如圖3中的“condl”或者“ExitCondl”。本發(fā)明擴(kuò)展了基本的DSC,一個斷言也能用一種圖形符號來定義。下一節(jié)描述了帶有斷言的DSC擴(kuò)展版,該斷言是用與DSC有同樣風(fēng)格的圖形來定義的。基本上,在本發(fā)明中,斷言的目的是為了做決策時來檢驗一個條件集。例如,一個遷移條件是用來決定是否要沿著與其相聯(lián)系的遷移箭頭走下去。一個斷言通常檢驗一些反映了當(dāng)前狀況的數(shù)據(jù),并且該斷言檢驗出一個結(jié)果,其值可能是正值也可能是非正值。結(jié)果可以存儲在內(nèi)存中,比如高速緩存(cache)或者數(shù)據(jù)寄存器(register),用來決定下面將執(zhí)行哪個操作。如果一個斷言檢驗為正值,就意味著滿足了一個條件。另一方面,如果一個斷言檢驗為一個非正值,它意味著不滿足任何所需要的條件。傳統(tǒng)的布爾型斷言通常運算為2個可能的結(jié)果,即真或假。但是,本發(fā)明中的斷言被擴(kuò)展為支持多個正的結(jié)果值,而只有I個非正的結(jié)果值。換句話說,本發(fā)明中的斷言運算為一個非正的結(jié)果值,或是多個正的結(jié)果值的其中之一。支持多個正的結(jié)果值的原因是由于在現(xiàn)實世界的很多應(yīng)用中,一個決策既可以繼續(xù)也可以不繼續(xù)處理或者執(zhí)行某些應(yīng)用數(shù)據(jù)。如果一個決策要繼續(xù),則可以有多種不同的方式來處理。如果一個斷言只支持一個正的結(jié)果值和一個非正的結(jié)果值,從2種以上的繼續(xù)處理方式中作選擇,則需要定義一系列的斷言。反之,一個帶有多個正的結(jié)果值的斷言可以決定是否繼續(xù)處理,如果決定要繼續(xù),通過使用不同的正值可以決定從多種不同方式中選哪一種來處理。通常,一個支持多個正的結(jié)果值的斷言比只支持一個正的結(jié)果值和一個非正的結(jié)果值的斷言會更加有效和靈活。本發(fā)明中,斷言既可以是簡單的,也可以是復(fù)合的。一個簡單斷言不能被進(jìn)一步分解,而一個復(fù)合斷言可以被分解成若干組件。一個復(fù)合斷言和一個復(fù)合DS有相似的組成結(jié) 構(gòu),除了“結(jié)果”屬性之外,還有如下組件1) 一個或多個子斷言;2)零個或多個終點;3)零個或多個遷移;4)零個或多個結(jié)束點。唯一少了的組件是起點,在復(fù)合斷言中是不需要起點的。圖4將一個復(fù)合斷言顯示為用帶圓角的復(fù)合框414來包含其組件。其名稱為“PredO”,顯示為復(fù)合框上沿的一個小標(biāo)簽盒400中。復(fù)合斷言“PredO”有6個子斷言,它們是“Sub-predl ”401,“Sub_pred2”402, “Sub_pred3”403, “Sub_pred4”404,“Sub_pred5”405,和“ Sub-pred6 ” 406。復(fù)合斷言中的這些子斷言是在下一層的斷言,它們既可以是順序的,也可以是并行的。一個順序子斷言有至少一個遷移連接到另一個順序子斷言。一個遷移有一個遷移箭頭和一個遷移條件。一個遷移箭頭可以顯示為一個箭頭,其遷移條件可以顯示在箭頭的旁邊。例如圖 4 中的 “Sub-predr’401, “Sub_pred2” 402,“Sub_pred3” 403,和“Sub-pred4”404是順序型子斷言,因為它們中的每個都至少有一個連接到其它順序型子斷言的遷移箭頭。“Sub-predr’401有一個遷移,其遷移條件為“TransCondl”,而“ Sub-pred3 ” 403 有 2 個遷移,其遷移條件為 “ TransCond3 ” 和 “ TransConcM ”。所有這些由I個或者多個遷移箭頭連接在一起的順序型子斷言組成了一個序列。例如,圖 4 中的“Sub_predl”401 和“Sub_pred2” 402 組成第一個序列,而“Sub_pred3” 403和“Sub-pred4”404組成第二個序列。為了區(qū)分不同的序列,復(fù)合斷言中的每個序列都可以配有一個叫做Sequence-ID的唯一標(biāo)識。除了順序型子斷言之外,一個序列還可以有多個用戶定義的終點。每個用戶定義的終點可以有一個名字,終點顯示為一個實心方框。例如,圖4中的第二個序列中,“EP2”408和“EP3”409是用戶定義的終點。當(dāng)開始執(zhí)行復(fù)合斷言的檢驗的時候,其所有的序列可以同時開始。但在一個序列中,在同一時間內(nèi)只能對一個子斷言執(zhí)行檢驗。序列的檢驗起于初始子斷言,一個初始子斷言是沒有被任何遷移箭頭指向的一個順序型子斷言。例如,圖4中的“Sub-predl”是第一個序列中的初始子斷言,“Sub_pred3”是第二個序列中的初始子斷言。每個子斷言被檢驗之后,從其多個可能的遷移箭頭中選擇下一個要檢驗的子斷言。下面描述了如何選擇下一個子斷言。
每個遷移箭頭都是從一個源頭子斷言指向一個目標(biāo)子斷言,并且它有一個相關(guān)的遷移條件。遷移條件描述了源頭子斷言的某個結(jié)果值。源頭子斷言執(zhí)行完以后,如果其“結(jié)果”和該遷移條件中描述的一樣,那么下一步即執(zhí)行該遷移箭頭的目標(biāo)。例如,圖4中所示,執(zhí)行完“Sub_pred3”403之后,如果“TransCond4”為真,下一步即執(zhí)行“Sub_pred4”404,如果“TranSCond3”為真,下一步即執(zhí)行“EP2”終點408。后面將會描述一個終點是如何被執(zhí)行的?!獋€用戶定義的遷移條件可以為1) “No”,2) “Yes”,3)源頭子斷言中的任何用戶定義的結(jié)束點名稱,或者4) “Else”。下面將詳述這四種定義I)遷移條件為“No”所表示的是如果源頭子斷言運算檢驗的結(jié)果為一個非正值,下面將執(zhí)行與該遷移箭頭相關(guān)聯(lián)的目標(biāo)。例如,圖5所示,“R”子斷言執(zhí)行完以后,如果其“結(jié)果”值是非正的,下一步將運行“S”子斷言。
2)遷移條件為“Yes”所表示的是如果源頭子斷言運算為任何一個正值,下面將執(zhí)行與該遷移箭頭相關(guān)聯(lián)的目標(biāo)。例如,圖5所示,“R”子斷言執(zhí)行完之后,如果其“結(jié)果”值為正,下一步將運行“EP2”終點508。3)遷移條件中帶有一個結(jié)束點名稱所表示的是如果源頭子斷言運算為該結(jié)束點的結(jié)束值,下面將執(zhí)行與該遷移箭頭相關(guān)聯(lián)的目標(biāo)。例如,圖5所示,“S”子斷言運行完之后,如果其“結(jié)果”為“S”子斷言的與“yesl”相關(guān)聯(lián)的結(jié)束值,下一步將運行“EP2”終點509。4)遷移條件為“Else”所表示的是如果源頭子斷言的所有其他遷移條件都不被滿足,下面將執(zhí)行與該遷移箭頭相應(yīng)的目標(biāo)。例如,圖5所示,執(zhí)行“S”子斷言之后,如果“yesl”遷移條件不被滿足,那么下一步將運行“EP3”終點“510。一個序列中的各個順序型子斷言依次執(zhí)行,直至一個終點為止。一旦到達(dá)一個終點,該序列停止,并記錄下與剛到達(dá)的終點相關(guān)的內(nèi)部終止值,以備結(jié)束條件在后面檢驗復(fù)合斷言中每個序列的終止?fàn)顟B(tài)。一個終點名字既可以是“Yes”(圖5中的507) ,“No”,也可以是一個用戶定義的名字。如果這些終點中的任何一個終點需要和其他終點區(qū)分開來,那么每個終點應(yīng)當(dāng)有唯一的名字,比如圖5中的“EP2”508或者“EP3”510。但是,如果這些終點中的某些終點不需要彼此區(qū)分,它們可以和別的終點共用同一個名字,既可以是“Yes”,“No”,也可以是用戶定義的名字。例如,圖5中的兩個終點508和509有同樣的名字“EP2”。終點507名字也為“Yes”,因為它不需要與其它可能的同名終點相區(qū)分。一個順序型子斷言執(zhí)行完之后,如果其用戶定義的遷移條件都不為真,就會到達(dá)一個預(yù)先定義的隱含終點(implicit End-point)。該行為是為了覆蓋到所有可能的情況,因為有些情況可能未被用戶定義的遷移條件所覆蓋到。隱含終點的行為可被視為對于每個源頭子斷言都加上一個預(yù)先定義的遷移箭頭,該遷移箭頭有一個定義為“Else”的遷移條件,并指向一個預(yù)先定義的“No”終點。例如,圖6顯示了圖5中叫做“P”和“Q”的子斷言加上這些隱含終點后的圖形。“P”子斷言601被執(zhí)行后,如果“結(jié)果”值不為正,下面將執(zhí)行隱含“No”終點604,這表明當(dāng)前序列已到達(dá)了終點,該序列的其余部分將不再執(zhí)行。和在普通終點終止一樣,和隱含終點相關(guān)聯(lián)的內(nèi)部終止值會被記錄下來,以備后面由復(fù)合斷言的結(jié)束條件來檢驗。這些預(yù)先定義的“Else”遷移條件和“No”終點雖然一直都存在,但它們通常并不顯示在圖中。
為了把用戶定義的終點和隱含終點區(qū)分開來,和“Yes”終點相關(guān)聯(lián)的終止值或者和任何用戶定義的終點相關(guān)聯(lián)的終止值可有一個正值,而和隱含終點相關(guān)聯(lián)的終止值則可有一個非正值。復(fù)合斷言中的結(jié)束條件可以通過檢驗每個被執(zhí)行的序列的終止值來決定該復(fù)合斷目是否終止。并行子斷言和順序型子斷言有所不同,它是沒有任何遷移箭頭的。例如,圖5中的“T”和“U”是并行的子斷言。執(zhí)行一個復(fù)合斷言時,其所有并行子斷言可以同時被執(zhí)行(和每個序列中的初始順序型子斷言一起執(zhí)行)。例如,當(dāng)圖5中的“A”復(fù)合斷言500開始時,“T”子斷言和“U”子斷言都開始執(zhí)行。從另一個角度來看,一個并行子斷言也可視為一個序列,該序列只有一個帶有一個往外的遷移的子斷言,其遷移條件定義為“Yes”,指向一個“Yes”終點。因此,如果一個并行子斷言以一個正值結(jié)束,它可以被視為與其相應(yīng)的序列以一個正值終止。圖5. A顯示了 圖5中的“T”和“U”并行子斷言是如何定義為序列的。因此,在下文中,并行子斷言也可視為序列的一種特例。一個復(fù)合斷言可以有多個結(jié)束點,其中每個結(jié)束點有一個相關(guān)聯(lián)的結(jié)束值。結(jié)束點可以是直接的,也可以是間接的。除了一個相關(guān)聯(lián)的“結(jié)束值”,一個直接結(jié)束點還可以有一個“名稱”。當(dāng)?shù)竭_(dá)一個直接結(jié)束點,復(fù)合斷言就結(jié)束,其結(jié)果設(shè)為與剛到達(dá)的直接結(jié)束點相關(guān)聯(lián)的結(jié)束值。一個直接結(jié)束點可以顯示為由一個遷移箭頭直接指向的實心三角形,其名稱顯示在實心三角形旁邊。一個結(jié)束點的名稱可用于識別該結(jié)束點本身。因為一個結(jié)束點的結(jié)束值只是用在結(jié)束點的內(nèi)部實現(xiàn)上,所以不需要顯示在圖形中。例如,圖4中的“Pred0”400有2個直接結(jié)束點“ResultO” 410和“Result3” 413。遷移條件為“TransCond2”的遷移箭頭指向“ResultO”結(jié)束點;遷移條件為“TransCond6”的遷移箭頭指向 “Result3” 結(jié)束點。當(dāng) “sub-pred2”402 結(jié)束時,如果 “TransCond2” 運算為真,“PredO”復(fù)合斷言結(jié)束,其結(jié)果設(shè)為與“ResultO”結(jié)束點相關(guān)聯(lián)的結(jié)束值。間接結(jié)束點沒有任何遷移箭頭,除了一個相關(guān)聯(lián)的結(jié)束值以外,一個間接結(jié)束點還可以有一個名字和一個結(jié)束條件。這個結(jié)束條件描述了一種情況,當(dāng)復(fù)合斷言在該情況下結(jié)束時,其結(jié)果將設(shè)為與該間接結(jié)束點相關(guān)聯(lián)的結(jié)束值。一個用戶定義的間接結(jié)束點也是用實心三角形來表示,其結(jié)束條件顯示在該三角形的底邊,其名字顯示在該三角形的上面或下面。例如,圖4中的“Pred0”400有2個用戶定義的間接結(jié)束點“Resultl”411和“Yes”412?!癛esultl”結(jié)束點411的結(jié)束條件是“ExitCondl”,而“Yes”結(jié)束點412的結(jié)束條件是 “ExitCond2”。每個結(jié)束點都有一個與之相關(guān)聯(lián)的內(nèi)部結(jié)束值,當(dāng)一個復(fù)合斷言在某個結(jié)束點處結(jié)束時,這個結(jié)束值會被記錄在“結(jié)果”屬性中。結(jié)束點的名字和結(jié)束值有一一對應(yīng)的關(guān)系。因此,如果從某些結(jié)束點處結(jié)束都會導(dǎo)致在下一步時將執(zhí)行同一個后續(xù)的順序型子斷言,那么這些結(jié)束點都應(yīng)當(dāng)有同樣的名字。如圖5所示,“A”復(fù)合斷言500中,結(jié)束條件511的名字是“yes3”,它和結(jié)束點512的名稱一樣。這種情況下,在其中任何一處結(jié)束都會為“A”復(fù)合斷言設(shè)置同樣的結(jié)果值,下一步都會執(zhí)行同樣的順序型子斷言“B”501。注意雖然“Yes”是一個系統(tǒng)預(yù)定義名稱,它也可作為一個用戶定義結(jié)束點的名稱。例如,圖5中結(jié)束點513的名稱為“Yes”。每當(dāng)一個序列終止時,在包含它的復(fù)合斷言中,每個間接結(jié)束點的結(jié)束條件都要被檢驗一次。例如,圖5所示,當(dāng)?shù)诌_(dá)“Yes”507,“EP2”508,“EP3”509,或者“EP3”510中的任何一個,或者“T”結(jié)束,或者“U”結(jié)束時,都要檢查“endedAt (Yes) ”結(jié)束條件511,“endedAt(EP2)”結(jié)束條件512和2”結(jié)束條件513。若有任何一個結(jié)束條件為真,復(fù)合斷言就會結(jié)束,將其結(jié)果設(shè)為與該結(jié)束點相關(guān)聯(lián)的結(jié)束值。如圖5所示,如果第一個序列到達(dá)“Yes”終點507,“yes3”結(jié)束點511的“endedAt (Yes) ”結(jié)束條件為真,復(fù)合斷言“A”500在“ yes3 ”結(jié)束點511處結(jié)束,將其結(jié)果設(shè)為與“ yes3 ”結(jié)束點511相關(guān)聯(lián)的結(jié)束值。一個用戶定義的結(jié)束點的結(jié)束條件可以定義為以下形式之一I) “endedAt (anEndPt)”,其中,“anEndPt”是一個終點的名字;2)把運算為正終止值的序列數(shù)量和一個數(shù)字相比較。下面將詳述這兩種情況I) 一個結(jié)束條件可以定義成“endedAt (anEndPt) ”,其中,“anEndPt”是一個終點的名稱。如果任何一個序列到達(dá)該終點,復(fù)合斷言即結(jié)束,其結(jié)果設(shè)為與相應(yīng)的該結(jié)束點相關(guān)聯(lián)的結(jié)束值。如圖5所示,如果抵達(dá)“EP2”終點508或者509,整個“A”復(fù)合斷言500就結(jié)束了,其結(jié)果設(shè)為與“yes3”結(jié)束點512相關(guān)聯(lián)的結(jié)束值。 2)結(jié)束條件可以定義為要有多少個序列(包括了那些和并行子斷言相對應(yīng)的序列)必須被運算為正的終止值時,該復(fù)合斷言才會結(jié)束。例如,一個結(jié)束條件可以為“>2”,這表示如果運算為正的終止值的序列數(shù)量大于2,那么復(fù)合斷言結(jié)束,并且其“結(jié)果”設(shè)為相關(guān)聯(lián)的結(jié)束值。以下是一些特例一個結(jié)束條件可以定義為“大于等于N”,其中,N是一個正數(shù)。如果以正的終止值終止的序列總數(shù)大于或者等于N,整個復(fù)合斷言就終止,其結(jié)果設(shè)為與該結(jié)束點相應(yīng)的結(jié)束值。注意當(dāng)一個序列到達(dá)任何用戶定義的終點時,序列被運算為正的終止值,而抵達(dá)隱含終點的一個序列被運算為一個非正的終止值。例如,圖5中,結(jié)束點513有一個定義為2”的結(jié)束條件,其意為“至少為2”。如果“S”子斷言結(jié)束,其結(jié)果不為與“S”定義的“yesl”結(jié)束點相關(guān)聯(lián)的結(jié)果值,而到達(dá)了 “EP3”終點510,并且“A”500中的第二個序列運算為一個正的終止值。因為結(jié)束條件都不為真,仍然需要運算其他的子斷言。如果隨后“T”子斷言運算為正的結(jié)果,那么至少有2個正的終止值,整個的“A”復(fù)合斷言500就在“Yes”結(jié)束點513處結(jié)束,其結(jié)果則設(shè)為與“Yes”結(jié)束點513相關(guān)聯(lián)的結(jié)束值。“大于等與N”的一個特例是“大于等于1”,它意味著要使復(fù)合斷言在該結(jié)束點處結(jié)束的話,復(fù)合斷言中的這些序列中至少有一個序列要有正的終止值。換句話說,如果這些序列中的任何一個運算為正的終止值,那么復(fù)合斷言就結(jié)束。所以從概念上,這個特例可以視為將邏輯“0R”操作應(yīng)用于復(fù)合斷言中的這些序列上?!搬闕”或邏輯標(biāo)識“V”皆可用于表達(dá)“0R”結(jié)束條件。圖7中顯示了 “B”復(fù)合斷言700有“V”結(jié)束條件701。一個結(jié)束條件可以定義為“等于N”,N是一個正數(shù)。如果以正終止值結(jié)束的序列總數(shù)正好是N,整個復(fù)合斷言就結(jié)束,其結(jié)果設(shè)為與該結(jié)束點相應(yīng)的結(jié)束值。如圖8所示,結(jié)束點801有一個定義為“=1”的結(jié)束條件,它表示“等于I”。因此,如果一個序列有一個正的終止值,而其他序列都有非正的終止值,“C”復(fù)合斷言800以與“yes5”結(jié)束點相關(guān)聯(lián)的結(jié)束值結(jié)束。注意為了決定終止值為正的總數(shù)是否正好是所定義的數(shù)量,復(fù)合斷言中的所有序列都必須執(zhí)行完畢。一種“等于N”的特殊情況是N恰為復(fù)合斷言中這些序列的總數(shù)。這種情況下,“等于N”意味著為了使復(fù)合斷言在該結(jié)束點結(jié)束,并且結(jié)果設(shè)為相應(yīng)的結(jié)束值,復(fù)合斷言中的每個序列需要有正的終止值。換句話說,如果所有序列都運算為正的終止值,則復(fù)合斷言在該結(jié)束點處結(jié)束。因此從概念上,這種特例可以看成把邏輯“AND”操作應(yīng)用到復(fù)合斷言中的這些序列上?!?N”或者邏輯標(biāo)識“Λ”可以用于表達(dá)“AND”條件。圖9中顯示了復(fù)合斷言“D” 900,其有一個“ Λ ”結(jié)束條件901。結(jié)束條件可以定義為“小于等于N”,其中N是一個正數(shù)。如果以正的終止值結(jié)束的序列總數(shù)小于或者等于N,整個復(fù)合斷言就結(jié)束,其結(jié)果設(shè)為與該結(jié)束點相應(yīng)的結(jié)束值。如圖10所示,結(jié)束點1001有一個定義為“彡2”的結(jié)束條件,這代表“至多有2個”。因此,如果I個或者2個序列有正的終止值,而其他的序列有非正的終止值,“Ε”·復(fù)合斷言1000就結(jié)束,其結(jié)果設(shè)為與“yes5”結(jié)束點相關(guān)聯(lián)的結(jié)束值。除了用戶定義的結(jié)束點,一個復(fù)合斷言總是有一個預(yù)定義的間接的隱含結(jié)束點。該隱含結(jié)束點的名字是“No”,結(jié)束條件是“Else”。當(dāng)所有的序列都結(jié)束并且用戶定義的結(jié)束條件沒有一個有正的結(jié)果值,復(fù)合斷言就會在這個隱含的結(jié)束點處結(jié)束,其結(jié)果則設(shè)為與“No”結(jié)束點相關(guān)聯(lián)的結(jié)束值。例如,如果圖10所示的“E”復(fù)合斷言1000的所有序列中,有正的終止值的序列多于3個,那么唯一的由用戶定義的結(jié)束點1001的結(jié)束條件2”不為真。因此,“E”復(fù)合斷言結(jié)束,其結(jié)果設(shè)為“No”結(jié)束點的結(jié)束值。每個用戶定義的結(jié)束點都有一個正的結(jié)束值,而隱含的“No”結(jié)束點則有一個非正的結(jié)束值。另外,和其他用戶定義的結(jié)束點不同的是,該隱含結(jié)束點是不顯示在復(fù)合斷言框中的。如前所述,一個復(fù)合斷言可以包含多個子斷言。因為每個子斷言既可以是簡單的也可以是復(fù)合的,故一個復(fù)合斷言可以是嵌套的。圖11顯示了一個嵌套斷言的例子,“Predl” 1100 包含了 3 個子斷言,“Sub-predl” 1101、“Sub_pred2” 和 “Sub_pred3”?!癝ub-predl”1101 是一個復(fù)合斷言,包含了 2 個子斷言 “Sub_pred4” 和 “Sub_pred5”?!癝ub-precM”和“Sub-pred5”中的每一個又可能是復(fù)合斷言,這樣就構(gòu)成一個嵌套子斷言的層次。我們也可以將復(fù)合斷言的圖形化語言按照以下方式來簡化1)如果一個間接結(jié)束點的結(jié)束條件中定義了某個終點的名字,該間接結(jié)束點可以轉(zhuǎn)變成一個直接結(jié)束點,這就從圖中消除了終點和結(jié)束條件。如圖11所示,結(jié)束點1104的結(jié)束條件定義了 當(dāng)一個序列到達(dá)“EP1”終點時,復(fù)合斷言就結(jié)束。為了將之轉(zhuǎn)化為一個直接結(jié)束點,遷移箭頭1102可以一直擴(kuò)展到“Yes”結(jié)束點。如圖12所示,遷移箭頭1202連接了源頭子斷言“Sub-pred2”,指向“Yes”結(jié)束點1203。2) “Yes”通常是一個默認(rèn)的選擇,所以在圖中可以省略掉。換句話說,在可以定義“Yes”卻沒有定義任何名字的地方,就相當(dāng)于在這里定義了“Yes”。例如,圖13中顯示了圖12中顯示的同樣的“Predl”的簡化版。圖13中,省略了 1203結(jié)束點的名字“Yes”和“Yes”遷移條件1202。3)如果一個結(jié)束點在源頭子斷言中是顯示出來的,從該結(jié)束點指向下一個子斷言的遷移箭頭的遷移條件就可以省略。例如,圖14中,結(jié)束點1402是顯示出來的,因此遷移箭頭1401的遷移條件是可以省略的。4)如果一個遷移箭頭的遷移條件為“Yes”并指向一個終點,這個遷移箭頭、其遷移條件和該終點都可以一起省略掉。如圖15所示,“Pred2”復(fù)合斷言有I個子斷言“Sub-pred2”,它有一個以“Yes”為遷移條件的,并且指向終點1502的遷移箭頭1501。則其遷移箭頭、遷移條件和終點都可以被省略掉,如圖16所示。從另外一方面來看,如果一個順序型的子斷言,比如“Sub-pred2” 1603,沒有任何用戶定義的往外的遷移箭頭,那么就假定其有一個往外的遷移箭頭,該遷移箭頭以“Yes”為遷移條件,并指向一個“Yes”終點。5)如果一個復(fù)合斷言只有一個用戶定義的結(jié)束點,并且以邏輯“AND”作為其結(jié)束條件,則該結(jié)束點可以省略。例如,圖17顯示了省略了 2個結(jié)束點的“Pred2”復(fù)合斷言,如圖16所示,1601、1602都有“Λ”結(jié)束條件。從另外一方面來看,如果一個復(fù)合斷言沒有任何用戶定義的結(jié)束點,則可以假定該結(jié)束點有一個“Λ”結(jié)束條件和一個“Yes”名字,比如“Pred2” 1700。至此為止,我們介紹了復(fù)合斷言的定義。但是,如前所述,當(dāng)斷言用于定義一個應(yīng)用系統(tǒng)的行為時,斷言既可以是復(fù)合的也可以是簡單的。為了對斷言有個全面的描述,在這里也描述下簡單斷言的特性。 和復(fù)合斷言不同,簡單斷言不能再進(jìn)一步分解為更小的組件。因此,簡單斷言顯示為一個帶名字的框或者框中的簡單斷言表達(dá)式,比如“i>3”。如圖18中,“P”,“Q”,“i>3,,,“S”,“T” 和 “U” 都是簡單斷言。作為一種斷言,簡單斷言和復(fù)合斷言有一些同樣的特性。和復(fù)合斷言類似,一個簡單斷言也可能有多個正的結(jié)果和一個非正的結(jié)果。其中每個可能的值可以視作是與該簡單斷言中的多個抽象結(jié)束點相關(guān)聯(lián)。而這些抽象結(jié)束點的名字則可以用作從該簡單斷言指向一個目標(biāo)子斷言的遷移條件。例如,圖18所示,簡單斷言“P”執(zhí)行之后,如果其結(jié)果是與“yesl”抽象結(jié)束點所相關(guān)聯(lián)的值,下一步要執(zhí)行“Q”斷言。如果其結(jié)果是與“yes2”抽象結(jié)束點所相關(guān)聯(lián)的值,下一步要執(zhí)行“i>3”斷言。如果“P”的結(jié)果是非正的,下一步將執(zhí)行
S斷曰。圖19中,用一個DSC圖來圖形化地顯示了針對一個名為“pred”的斷言的運算過程“evalPred”。因為復(fù)合斷言中的每個直接結(jié)束點可以轉(zhuǎn)換為間接結(jié)束點,為方便起見,該運算過程假定所有的直接結(jié)束點都已轉(zhuǎn)換成間接結(jié)束點了。因此,該運算過程只須處理間接結(jié)束點即可。另外,因為每個并行子斷言可以視為一個序列,所以該過程只需要運算序列即可。該過程啟動時,從起點1901開始。如果“pred”是一個簡單斷言,“pred”被直接執(zhí)行,然后設(shè)置“結(jié)果”屬性并結(jié)束;如果“pred”是一個復(fù)合斷言,檢查當(dāng)前序列1902。如果沒有序列需要執(zhí)行,序列執(zhí)行過程就在1903處結(jié)束。否則,從起點1904開始執(zhí)行該序列。并對該序列中的當(dāng)前子斷言遞歸地調(diào)用同樣的執(zhí)行過程“evalPred” 1900。序列中的當(dāng)前子斷言執(zhí)行后,從起點1905開始,將第一個遷移設(shè)為當(dāng)前遷移箭頭,然后檢驗每個遷移條件。這有三種可能1)如果遷移條件為假,則將下一個遷移設(shè)為當(dāng)前遷移箭頭,然后重復(fù)執(zhí)行。2)如果遷移條件為真,將該遷移箭頭的目標(biāo)設(shè)置為當(dāng)前子斷言。如果新的當(dāng)前子斷言不是一個終點,該過程在1906處結(jié)束,并且重復(fù)執(zhí)行新的當(dāng)前子斷言。否則(如果新的當(dāng)前子斷言是一個終點),它記錄下終點的終止值,并且在1907處結(jié)束來檢驗每個結(jié)束條件。3)如果沒有更多的遷移條件需要被檢驗,該過程則記錄下隱含終點的終止值,并且在1907處結(jié)束。執(zhí)行完每個序列之后(在1907處結(jié)束),該過程會檢驗每個結(jié)束條件。如果有任何結(jié)束條件為真,將其“結(jié)果”設(shè)為與該結(jié)束點相關(guān)聯(lián)的結(jié)束值,并且整個運算在1913處結(jié)束。否則,在1908處結(jié)束,繼續(xù)檢查下一個序列1902。執(zhí)行完所有的序列之后,如果不滿足任何結(jié)束條件,將“pred”斷言的“結(jié)果”設(shè)置為與“No”結(jié)束點相關(guān)聯(lián)的結(jié)束值,并且整個運算在1910處結(jié)束。在用各種抽象例子描述了復(fù)合斷言的功能后,為了進(jìn)一步澄清如何在軟件中應(yīng)用復(fù)合斷言,讓我們看一個具體的例子。假定一個慈善組織需要決定一項補助金申請是否被批準(zhǔn);如果一個申請被批準(zhǔn),應(yīng)當(dāng)批準(zhǔn)多少補助金。該慈善組織可以使用復(fù)合斷言“審查”520來檢驗每個申請,如圖5B所示。如果申請者是女性并且處于懷孕狀態(tài),“審查”運算為與直接結(jié)束點“$400”相關(guān)聯(lián)的結(jié)束值。(圖5B中在525處結(jié)束。)如果申請者的年齡低于12歲,“審查”運算為與間接結(jié)束點“$400”相關(guān)聯(lián)的結(jié)束值。(圖5B中在522處終止,然后在526處結(jié)束。)如果申請者的年齡不低于12歲但處于貧窮狀態(tài),“審查”運算為與間接結(jié)束點“$400”相關(guān)聯(lián)的結(jié)束值。(圖5B中在523處終止,然后在526處結(jié)束。)如果申請者的年齡不低于12歲并且不處于貧窮狀態(tài),但是為肯尼亞公民或者剛果公民,“審查”運算為與間接結(jié)束點“$100”相關(guān)聯(lián)的結(jié)束值。(圖5B中在524處終止,然后在527處結(jié)束。)如果申請者不屬于上面的任何情況,“審查”運算為與隱含的“No”結(jié)束點相關(guān)聯(lián)的結(jié)束值?!榱诉M(jìn)一步澄清本發(fā)明,圖5B520中的“審查”的行為可以用如下偽代碼來表示審查O {if (性別==女&&狀態(tài)==懷孕)return批準(zhǔn)400;if (年齡〈I2) return 批準(zhǔn) 400;if (年齡> 12&& 狀態(tài)==貧窮)return 批準(zhǔn) 400;if(年齡彡12&&狀態(tài)!=貧窮){if (公民==肯尼亞Μ剛果))return批準(zhǔn)100;}return no;}本發(fā)明中描述的復(fù)合斷言可通過以下方式應(yīng)用在一個擴(kuò)充的DSC圖中1)復(fù)合斷言可用于定義一個決策點,來從多個后續(xù)的子DS中選擇下一個該執(zhí)行的子DS。如圖20所示,復(fù)合斷言“Dl”2000有一個由兩個順序型子斷言構(gòu)成的序列。這些子斷言是“more ”和“true ”。“D1”復(fù)合斷言首先運算“more ”子斷言。如果“more ”結(jié)果非正,“D1”在“noMore”結(jié)束點處結(jié)束。否則,下一步將執(zhí)行“true ”子斷言。如果“true ”結(jié)果是非正的,“D1”在“false”結(jié)束點處結(jié)束。否則它在“true”結(jié)束點處結(jié)束。如圖20,定義了 “D1”復(fù)合斷言2000,“B” 2002執(zhí)行后,名為“D1”的復(fù)合斷言可用作一個決策點2001。決策點“D1” 2001有3個往外的箭頭,叫做“false”、“true”,和“noMore”。如果“D1”運算的結(jié)果值為“false”,下一步將執(zhí)行“A” 2003。如果“D1”運算的結(jié)果值為“true”,下一步將執(zhí)行“C” 2004。如果“D1”運算的結(jié)果值為“noMore”,下一步將執(zhí)行 “E” 2005。2)復(fù)合斷言的細(xì)節(jié)也可以在決策點處定義。例如,圖21顯示了決策點被定義為一個帶有3個往外的箭頭的復(fù)合斷言“Dl”2101,其中每個往外的箭頭從復(fù)合斷言的一個結(jié)束點指向下一個子DS。復(fù)合斷言在其他圖形語言中的用法
除了將圖形化的斷言擴(kuò)展到DSC之外,本發(fā)明中的復(fù)合斷言也可以用于取代一個流程圖中的一個文本的布爾型表達(dá)式,比如UML活動圖(UML Activity Diagram)或者BPMN。后文中,當(dāng)描述BPMN組件時將采用BPMN的原文術(shù)語;而當(dāng)描述UML組件時將采用UML的原文術(shù)語。在UML活動圖中,圖20中所描述的同樣的行為可以依照圖22中所示在UML活動圖的一個擴(kuò)展版中來定義。圖22的右圖定義了一個名為“D1”的復(fù)合斷言2200,決策節(jié)點2201顯示為名字為“D1”的復(fù)合斷言。注意因為UML活動圖用圓角矩形表示Activity,為了和一般Activity區(qū)分開來,斷言2200可以用尖角矩形表示。 UML活動圖中使用復(fù)合斷言的另一種方式是將復(fù)合斷言看做一個常規(guī)的Activitynode ο圖23顯示了“D1”復(fù)合斷言2300可以作為“B”Activity的ActivityEdge所指向的一個目標(biāo) Activity2301。一個往外的 ActivityEdge 將“D1 ”Activity 連接到一個 decisionnode,然后該decision node基于“Dl” Activity2301的結(jié)果制定決策,從其三個往外的ActivityEdge中選擇一個來執(zhí)行。在BPMN中,圖20中描述的同樣的行為可以依照圖24所示在BPMN圖的一個擴(kuò)展版本中來定義?!癉1”復(fù)合斷言2400可用于定義BPMN中Complex Gateway2401中的OutgoingCondition 屬性。Complex Gateway 有多個往外的 sequence flow,復(fù)合斷言的每個特定結(jié)果值可以定義在這些sequence flow的ConditionExpression屬性中。例如,圖24 中,“false”, “true,,和 “noMore,,是 Complex Gateway “Dl,,2401 的往外的 sequenceflow。注意因為BPMN用圓角矩形表示Activity,為了和一般Activity區(qū)分開來,復(fù)合斷言可以用尖角矩形表示,比如“Dl”2400。本發(fā)明中,在BPMN中使用復(fù)合斷言的另一種方式是將之看作一個一般Activity。如圖25所示,“D1”復(fù)合斷言2500作為“B” Activity的往外的sequence flow的目標(biāo)活動 2501。“Dl”2501 有 3 個往外的 conditional sequence flow,叫做 2502,2503和 2504。conditional sequence flow 的 ConditionExpression 屬性定義了 如果“D1”復(fù)合斷言運算結(jié)果為某個值,相關(guān)聯(lián)的的sequence flow將會被執(zhí)行。例如,“false” ConditionExpression 屬性定義了 “D1” 的結(jié)果有一個與“D1” 的“false” 結(jié)束點相關(guān)聯(lián)的結(jié)束值。如果該表達(dá)式為真,則下一步將執(zhí)行“A” Activity。一個流程圖經(jīng)過如前所述的擴(kuò)展后,雖然可以成為支持復(fù)合斷言的圖形語言,t匕如UML活動圖和BPMN,但有些設(shè)計者可能不喜歡這種方式,因為上面描述的圖形語言使用了和該流程圖本身不同的風(fēng)格。如果設(shè)計者需要先用該流程圖的風(fēng)格來定義一個應(yīng)用行為,然后再轉(zhuǎn)用上面描述的DSC風(fēng)格來定義一個復(fù)合斷言,設(shè)計者可能會感到困惑。一個更好的方法是在已有的流程圖中以一種更一致的方式來支持復(fù)合斷言。在擴(kuò)展的BPMN中模擬復(fù)合斷言這部分描述了如何擴(kuò)展BPMN,以一種比DSC方式更類似于BPMN的方式來模擬一個復(fù)合斷言。為了模擬復(fù)合斷言,下面的新組件可以加入到BPMN中1)用來模擬復(fù)合斷言的“復(fù)合斷言活動”,2)用來模擬序列的“序列框”,3)用來模擬復(fù)合斷言中簡單子斷言的“簡單斷言活動”。另外,需要一種模擬“結(jié)果”屬性、終點和結(jié)束點功能的方法。為了簡化起見,復(fù)合斷言活動和簡單斷言活動也被叫做斷言活動。復(fù)合斷言活動是用于模擬一個復(fù)合斷言的。一個復(fù)合斷言活動是加入到BPMN中的一個特殊的sub-process。它可以有一個“結(jié)果”屬性來模擬復(fù)合斷言中的“結(jié)果”屬性,來存儲它結(jié)束后的結(jié)果值。另外,一個復(fù)合斷言活動可以包含多個序列框,多個斷言活動,一個結(jié)束一 Gateway和多個Final Event,其中每一個斷言活動模擬了一個并行子斷言。例如,圖4中所示的“PredO”復(fù)合斷言400可以由圖27所示的BPMN的復(fù)合斷言活動2700來模擬。對于復(fù)合斷言中的每個序列,復(fù)合斷言活動都有一個序列框來模擬該序列。該序列框和BPMN中一般的Activity相似,但有一點除外抵達(dá)序列框里面的一個End Event時,不僅會終止序列框,還會終止包含它的模擬復(fù)合斷言的復(fù)合斷言活動。為了與一般的Activity相區(qū)分,序列框可以顯示為一個虛線框2701,如圖27所示。復(fù)合斷言中的每個序列都由這樣一個序列框來模擬,該序列框帶有一個sequence flow來指向一個用來接合的Gateway。例如,序列框2701模擬了圖4中“PredO”復(fù)合斷言的第一個序列,而另一個序列框2702模擬了圖4中的“PredO”復(fù)合斷言的第二個序列。這些序列框都有一個sequenceflow來指向用來接合的Gateway2707。 復(fù)合斷言的整個序列可以在BPMN中由序列框內(nèi)部的一系列斷言活動來模擬,其中每個斷言活動模擬了序列中的一個順序型子斷言。如果順序型子斷言是簡單斷言,它就由簡單斷言活動來模擬。否則就由復(fù)合斷言活動來模擬。序列框里面的這些斷言活動由conditional sequence flow連接起來。如圖27所不,斷言活動“Sub_pred3” 2703和“Sub-pred4”2704模擬了圖4中同名的子斷言。圖4中的“TransCond4”遷移是由圖27中的名為“TransCond4,,的 conditional sequence flow 模擬的,該 conditional sequenceflow由源頭斷言活動“Sub-pred3”2703指向目標(biāo)斷言活動“Sub_pred4” 2704。和每個conditional sequence flow相關(guān)聯(lián)的ConditionExpression屬性則描述了和復(fù)合斷言中的遷移相關(guān)聯(lián)的遷移條件。為了模擬序列中的終點,可以把一個新的Event類型——終點事件加到BPMN中。一個終點事件和被模擬的終點有同樣的名字。當(dāng)?shù)竭_(dá)序列框中的一個終點事件時,序列框終止,記錄下剛到達(dá)的終點事件的名字或其內(nèi)部的代號,使得后來的結(jié)束條件可以檢驗復(fù)合斷言中每個序列的終止?fàn)顟B(tài)。為了和BPMN中的其他Event相區(qū)分,終點事件可以顯示為 。復(fù)合斷言中,指向終點的遷移箭頭由指向這樣一個終點事件的conditional sequenceflow來模擬。例如,圖27中名為“EP2”的終點事件2705模擬了圖4中的“EP2”終點。雖然BPMN要求把所有的sequence flow都顯式地定義出來,但為了簡化圖形,序列框支持復(fù)合斷言的隱含終點行為,而不在擴(kuò)展BPMN圖中顯示出隱含終點。換句話說,一個在其 ConditionExpression 屬性中定義了 “else” 的 conditional sequence flow會被自動添加到每個源頭斷言活動中,并且該conditional sequence flow指向一個名字為“No”的隱含的終點事件。當(dāng)一個源頭斷言活動結(jié)束之后,如果其用戶定義的遷移條件都不為真,序列框會在隱含的“No”終點處終止,并且將這個隱含終點事件的名字或其內(nèi)部的代號記錄下來,以備稍候使用。如圖27所示,“Sub-pred3”2703有2個遷移條件,叫做“TransCond3”和“TransCond4”。雖然沒有顯示出來,“Sub_pred3”也有一個隱含的conditional sequence flow 指向一個名為“No”的隱含終點事件。因此,“Sub_pred3”2703結(jié)束之后,如果“TransCond3”和“TransCond4”都不為真,序列框2702在隱含的終點事件處終止。
如果復(fù)合斷言中的并行子斷言是一個簡單斷言,它就由一個簡單斷言活動來模擬。否則就由一個復(fù)合斷言活動來模擬。這兩者都有一個指到一個用來接合的Gateway的往外的sequence flow。例如,圖4中的并行子斷言“Sub_pred5”由圖27中的“Sub-prediCate5”2706模擬,它既可以是一個簡單斷言活動,也可以是一個復(fù)合斷言活動,這取決于被模擬的并行子斷言是簡單的還是復(fù)合的。它還有一個從它指向用來接合的Gateway2707 的 sequence flow。把所有序列框和模擬并行子斷言的斷言活動接合起來的Gateway叫做結(jié)束-Gateway,這是一個加入BPMN的新的Gateway類型。為了和BPMN中的其他Gateway相區(qū)分,結(jié)束一 Gateway可以顯示為一個菱形,菱形內(nèi)部為“? ”。一個結(jié)束一 Gateway有多個往內(nèi)的和多個往外的sequence flow。每個往內(nèi)的sequence flow從一個序列框或者一個模擬并行子斷言的斷言活動連接過來。每個往外的sequence flow則指向一個EndEvent,該End Event模擬了復(fù)合斷言中的一個間接結(jié)束點。每個往外的sequence flow有一個ConditionExpression屬性,該屬性定義了與結(jié)束點相關(guān)聯(lián)的結(jié)束條件,而該結(jié)束點由sequence flow所指向的End Event來模擬。例如,圖4中的“Resultl”結(jié)束點由圖27 中的 “Resultl”End Event 來模擬,“ExitCondl” 結(jié)束條件由 ConditionExpression 屬性“ExitCondl”來模擬,并且被關(guān)聯(lián)到圖27中的往外的sequence flow2708。結(jié)束一 Gateway的行為會一直等待,直到從各個序列框和模擬并行子斷言的斷言活動中都收到一個token后,然后再從其往外的sequence flow中選出下一個。如果有任何ConditionExpression 屬性為真,則選擇其 sequence flow,并開始執(zhí)行該 sequence flow所指向的End Event。End Event開始時,包含它的復(fù)合斷言活動就結(jié)束了,其“結(jié)果”屬性設(shè)為與被模擬的結(jié)束點相關(guān)聯(lián)的結(jié)束值。結(jié)束點的名字是在模擬結(jié)束點的End Event的Name屬性中定義的。例如,圖27中的End Event,“Resultl”和“Yes”,各自對應(yīng)于圖4中同名的各個結(jié)束點。為了模擬一個復(fù)合斷言完整的功能,每個往外的sequence flow的ConditionExpression屬性可以定義為運算為正值的序列的數(shù)量。如前所述,它包括等于N,大于等與N,小于等于N。而ConditionExpression屬性的句法需要遵從在BPMN中業(yè)務(wù)流程圖屬性的ExpressionLanguage中所定義的語言。在BPMN中,復(fù)合斷言的直接結(jié)束點可以由End Event來模擬,并且這個End Event被一個來自模擬其源頭順序型子斷言的斷言活動的conditional sequence flow所指向。該End Event可以顯示在包含了模擬源頭順序型子斷言的斷言活動的序列框里面。如圖27所不,“Sub_pred2,,2709 有一個 conditional sequence flow2710 直接指向“ResultO,,EndEvent2711,它模擬了圖4中的直接結(jié)束點“Result0”410。“Sub_pred2”2709執(zhí)行完之后,如果 “TransCond2”2710 為真,則到達(dá) “ResultO” 2711?!癛esultO”End Event2711 會終止包含它的復(fù)合斷言活動,并且其結(jié)果設(shè)為與圖4中“ResultO”結(jié)束點相關(guān)聯(lián)的結(jié)束值。如前所述,如果在復(fù)合斷言中沒有用戶定義的結(jié)束點,就假定一個將結(jié)束條件定義為“ Λ ”、而將其名字定義為“ Yes ”的結(jié)束點。該結(jié)束點是由一個conditional-sequence-flow 來模擬的,該 conditional-sequence-flow 從結(jié)束-gateway指向一個End Event,其名字屬性定義為“Yes”。這個conditional-sequence-flow的ConditionExpression屬性用表達(dá)式語言的句法被定義為“如果所有模擬并行子斷言的斷言活動和序列框的運算結(jié)果都為正?!比鐖D28所示,在DSC語言中,一個復(fù)合斷言“D2”2800有3個子斷言“P”,“Q”和“R”,而沒有用戶定義的結(jié)束點。圖29顯示了 DSC中帶有“Yes”結(jié)束點的同樣的復(fù)合斷言“D2” 2900,將“Λ”作為其結(jié)束條件明確地顯示出來。圖30顯示了復(fù)合斷言“D2”2900在BPMN中如何被模擬為復(fù)合斷言活動3000。特別是,“Yes” 結(jié)束點被一個 conditional sequence flow 所模擬,該 conditional sequenceflow來自結(jié)束一 Gateway 3001,指向名字屬性定義為“Yes”的End Event3002。這個conditional-sequence-flow 的 ConditionExpression 屬性是“全為正”,它定義了以下的條件——“如果所有的序列框和模擬并行子斷言的斷言活動的執(zhí)行結(jié)果都為正”,該條件是依照BPMN業(yè)務(wù)流程圖中指定的ExpressionLanguage的句法來定義的。如果一個復(fù)合斷言只有直接結(jié)束點,在BPMN中模擬這種復(fù)合斷言時,不必使用結(jié)束一 Gateway。另外,每個代表序列框的虛線框也可以省略。如 圖31所示,用DSC描述的復(fù)合斷言“Pred5” 3100有2個序列和4個直接結(jié)束點,這4個直接結(jié)束點叫做“ResultO”,“Resultl”,“Result2” 和“Result3”。圖 31 中的“Pred5” 3100 可以由圖 32所示的BPMN中的“Pred5”復(fù)合斷言活動3200模擬,而不需要結(jié)束一 Gateway。圖32中的“Sub-predl”,“Sub_pred2”,“Sub_pred3”,和 “Sub_pred4” 都是復(fù)合活動,這些復(fù)合活動模擬了圖31中“Pred5”復(fù)合斷言3100的子斷言。BPMN中可以用一個“簡單斷言活動”來模擬一個“簡單斷言”。簡單斷言活動是BPMN中一種特殊的Task類型。和復(fù)合斷言活動一樣,一個簡單斷言活動可以有一個“結(jié)果”屬性。一個簡單斷言活動完成之后,其“結(jié)果”屬性可以設(shè)為一個正值或一個非正值。復(fù)合斷言活動在擴(kuò)展版的BPMN中的應(yīng)用方式類似于復(fù)合斷言在圖24中的用法。在BPMN中,一個復(fù)合斷言活動可用于定義一個Complex Gateway的OutgoingCondition屬性,并且該Complex Gateway可以用作一個決策Gateway。例如,圖33中的ComplexGateway3300的OutgoingCondition屬性被定義為圖27中的“PredO”復(fù)合斷言活動2700。根據(jù)其“結(jié)果”屬性的值,從“A”,“C”和“E”中選擇一個作為下一步要執(zhí)行的Activity。圖34顯示了使用復(fù)合斷言活動進(jìn)行決策的另一種方式。類似于圖25中所示的如何將一個復(fù)合斷言當(dāng)作一般Activity的使用方法,圖27中定義的“PredO”復(fù)合斷言活動2700在圖34中作為從“B” Activity指向外的sequence flow的目標(biāo)Activity3400?!癙redO” 復(fù)合斷言活動有 3 個指向外的 conditional sequence flow。每個 conditionalsequence flow的ConditionExpression屬性定義了 如果“PredO”的“結(jié)果”屬性有與某個結(jié)束點相關(guān)聯(lián)的結(jié)束值,那么執(zhí)行相應(yīng)的sequence flow。在UML活動圖的擴(kuò)展版中模擬一個復(fù)合斷言本部分描述了 如何擴(kuò)展UML活動圖來模擬一個復(fù)合斷言,使其風(fēng)格相比較于DSC風(fēng)格更能一致于UML風(fēng)格。為了模擬復(fù)合斷言,以下新的組件可以作為擴(kuò)展添加到UML中I)模擬一個復(fù)合斷言的復(fù)合斷言節(jié)點;2)模擬一個序列的序列框;3)模擬一個簡單子斷言的簡單斷言節(jié)點。另外,需要一種方法來模擬結(jié)果屬性、終點和結(jié)束點的功能。為了簡化起見,復(fù)合斷目節(jié)點和簡單斷目節(jié)點都被叫做斷目節(jié)點。一個復(fù)合斷言節(jié)點是用于模擬一個復(fù)合斷言的。一個復(fù)合斷言節(jié)點是添加到UML中的一種特殊Activity。它可以有一個“結(jié)果”屬性來模擬復(fù)合斷言的“結(jié)果”屬性以存儲它終止后的結(jié)果。另外,一個復(fù)合斷言節(jié)點包含了多個序列節(jié)點,多個模擬并行子斷言的斷言節(jié)點,每個斷言節(jié)點既可以是一個簡單斷言節(jié)點,也可以是一個復(fù)合斷言節(jié)點、一個joinnode、一個 decision node 和多個 ActivityFinalNodes 例如,圖 35 中用 UML 表不的復(fù)合斷言節(jié)點3500模擬了圖4中的“PredO”復(fù)合斷言400。復(fù)合斷言節(jié)點包含一個模擬復(fù)合斷言中每個序列的序列框。該序列框類似于UML中其他的普通Activity,唯一不同的是當(dāng)?shù)诌_(dá)里面的一個ActivityFinalNode時,不只是序列框終止,包含它的復(fù)合斷言節(jié)點也將終止。為了和其他普通的Activity相區(qū)分,該序列框可以顯示為一個虛線框,如圖35中3501所示。復(fù)合斷言中的每個序列由這樣一個序列框模擬,該序列框有一個指向一個join node的往外的ActivityEdge。例如,圖35中的序列框3501模擬了圖4中的“PredO”復(fù)合斷言中的第一個序列,序列框3502模擬了第二個序列。每個序列框有一個指向join node3503的往外的ActivityEdge。在UML中,復(fù)合斷言中的整個序列可以由序列框中一系列的斷言節(jié)點來模擬,而每個斷言節(jié)點模擬序列中的一個順序型子斷言。例如,圖35中的“Sub-pred3”3503和“Sub-precM” 3504模擬圖4中的“PredO”復(fù)合斷言400的第二個序列的這些同名子斷言。 如果圖4中的”Sub-pred3”是一個簡單斷言,圖35中的“Sub_pred3”3503是一個簡單斷言節(jié)點。否則,“Sub-pred3” 3503是一個復(fù)合斷言節(jié)點。在一個序列內(nèi)部,從一個源頭指向一個目標(biāo)的一個遷移箭頭在UML中被一個從模擬源頭的斷言節(jié)點指向一個決策節(jié)點的ActivityEdge及其往外的ActivityEdge所模擬。另外,和遷移箭頭相聯(lián)系的遷移條件在UML中由模擬遷移箭頭的往外的ActivityEdge的guard所模擬。例如,圖4中的遷移條件“TransCond3”和“TransCond4”的遷移箭頭由一個指向一個 decision node3505 的 ActivityEdge 來模擬,后面一個將帶有[TransCond3]的往外的ActivityEdge作為其guard,另一個將帶有[TransCond4]的往外的ActivityEdge作為其guard,如圖35所示。序列中的終點可以由UML中的FlowFinalNode模擬。例如,圖4中的“EP2”終點被圖35中有同樣的名字的FlowFinalNode3506所模擬。當(dāng)?shù)竭_(dá)FlowFinalNode時,序列框終止,一個token被送往join node,并記錄下被模擬的終點名字或其內(nèi)部的代號。稍后,結(jié)束條件將會用到這些信息。序列中隱含終點的行為在UML中可以通過以下方式來模擬若模擬一個源頭子斷言的遷移條件的每個往外的ActivityEdge的所有g(shù)uard都不滿足,則終止該序列框,并且記錄下隱含終點名字或其內(nèi)部代號,稍后結(jié)束條件檢驗時會用到。如圖35所示,“Sub_pred3”3503 完成之后,檢查每個往外的 ActivityEdge 的 guard,比如[TrasnsCond3]和[TransConcM]。如果都不為真,終止序列框3502,并記錄其隱含的終點名稱或其內(nèi)部的代號。直接結(jié)束點可由序列框里面的ActivityFinalNode來模擬。當(dāng)ActivityFinalNode執(zhí)行時,終止包含它的復(fù)合斷言節(jié)點,并且將復(fù)合斷言節(jié)點的“結(jié)果”屬性設(shè)為與ActivityFinalNode所模擬的結(jié)束點相關(guān)聯(lián)的結(jié)束值。例如,圖4中的直接結(jié)束點 “ResultO” 410 是由從 decision node3509 指向的 “ResultO” ActivityFinalNode3501所模擬的。該 decision node 有一個帶有[TransCond2]guard 的往外的 ActivityEdge。如果[TransCond2]為真,“ResultO” ActivityFinalNode開始執(zhí)行。當(dāng)它開始的時候,“ResultO”ActivityFinalNode終止了 “PredO”復(fù)合斷言節(jié)點,并且設(shè)其“結(jié)果”屬性為與“ResultO”ActivityFinalNode所模擬的結(jié)束點相關(guān)聯(lián)的結(jié)束值。在UML中,由斷言節(jié)點來模擬復(fù)合斷言中的并行子斷言,該斷言節(jié)點既可以是簡單斷言節(jié)點,也可以是復(fù)合斷言節(jié)點,這取決于被模擬的子斷言是簡單的還是復(fù)合的。一個模擬并行子斷言的斷言節(jié)點有一個和被模擬的子斷言有同樣的名字以及一個指向joinnode的往外的ActivityEdge。例如,圖4中的并行子斷言“Sub_pred5”由圖35中的“Sub-pred5”節(jié)點3507模擬。如果圖4中的“Sub_pred5”子斷言是一個簡單斷言,則圖35中的” Sub-pred5”是一個簡單斷言節(jié)點。否則,圖35中的” Sub_pred5”是一個復(fù)合斷言節(jié)點。將所有序列框和模擬并行子斷言的斷言節(jié)點都合并在一起的join node有一個默認(rèn)為“and”的JoinSpec,使得當(dāng)來自每個序列框或者模擬并行子斷言的復(fù)合節(jié)點的token都抵達(dá)時,join node就完成了。例如,圖35中的join節(jié)點3503有默認(rèn)的JoinSpec。在UML中,一個復(fù)合斷言的間接結(jié)束點的模擬方式如下一個ActivityEdge從 jo innode 指向——個 decision node,再從 i亥 decision node 用 ActivityEdge 指向·ActivityFinalNode。每個間接結(jié)束點是由一個往外的ActivityEdge從decision node指向一個Ac t i V i tyF i na I No de來模擬的。每個結(jié)束點的結(jié)束條件則由指向一個模擬結(jié)束點的ActivityFinalNode 的 ActivityEdge 的 guard來模擬。當(dāng)一個ActivityFinalNode 執(zhí)行時,包含它的復(fù)合斷言節(jié)點就終止,并且設(shè)其“結(jié)果”屬性為與該ActivityFinalNode所模擬的結(jié)束點相關(guān)聯(lián)的結(jié)束值。如圖35所示,join node3503有一個往外的ActivityEdge指向了一個 decision node3508。decision node3508 有一個帶有[ExitCondl] guard 的往外的ActivityEdge 指向了名為“Resultl”的 ActivityFinalNode。它模擬了圖 4 中“PredO”復(fù)合斷言 400 中的“Resultl”結(jié)束點 411。decision 節(jié)點 3508 有另一個帶有“ExitCond2”guard的往外的ActivityEdge指向了另一個名為“Yes”的ActivityFinalNode。它模擬了圖4中的“Yes”結(jié)束點412。復(fù)合斷言的隱含結(jié)束點的行為在UML中可以用如下方式來模擬如果decisionnode的所有往外的ActivityEdge的guard都不為真,包含它的復(fù)合斷言節(jié)點被終止,其“結(jié)果”屬性設(shè)為與隱含結(jié)束點相聯(lián)系的結(jié)束值。如圖35所示,如果[ExitCond I]和[ExitCond2]都不為真,“PredO”復(fù)合斷言節(jié)點3500終止,其“結(jié)果”屬性被設(shè)為與隱含結(jié)束點相關(guān)聯(lián)的結(jié)束值?;谕瑯拥姆椒ǎ瑘D29中的“D2”復(fù)合斷言可以由圖36中的“D2”復(fù)合斷言節(jié)點3600來模擬。更明確地來說,“Yes”結(jié)束點是如下來模擬的從decision node3601有一個往外的指向“Yes” ActivityFinalNode3602的ActivityEdge,并且這個往外的ActivityEdge的guard是[全為正],這意為“如果所有的序列框和模擬并行子斷言的斷言節(jié)點都運算為正的結(jié)果?!比绻粋€復(fù)合斷言所有的結(jié)束點都是直接結(jié)束點,那么在UML中模擬這個復(fù)合斷言時不必有joinnode和decisionnode。另外,每個代表序列框的虛線框也可以省略掉。例如,圖31中的“Pred5”復(fù)合斷言可以由以UML圖37中的“Pred5” 3700復(fù)合斷言節(jié)點來模擬。圖 37 中的 “Sub-predl”,“Sub_pred2”,“Sub_pred3”,和 “Sub_pred4” 模擬了圖31中“Pred5”復(fù)合斷言3100中的同名子斷言。圖37中的每個ActivityFinalNode,比如“ResultO”、“Resultl”和“Result3”則模擬了圖31中“Pred5”復(fù)合斷言3100的同名結(jié)束點。在UML中,可用簡單斷言節(jié)點來模擬復(fù)合斷言中的簡單子斷言。簡單斷言節(jié)點是UML中一種特殊的Action類型,它有一個“結(jié)果”屬性。當(dāng)簡單斷言節(jié)點執(zhí)行完成之后,其結(jié)果可以設(shè)為一個正值或者一個非正值。復(fù)合斷言節(jié)點在擴(kuò)展后的UML中的使用方式和圖23中所示的使用復(fù)合斷言的方式一樣。圖38A顯示了 圖35中的“PredO”復(fù)合斷言節(jié)點3500是如何被用作一個decisionnode3800,來從“A”,“C,,和“E”中選擇下一步要執(zhí)行的Activity。該“PredO”復(fù)合斷言節(jié)點模擬了圖4中的“PredO”復(fù)合斷言400。圖38B顯示了使用復(fù)合斷言節(jié)點來制定決策的另一種方式。和圖25所示的將復(fù)合斷言作為一個Activity的用法類似,圖35中的“PredO”復(fù)合斷言節(jié)點3500在圖38B中被用作“B”Activity的往外的sequence flow的目標(biāo)節(jié)點3801?!癙redO”復(fù)合斷言節(jié)點3801有一個往外的edge指向了 decision node3802,并且該decision node有3個往外的ActivityEdge。每個 ActivityEdge 的 guard 定義了 :如果 “PredO” 3801 的“結(jié)果”屬性運 算為與某個結(jié)束點相關(guān)聯(lián)的結(jié)束值,將會執(zhí)行相關(guān)聯(lián)的ActivityEdge。在一種圖形語言中來模擬復(fù)合斷言上述在BPMN和UML中模擬復(fù)合斷言的方式可以推廣應(yīng)用到其他類似的圖形建模
;五古由I 口口卞 O為了模擬復(fù)合斷言,下面的新組件可以擴(kuò)展到一種圖形語言中1)模擬復(fù)合斷言的復(fù)合斷言節(jié)點;2)模擬一個序列的序列框;3)模擬終點的終止節(jié)點;4)模擬結(jié)束點的結(jié)束節(jié)點;5)—個聯(lián)結(jié)了復(fù)合斷言節(jié)點中所有序列框和斷言節(jié)點的合并分叉節(jié)點;6)模擬一個簡單斷言的簡單斷言節(jié)點。為了簡化起見,復(fù)合斷言節(jié)點和簡單斷言節(jié)點也被稱作斷言節(jié)點。在一個圖形語言中,一個復(fù)合斷言節(jié)點可以模擬一個復(fù)合斷言。一個復(fù)合斷言節(jié)點可以有一個“結(jié)果”屬性來存儲它終止后的結(jié)果,它模擬了復(fù)合斷言的“結(jié)果”屬性。一個復(fù)合斷言節(jié)點可以顯示為一個框,它包含了序列框和模擬并行子斷言的斷言節(jié)點。這些模擬并行子斷言的斷言節(jié)點和序列框都由一個合并分叉節(jié)點結(jié)合起來,該合并分叉節(jié)點后面跟著指向多個結(jié)束節(jié)點的有條件的箭頭。例如,用一種一般的圖形語言,圖4中的復(fù)合斷言“PredO” 400可以由復(fù)合斷言節(jié)點“PredO” 3900來模擬,如圖39所示。序列框3901、序列框3902、模擬并行子斷言的斷言節(jié)點“Sub-pred5”和“Sub-pred6”由合并分叉節(jié)點3907結(jié)合起來,其后跟著指向結(jié)束節(jié)點“Resultl”和“Yes”的有條件的箭頭。注意一種圖形語言通常用節(jié)點(node)來表示要做的一些活動(activity),而用箭頭來將一個節(jié)點連接到另一個節(jié)點。因為BPMN與一般圖形語言的形式較類似,這里用BPMN的圖形語言為例來說明在一般的圖形語言中如何模擬復(fù)合斷言。一個序列框可以包含多種類型的節(jié)點,包括模擬順序型子斷言的斷言節(jié)點、終止節(jié)點和結(jié)束節(jié)點,并且每個節(jié)點由有條件箭頭連接到其它節(jié)點。如圖39所示,序列框3902包含了模擬順序型子斷言的斷言節(jié)點“Sub-pred3”和“Sub-precM”、終止節(jié)點“EP2”和“EP3”以及結(jié)束節(jié)點“Result3”。因為模擬斷言節(jié)點的每個子斷言也可以是一個復(fù)合斷言節(jié)點,所以一個復(fù)合斷言節(jié)點可以是嵌套的。如圖39所示,“Sub-pred3”可以是一個復(fù)合斷言節(jié)點。
復(fù)合斷言中的簡單子斷言可以由簡單斷言節(jié)點來模擬,簡單斷言節(jié)點是在圖形語言中用來代表單一執(zhí)行步驟的一個組件,比如BPMN中的Task和UML中的Action。和復(fù)合斷言節(jié)點一樣,簡單斷言節(jié)點有一個“結(jié)果”屬性。執(zhí)行完之后,其“結(jié)果”屬性被設(shè)為一個正值或者一個非正值。雖然在上面的描述中,復(fù)合斷言節(jié)點中的各個組件是以某種語言來顯示的,但在本發(fā)明的具體實現(xiàn)中,每個組件可以用另一種不同的圖形語言來顯示而不影響其功能。例如,圖39中的終止節(jié)點顯示為 但在另一個實施例中,終止節(jié)點可以顯示為實心方框。而在另一個實施例中,終止節(jié)點可以顯示為空心方框。只要每種組件類型都有一個獨特的圖形顯示方法使得它們能彼此區(qū)分開來,本發(fā)明的功能就不會削弱。在一種圖形語言中來模擬復(fù)合DS :上文描述了如何在其他圖形語言中來模擬復(fù)合斷言。同樣的方法也可以用在其他圖形語言中來模擬一個復(fù)合DS,因為復(fù)合DS和復(fù)合斷言有幾乎同樣的復(fù)合結(jié)構(gòu)。 復(fù)合DS去掉了對復(fù)合斷言的某些限制,所以可以看成是對復(fù)合斷言的一種推廣。復(fù)合斷言中的每個序列中可能只有一個初始子斷言,而復(fù)合DS中的每個序列中則可能有多個初始子DS。復(fù)合斷言中的遷移條件和結(jié)束條件有更多限制,而復(fù)合DS中,除了在復(fù)合斷言中可以定義的內(nèi)容之外,其遷移條件和結(jié)束條件還可以用任何復(fù)合斷言或者簡單斷言來定義。由于其組成結(jié)構(gòu)的相似性,可以把圖19所示的對復(fù)合斷言“pred”的執(zhí)行過程“evalPred (pred)” 1900修改成描述一個名為“DS”的復(fù)合DS的執(zhí)行過程evalDS(DS),只要把過程1900中的每個“pred”或“Pred”都改成“DS”即可。換句話說,一個復(fù)合DS的執(zhí)行類似于一個復(fù)合斷言的執(zhí)行。唯一的不同是evalPred (pred)過程是針對一個復(fù)合斷言和其所有的子斷言來執(zhí)行,而evalDS (DS)過程則是針對一個復(fù)合DS和其所有的子DS來執(zhí)行。因此,上述在其他圖形語言中模擬復(fù)合斷言的方式可以推廣應(yīng)用到復(fù)合DS中。一個圖形語言通常使用節(jié)點(node)表示要做的活動,并且通過箭頭把一個節(jié)點連接到另一個節(jié)點。因為BPMN類似于此類圖形語言的一般形式,這里使用BPMN圖形語言作為一個例子來示范如何在此類圖形語言中模擬復(fù)合DS。為了模擬一個復(fù)合DS,下面一些新的組件可以擴(kuò)展到一個圖形語言中1)模擬復(fù)合DS的復(fù)合DS節(jié)點,2)模擬復(fù)合DS中序列的序列框,3)模擬序列中起點的起始節(jié)點,4)模擬序列中終點的終止節(jié)點,5)模擬結(jié)束點的結(jié)束節(jié)點,6)用來結(jié)合所有在復(fù)合DS中的序列框和模擬并行子DS的DS節(jié)點的合并分叉節(jié)點,7)模擬一個簡單DS的簡單DS節(jié)點。為了簡化起見,復(fù)合DS節(jié)點和簡單DS節(jié)點也叫做DS節(jié)點。復(fù)合DS節(jié)點是用來模擬一個復(fù)合DS的。一個復(fù)合DS節(jié)點可以有一個“結(jié)果”屬性來模擬復(fù)合DS的”結(jié)果“屬性,它用來存儲一個復(fù)合DS節(jié)點終止后的執(zhí)行結(jié)果。另外,一個復(fù)合DS節(jié)點可以包括1)多個序列框,2)復(fù)合DS中多個模擬并行子DS的DS節(jié)點,3)一個合并分叉節(jié)點,4)多個間接結(jié)束節(jié)點。例如,圖3中“DS0”復(fù)合DS 300可以由圖40所示的“DS0”復(fù)合DS節(jié)點4000來模擬。復(fù)合DS的每個序列都是由復(fù)合DS節(jié)點中的一個序列框來了模擬的。該序列框可以有1)多個用來模擬序列中順序型子DS的DS節(jié)點,2)將一個序列框中的DS節(jié)點連接起來的箭頭,3)多個起始節(jié)點,4)多個終止節(jié)點,5)多個直接結(jié)束節(jié)點。一個序列框可以顯示為虛線框,并且由一個往外的箭頭連接到合并分叉節(jié)點。例如,圖40中的序列框4001模擬了圖3中“DS0”復(fù)合DS300中的第一個序列,而序列框4002則模擬了第二個序列。圖40中,每個序列框都有I個往外的箭頭指到合并分叉節(jié)點4007上。一個序列框中,每個DS節(jié)點都模擬了序列中的一個順序型子DS。例如,在序列框4002 中,圖 40 中的 “Sub-DS3”,“Sub_DS4” 和 “Sub_DS5” 模擬了圖 3 中 “DS0” 復(fù)合 DS300的第二個序列中的各個同名的子DS。如果一個子DS是簡單DS,則由一個簡單DS節(jié)點來模擬。否則,由序列框中的一個復(fù)合DS節(jié)點來模擬。序列中的起點可以由起始節(jié)點來模擬。例如,圖3中的起點309由圖40中的起始節(jié)點4009來模擬。一個序列中從一個源頭指向多個目標(biāo)的每個遷移箭頭都是由一個從模擬源頭的節(jié)點指向一個模擬目標(biāo)的節(jié)點的箭頭來模擬的。另外,和每個遷移箭頭相聯(lián)系的遷移條件 則用一個與箭頭相關(guān)聯(lián)的條件屬性來模擬。這個條件屬性可以顯示在箭頭附近。例如,圖3中的“cond3”遷移在圖40中是由從起始節(jié)點4009指向“Sub_DS3”的箭頭來模擬的,其條件屬性“cond3”則顯示在箭頭附近;圖3中的“cond4”遷移在圖40中是由從起始節(jié)點4009指向“Sub-DS4”的箭頭來模擬的,其條件屬性“cond4”則顯示在箭頭附近。另一個例子中,圖3中的遷移“TransCond3”和“TransCond4”是由指向“EP2”4003和指向“Sub_DS5”的箭頭來模擬的,如圖40所示。序列中的終點可以由終止節(jié)點來模擬。為了將終止節(jié)點和起始節(jié)點及結(jié)束節(jié)點區(qū)分開來,終止節(jié)點可以顯示為 。例如,圖3中的“EP2”終點307在圖40中由同名的4003終止節(jié)點來模擬。當(dāng)?shù)竭_(dá)終止節(jié)點時,模擬一個終點的終止節(jié)點需要記錄它所模擬的終點的名字或其內(nèi)部代號。該信息后面將被每個結(jié)束條件使用,來檢驗復(fù)合DS是否應(yīng)當(dāng)在其對應(yīng)的結(jié)束點處結(jié)束。一個序列中,隱含終點的行為是這樣來模擬的源頭執(zhí)行完之后,如果源頭的每個往外的箭頭的條件屬性都不滿足,模擬該序列的序列框就終止了,并且記錄下其隱含終點的名字或其內(nèi)部的代號,以備后面被結(jié)束條件檢查。如圖40所示,“Sub-DS3”完成之后,檢驗每個往外的箭頭的條件屬性,比如“cond5”和“cond6”。如果它們都不為真,序列框4002就終止,并且記錄下其隱含的終點名稱或其內(nèi)部的的代號。直接結(jié)束點是由一個序列框內(nèi)部的結(jié)束節(jié)點來模擬的。當(dāng)這個結(jié)束節(jié)點執(zhí)行時,包含它的復(fù)合DS節(jié)點就終止了,將其“結(jié)果”屬性設(shè)為被與該結(jié)束節(jié)點所模擬的結(jié)束點相關(guān)聯(lián)的結(jié)束值。例如,圖3中的直接結(jié)束點“ResultO” 311在圖40中是用“ResultO”結(jié)束節(jié)點4011來模擬的。如果“cond2”4010為真,“ResultO”結(jié)束節(jié)點4011開始執(zhí)行,它終止了 “DS0”復(fù)合DS節(jié)點4000,并且將其“結(jié)果”屬性設(shè)為與被“ResultO”結(jié)束節(jié)點所模擬的結(jié)束點相關(guān)聯(lián)的結(jié)束值。復(fù)合DS中每個并行子DS既可以由一個簡單DS節(jié)點來模擬,也可以由一個復(fù)合DS節(jié)點來模擬,這取決于該并行子DS是簡單的還是復(fù)合的,并且模擬子DS的這個DS節(jié)點只有一個指向合并分叉節(jié)點的往外的箭頭。例如,圖3中,并行子DS “Sub-DS6”在圖40中是用“Sub-DS6”4006來模擬的,它既可以是復(fù)合DS節(jié)點,也可以是簡單DS節(jié)點,這取決于圖3中的“Sub-DS6”是簡單的還是復(fù)合的。
用來結(jié)合復(fù)合DS中所有序列框和模擬并行子DS的DS節(jié)點的合并分叉節(jié)點有如下行為當(dāng)每個序列框或者模擬并行子DS的DS節(jié)點終止時,所有合并分叉節(jié)點的往外的箭頭的條件屬性都會被檢查。如果這些條件屬性中有任何一個為真,包含它的復(fù)合DS就結(jié)束,并且其“結(jié)果”屬性被設(shè)為與由帶有“真”條件屬性的結(jié)束節(jié)點模擬的結(jié)束點相關(guān)聯(lián)的結(jié)束值。否則,合并分叉節(jié)點會繼續(xù)等待。在本圖形語言的實施例中,合并分叉節(jié)點顯示為里面為“?”的菱形。例如,圖40中,合并分叉節(jié)點4007合并了序列框4001和4002,以及“Sub-DS6”DS 節(jié)點 4006。復(fù)合DS的一個間接 結(jié)束點可以由一個結(jié)束節(jié)點來模擬,該結(jié)束節(jié)點有一個來自合并分叉節(jié)點并指向它的箭頭。每個結(jié)束點的結(jié)束條件由一個條件屬性來模擬,這個條件屬性和指向相對應(yīng)的結(jié)束節(jié)點的箭頭是相關(guān)聯(lián)的。當(dāng)執(zhí)行到一個結(jié)束節(jié)點時,包含它的復(fù)合DS節(jié)點就終止了,并且包含它的復(fù)合DS節(jié)點的“結(jié)果”屬性被設(shè)為與被模擬的結(jié)束點相關(guān)聯(lián)的結(jié)束值。如圖40所示,合并分叉節(jié)點4007有一個條件屬性為“ExitCond I”的箭頭4008指向“Resultl”結(jié)束節(jié)點。它模擬了圖3中“DS0”復(fù)合DS 300的“Resultl”結(jié)束點312。為了模擬一個復(fù)合DS的完整的功能,每個箭頭的條件屬性可以定義為以下之一 1) 一個簡單斷言節(jié)點;2) —個復(fù)合斷言節(jié)點;3)運算為正的終止值的序列數(shù)目,包括“等于N”、“大于等與N”、“小于等于N”。復(fù)合DS的隱含結(jié)束點可以用如下方式來模擬如果這些指向結(jié)束節(jié)點的箭頭所相關(guān)聯(lián)的條件屬性都不為真,包含它的復(fù)合DS節(jié)點就終止,并且其“結(jié)果”屬性被設(shè)為與隱含結(jié)束點相關(guān)聯(lián)的結(jié)束值。如圖40所示,如果“ExitCond I”和“ExitCond 2”都不為真,“DS0”復(fù)合DS節(jié)點4000就結(jié)束,并且其“結(jié)果”屬性設(shè)為與隱含結(jié)束點相關(guān)聯(lián)的結(jié)束值。如果復(fù)合DS中的子DS是個簡單DS,它由簡單DS節(jié)點來模擬。和復(fù)合DS節(jié)點一樣,簡單DS節(jié)點有一個“結(jié)果”屬性。其操作完成之后,“結(jié)果”屬性可以設(shè)為反映其執(zhí)行狀態(tài)的一個值。為了在BPMN中模擬一個復(fù)合DS,這些添加到一般圖形語言中的新組件可以進(jìn)一步映射到如下所添加到BPMN中的新組件1)簡單DS節(jié)點被映射到簡單DS活動,2)復(fù)合DS節(jié)點被映射到復(fù)合DS活動,3)起始節(jié)點被映射到BPMN的Start Event, 4)終止節(jié)點被映射到終點事件,5)箭頭既可以被映射到BPMN的一個sequence flow,也可以被映射到BPMN的一個conditional sequence flow, 6)每個箭頭的條件屬性被映射到與每個conditionalsequence flow相關(guān)聯(lián)的BPMN的ConditionExpression屬性,7)結(jié)束節(jié)點被映射到BPMN的一個End Event,8)合并分叉節(jié)點被映射到一個結(jié)束一 Gateway。為了簡化起見,復(fù)合DS活動和簡單DS活動也被叫做DS活動。下面提供了詳細(xì)闡述。在BPMN中,簡單DS活動是一種特殊的Task類型,它有一個“結(jié)果”屬性。完成之后,其“結(jié)果”屬性可以設(shè)為一個反映其執(zhí)行狀態(tài)的值。在BPMN中,復(fù)合DS活動是一種特殊的sub-process。它可以有一個“結(jié)果”屬性來模擬復(fù)合DS的“結(jié)果”屬性,來存儲與被模擬的復(fù)合DS終止處的結(jié)束點相關(guān)聯(lián)的結(jié)束值。另外,復(fù)合DS活動還包含了復(fù)合DS中的多個序列框,多個模擬并行子DS的DS活動,一個結(jié)束一 Gateway 和多個 End Event。序列框也是BPMN中一種特殊的sub-process。它和BPMN中一般的sub-process類似,唯一不同的是到達(dá)一個內(nèi)部End Event不僅會終止該序列框,還會結(jié)束包含該序列框的模擬復(fù)合DS的復(fù)合DS活動。每個序列框都是由sequence flow連接到結(jié)束一 Gateway上的。從一個源頭指向多個目標(biāo)的遷移箭頭在BPMN中由從源頭指向其目標(biāo)的conditional sequence flow來模擬。這里的一個源頭可能是一個起始節(jié)點、一個簡單DS活動或者一個復(fù)合DS活動,而每個目標(biāo)可能是一個終止節(jié)點,一個簡單DS活動或者一個復(fù)合DS活動。另外,與每個遷移箭頭相關(guān)聯(lián)的遷移條件在BPMN中由和模擬遷移箭頭的每個conditional sequence flow 相關(guān)聯(lián)的 ConditionExpression 屬性來模擬。模擬一個終點的終點事件是增加到BPMN中的一種新的Event類型。它有一個名字屬性,設(shè)為與被模擬的終點一樣的名字。到達(dá)一個序列框中的終點事件時,該序列框就終止。并記錄下剛到達(dá)的終點事件的名字或其內(nèi)部的代號以備稍后的檢驗。為了和BPMN中的其它Event相區(qū)分,一個終點事件可以顯示為 在BPMN中,模擬結(jié)束點的是一種特殊的End Event。其名稱屬性被設(shè)為和被模擬的結(jié)束點同名。一個間接結(jié)束點的結(jié)束條件可以定義在ConditionExpression屬性中,該屬性是關(guān)聯(lián)到一個從結(jié)束-Gateway指向它的往外的sequence flow。這種特殊的EndEvent有如下行為到達(dá)End Event時,包含它的復(fù)合DS活動就結(jié)束了,并且該復(fù)合DS活動的“結(jié)果”屬性設(shè)為與被模擬的結(jié)束點相關(guān)聯(lián)的結(jié)束值。BPMN中,復(fù)合DS中每個并行子DS可以由一個簡單DS活動或者一個復(fù)合DS活動來模擬,該簡單DS活動或復(fù)合DS活動有I個往外的sequence flow指向結(jié)束-Gateway。結(jié)束一 Gateway是一個添加到BPMN中的新的Gateway類型。它支持前面所述的合并分叉節(jié)點的行為。為了和BPMN中其它的Gateway區(qū)分開來,結(jié)束一 Gateway顯示為里面帶有“?”的菱形。通過這種模擬方法,圖3中的“DS0”復(fù)合DS300在BPMN的擴(kuò)展版中可以由圖40所示的“DS0”復(fù)合DS活動4000來模擬。為了在UML活動圖中模擬復(fù)合DS,這些添加到一般圖形語言中的新組件可以進(jìn)一步映射到以下所添加到UML中的新組件中1)起始節(jié)點被映射為InitialNode ;2)終止節(jié)點被映射為FlowFinalNode ;3)決策節(jié)點后面的箭頭被映射為ActivityEdge ;4)每個箭頭的條件屬性被映射為和每個ActivityEdge相聯(lián)系的guard ;5)結(jié)束節(jié)點被映射為ActivityFinalNode ;6)合并分叉節(jié)點被映射為一個join node,后面跟著一個往外的ActivityEdge指向一個decision node。為了簡化起見,復(fù)合DS節(jié)點和簡單DS節(jié)點也被叫做DS節(jié)點。下面提供了詳細(xì)闡述。UML中,簡單DS節(jié)點是一種特殊類型的Action,它有一個“結(jié)果”屬性。完成之后,其“結(jié)果”屬性設(shè)為反映其執(zhí)行狀態(tài)的一個值。復(fù)合DS節(jié)點是新加到UML中的一種特殊Activity。它有一個“結(jié)果”屬性來模擬一個復(fù)合DS的結(jié)果屬性,用來存儲終止后的結(jié)果。另外,一個復(fù)合DS節(jié)點包含了多個序列框,模擬復(fù)合DS中的并行子DS的多個DS節(jié)點,一個join node,—個decision node和多個 ActivityFinalNode。序列框是一種新加到UML中的特殊Activity。它和ULM中其他一般的Activity類似,唯一不同的是當(dāng)內(nèi)部的ActivityFinalNode執(zhí)行時,不只是序列框會終止,包含它的復(fù)合DS節(jié)點也會終止。每個序列框都有一個指向一個join node的往外的ActivityEdge。
在UML中,從一個源頭指向多個目標(biāo)的遷移箭頭是由從模擬源頭的節(jié)點指向一個decision node的ActivityEdge來模擬的,它有一個模擬每個源頭子DS的遷移箭頭的往外的ActivityEdge。另外,在UML中,和每個遷移箭頭相關(guān)聯(lián)的遷移條件是由模擬遷移箭頭的ActivityEdge 的 guard 來模擬的。在UML中,模擬終點的FlowFinalNode類似于UML中一般的FlowFinalNode,不同的是當(dāng)?shù)诌_(dá)FlowFinalNode時,模擬一種終點的FlowFinalNode需要記錄下被模擬的終點名稱或其內(nèi)部ID。UML中模擬一個結(jié)束點的ActivityFinalNode類似于UML中的普通ActivityFinalNode,不同的是當(dāng)?shù)诌_(dá)ActivityFinalNode時,包含它的復(fù)合DS節(jié)點終止,并設(shè)復(fù)合DS節(jié)點的“結(jié)果”屬性為與被模擬的結(jié)束點相關(guān)聯(lián)的結(jié)束值。在復(fù)合DS中,模擬并行子DS的簡單DS節(jié)點或者復(fù)合DS節(jié)點有一個從它指向join node 的往外的 ActivityEdge。由合并分叉節(jié)點所映射的join node有一個默認(rèn)為“and”的JoinSpec,使得當(dāng)一個來自模擬一個序列或者一個并行子DS的每個節(jié)點的token到達(dá)后,該join node也就完成。在UML中,一個復(fù)合DS的間接結(jié)束點可以由一個從join node指向一個decisionnode 的 ActivityEdge 及其后面一個指向 ActivityFinalNode 的 ActivityEdge 所模擬。每個間接結(jié)束點由一個從decision node指向一個ActivityFinalNode的往外的ActivityEdge來模擬。每個結(jié)束點的結(jié)束條件則由這個指向相對應(yīng)的ActivityFinalNode的往外的ActivityEdge的guard來模擬。用這種模擬方法,在UML擴(kuò)展版中,圖3中的“DS0”復(fù)合DS300可以由圖41所示的“DS0”復(fù)合DS節(jié)點4100模擬。用這種方法,一個嵌套的復(fù)合DS也可以由一種圖形語言的復(fù)合DS節(jié)點來模擬,t匕如BPMN或者UML·例如,圖42中顯示了一個嵌套DS“DS1”。它的一個子DS“Sub-DS 1”4201包含了 2個子DS——“Sub-DS4”和“Sub-DS5”。圖43顯示了在BPMN擴(kuò)展版或者類似的圖形語言中如何由“DSI”復(fù)合DS節(jié)點4300來模擬圖42中的“DS1”4200。圖44顯示了在UML擴(kuò)展版中如何由“DS1”復(fù)合DS節(jié)點4400來模擬圖42中的“DSI”4200。結(jié)論本發(fā)明中描述的圖形語言是靈活的、而且是組件化的。它適用于對復(fù)雜行為的結(jié)構(gòu)化和組件化的設(shè)計。因此,在計算機(jī)系統(tǒng)生命周期的多個階段都可以用到本發(fā)明。在本發(fā)明的一個實施例中,用戶可以在一個設(shè)計工具中編輯和展示上述用圖形語言及其擴(kuò)展描述的計算機(jī)系統(tǒng)行為定義。在本發(fā)明的另一個實施例中,用戶可在監(jiān)控工具中監(jiān)控上述用圖形語言及其擴(kuò)展描述的被監(jiān)控的計算機(jī)系統(tǒng)在運行時的操作。但在另一個實施例中,計算機(jī)系統(tǒng)自身也可在圖形顯示器中用上述圖形語言及其擴(kuò)展來顯示其在運行時的執(zhí)行。這些工具內(nèi)部,可以由多種可能的內(nèi)部表現(xiàn)方法之一來實施上面描述的DS和斷言。一種內(nèi)部表現(xiàn)方法可以是一種編程語言的數(shù)據(jù)結(jié)構(gòu)形式,比如C或者Java。另一種內(nèi)部表現(xiàn)方法是以數(shù)據(jù)描述語言(data description language)的形式,比如XML。DS組件或者斷言組件一旦以一種可以被計算機(jī)程序讀取的形式被內(nèi)部地表示出來,比如Java程序,那么即使沒有用這些圖形語言來顯示其行為,本發(fā)明也可以有所裨益。
類似地,本發(fā)明的另一個實施例可以直接在計算機(jī)程序代碼中嵌入本發(fā)明所描述的DS和斷言的部分結(jié)構(gòu)。例如,計算機(jī)程序為了將一個結(jié)束值關(guān)聯(lián)到某個結(jié)束點,可以為每個隱含結(jié)束點在計算機(jī)代碼中直接設(shè)為零,而不用以數(shù)據(jù)結(jié)構(gòu)來存儲其值。從另一方面來看,不是所有的DS和斷言都需要由軟件來自動化或者由硬件來執(zhí)行。一個實施例可以使用這些結(jié)構(gòu)以DS和斷言組件來定義人類的活動、業(yè)務(wù)流程或者行動計劃。這些DS和斷言組件中有一些可以由軟件或者硬件來實施,而另一些則可由人以手工來實施。雖然上面的描述包含了許多詳細(xì)說明,但這些詳細(xì)說明僅僅是為了提供對本發(fā)明描述的實施例作一些闡述,而不應(yīng)當(dāng)視為對本發(fā)明的范圍做了任何限制?;谶@里提供和闡述的內(nèi)容,本技術(shù)領(lǐng)域里的一般人可以在本發(fā)明的范圍內(nèi)擴(kuò)展到其他的各種實現(xiàn)及應(yīng)用上。例如,與結(jié)束點或者終點相關(guān)聯(lián)的結(jié)束值可以通過下面的一種方式來實施比如一個無符號整數(shù)、一個整數(shù)或者一個字符串。在本發(fā)明的另一個實施例中,可以用零或者一些負(fù)數(shù)來表示一個非正結(jié)果,而用正數(shù)來表示正的結(jié)果。在本發(fā)明的另一個實施例中,大于或者等于某個邊界值的數(shù)可以用于表示一個正值的結(jié)果;而小于或者等于某個邊界值的數(shù)則可以用于表示一個非正值的結(jié)果。在本發(fā)明的另一個實施例中,一個非零數(shù)可用于表示一個正的結(jié)果,零則可用于表示一個非正的結(jié)果。在另一個實施例中,也可使用一個字符串來表示一個負(fù)結(jié)果,比如“No”或者“false”,而用其他不同的字符串來表示正的結(jié)果。在本發(fā)明的一個實施例中,也可將結(jié)束值和結(jié)束點的名字聯(lián)合在一起。例如,某個名字可用于表示一個非正結(jié)果,比如“No”,而用戶定義的任何其他名字可用于表示一個正的結(jié)果。
本發(fā)明的一個實施例中,為方便起見,某個結(jié)束點的結(jié)束值或者某個終點的終止值可以由編輯工具自動分配,而在另一個實施例中,為靈活起見,設(shè)計者可以定義這些值。但在另一個實施例中,結(jié)束點的名字串本身即可能用作為結(jié)束點的結(jié)束值,反之亦然。當(dāng)序列到達(dá)一個終點,一個實施例可以記錄下剛剛到達(dá)的終點名稱,使得結(jié)束條件稍后可以檢驗它。但是,另一個實施例可以通過記錄和每個終點相關(guān)聯(lián)的唯一的內(nèi)部標(biāo)識符來更有效率地達(dá)到同樣的目的。本發(fā)明中的一些名字可以用其它名字來代替。例如,隱含結(jié)束點“No”也可以用“False” 或者 “negative” 來代替。本發(fā)明中描述的許多組件有一個可視化的表現(xiàn)。雖然本發(fā)明中用到了某種可視化的形式,但是也可以用其他可視化的形式來表現(xiàn)。例如,結(jié)束一 Gateway不僅可以顯示為里面有一個問號的菱形,也可以顯示為六邊形或其他形狀。舉另一個例子,在本發(fā)明中,結(jié)束點的名字和條件以兩個獨立的文本顯示在結(jié)束點附近。在本發(fā)明的一個實施例中也可以將它們顯示在同一個文本中,比如“name:condition”。雖然本發(fā)明中描述了許多組件,但在應(yīng)用中不是所有的組件都會被用到。例如,圖20中的“D1”復(fù)合斷言2000沒有并行子斷言。另一個例子圖28中,“D2”復(fù)合斷言2800既沒有任何序列也沒有結(jié)束點。為了進(jìn)一步澄清這點,這里提供了更多的例子。圖45顯示了帶有一個子簡單斷言”simp-predO”和一個間接結(jié)束點’ExitCondl”的復(fù)合斷言例子。圖46顯示了帶有一個子復(fù)合斷言”predr’和一個間接結(jié)束點"ExitCondl”的復(fù)合斷言例子。圖47顯示了帶有一個子簡單斷言、一個遷移和一個間接結(jié)束點"ExitCondl”的復(fù)合斷言例子。圖48顯示了帶有兩個子簡單斷言”simp-predl”、”simp-pred2”和一個間接結(jié)束點”ExitCondl”的復(fù)合斷言例子。圖49顯示了帶有一個子簡單斷言”simp-predO”、一個子復(fù)合斷言”predl”和一個間接結(jié)束點的復(fù)合斷言例子。圖50顯示了帶有一個子簡單斷言”simp-predO”、一個遷移和一個直接結(jié)束點的復(fù)合斷言例子。圖51顯示了帶有兩個子簡單斷言”simp-precKTV’simp-predl”、一個遷移和一個直接結(jié)束點的復(fù)合斷言例子。圖52顯示了帶有一個子復(fù)合斷言”pred2”、一個遷移和一個直接結(jié)束點的復(fù)合斷言例子。本應(yīng)用中所描述的任何軟件組件或者功能都可以用程序代碼來實施,而被一個或者多個處理器來執(zhí)行,這些程序代碼可以使用任何合適的計算機(jī)語言,例如,Java,C++或者Perl,而開發(fā)的方法則可用傳統(tǒng)的或者面向?qū)ο蟮募夹g(shù)。程序代碼可以作為一系列的指令或者命令存儲在計算機(jī)中的可讀介質(zhì)上以便于存儲和/或傳輸,合適的介質(zhì)包括了隨機(jī)訪問內(nèi)存(RAM),只讀存儲器(R0M),磁性介質(zhì),比如硬盤或者軟盤,或者光學(xué)介質(zhì),比如光盤(⑶)或者DVD (數(shù)字多功能磁盤),閃存,諸如此類。計算機(jī)可讀介質(zhì)可以是這些存儲或者傳輸設(shè)備中的任何形式的結(jié)合。 這種程序代碼也可以通過遵守各種協(xié)議,包括因特網(wǎng)協(xié)議,的有線的、光學(xué)的、和/或無線的網(wǎng)絡(luò)來使用適合傳輸?shù)妮d波信號進(jìn)行編碼和傳輸。同樣地,根據(jù)本發(fā)明的一個實施例,一個計算機(jī)可讀介質(zhì)可以使用一個用這種程序代碼編碼的數(shù)據(jù)信號來創(chuàng)建。這種用程序代碼編碼的計算機(jī)可讀介質(zhì)也可以由一個兼容的設(shè)備來包裝,或者由其他設(shè)備單獨提供(例如,通過網(wǎng)絡(luò)下載)。任何這種計算機(jī)可讀介質(zhì)可以保存在一個單獨的計算機(jī)程序產(chǎn)品中(比如,硬盤驅(qū)動器或者整個計算機(jī)系統(tǒng)),也可以放在一個系統(tǒng)或者網(wǎng)絡(luò)中不同的計算機(jī)程序產(chǎn)品中。一個計算機(jī)系統(tǒng)可能包括一個顯示器、打印機(jī)或者其他合適的顯示設(shè)備來給用戶提供這里談到的任何結(jié)果。當(dāng)程序代碼被加載到實質(zhì)的計算機(jī)設(shè)備上或者在機(jī)器上執(zhí)行時,該機(jī)器即實施了本發(fā)明。由此可見,依據(jù)本發(fā)明,所描述的DS、斷言和與相關(guān)的GUI組件的表示和過程,當(dāng)用在定義許多計算機(jī)系統(tǒng)的復(fù)雜行為時,是一個很強大的技術(shù)。特別是,本發(fā)明在以下的一些主要領(lǐng)域里擴(kuò)展和改進(jìn)了之前的一些技術(shù),比如BPMN, XPDL, WS-⑶L或者UML0第一,即使復(fù)雜決策也可以被圖形化地用復(fù)合斷言來顯示。以至于更多的行為都可以用圖形來表現(xiàn),而不須依賴代碼和數(shù)據(jù)。如須依賴代碼或者數(shù)據(jù),在設(shè)計和維護(hù)上都會造成困難。第二,復(fù)合斷言中直接支持順序型子斷言和并行子斷言。這種靈活性讓我們可以用組件化的和簡潔的方式在更廣泛的范圍中來定義復(fù)雜的決策行為。第三,支持多個正的結(jié)束值,使得多個布爾型決策可以合并成一個復(fù)合斷言,以提高性能。第四,自動提供了隱含結(jié)束點和隱含終點的行為,使得設(shè)計被大大地簡化了。第五,通過提供強大并且靈活的組合結(jié)構(gòu),可以消除掉設(shè)計上的一些復(fù)雜性。例如,在BPMN中復(fù)合DS和復(fù)合斷言的模擬只用了一種結(jié)束-Gateway,就可以取代了 BPMN中所有的四種Gateway類型和其各種的組合方式。為了說明和闡述本發(fā)明,上面的描述中給出了許多本發(fā)明的實施例。但提供這些實施例的并非用這些固定形式來限制本發(fā)明,根據(jù)上文的描述,對本發(fā)明還應(yīng)該可以做出多種修改和變化。之所以選擇了以上所描述各種實施例和各種形式,其目的是為了更好的解釋本發(fā)明的原則及其應(yīng)用,以便于本領(lǐng)域的技術(shù)人員能更好地使用本發(fā)明。以上所引用的出版物,專利或?qū)@暾垼诖?以引證的方式并入其全部內(nèi)容。
權(quán)利要求
1.一種將軟件中做決策時來檢驗一個條件集是否為真的斷言轉(zhuǎn)換為動態(tài)系統(tǒng)并計算的方法,包括步驟如下 第I、將所述斷言轉(zhuǎn)化為對應(yīng)的動態(tài)系統(tǒng); 第2、將步驟I中所述斷言作為一個當(dāng)前斷言; 第3、若所述當(dāng)前斷言為簡單斷言,直接計算所述簡單斷言以得到所述當(dāng)前斷言的結(jié)果,所述當(dāng)前斷言的計算即結(jié)束; 第4、所述當(dāng)前斷言為復(fù)合斷言,其所對應(yīng)的所述動態(tài)系統(tǒng)中包括第一多個并行序列,而每個序列包括對應(yīng)的順序子斷言,則遍歷所述第一多個并行序列并將所述第一多個并行序列中的每個序列分別作為當(dāng)前序列以執(zhí)行如下子步驟 第4. I、在步驟4中的遍歷操作中,若存在下一個序列,則執(zhí)行第4. 2步驟;若不存在下一個序列,則所述當(dāng)前斷言的結(jié)果為假值,所述當(dāng)前斷言的計算即結(jié)束; 第4. 2、將步驟4. I中的所述下一個序列作為當(dāng)前序列; 第4. 3、將當(dāng)前序列中第一個子斷言作為當(dāng)前子斷言,并執(zhí)行如下子步驟 第4. 3. I、以當(dāng)前子斷言作為一個當(dāng)前斷言,遞歸執(zhí)行步驟3以獲得所述當(dāng)前子斷言的結(jié)果; 第4. 3. 2、獲取當(dāng)前子斷言的第一個遷移,作為當(dāng)前遷移; 第4. 3. 3、計算所述當(dāng)前遷移的遷移條件值; 第4. 3. 4、若所述遷移條件值為假,則執(zhí)行步驟4. 3. 7 ;否則執(zhí)行接下來步驟; 第4. 3. 5、將當(dāng)前遷移的目標(biāo)所指的子斷言設(shè)定為當(dāng)前子斷言,判斷所述當(dāng)前子斷言是否為終點; 第4. 3. 6、若所述當(dāng)前子斷言是終點,則終點值就是所述當(dāng)前序列的結(jié)果,執(zhí)行步驟5 ;否則執(zhí)行4. 3. I步驟; 第4. 3. 7、獲取所述當(dāng)前子斷言的下一個遷移,若存在下一個遷移,則將下一個遷移作為當(dāng)前遷移,并執(zhí)行步驟4. 3. 3 ;否則執(zhí)行接下來步驟; 第4. 3. 8、所述當(dāng)前序列的結(jié)果為假值,執(zhí)行下面步驟5; 第5、檢查步驟4中所述復(fù)合斷言的每個結(jié)束條件,若有結(jié)束條件為真,則所對應(yīng)的結(jié)束點的結(jié)束值就是所述當(dāng)前斷言的結(jié)果,所述當(dāng)前斷言的計算即結(jié)束;否則執(zhí)行步驟4. I。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述復(fù)合斷言所對應(yīng)的動態(tài)系統(tǒng)至少有 個結(jié)束點和一個結(jié)果,其中 a)各結(jié)束點均包括一個結(jié)束值和一個結(jié)束條件,其中 所述結(jié)束值的值是一個正值和一個非正值之一; 所述結(jié)束條件定義了一種終止情況,在該情況下,所述動態(tài)系統(tǒng)的運算會結(jié)束; b)所述結(jié)果是一個屬性,所述屬性用于當(dāng)所述動態(tài)系統(tǒng)在所述結(jié)束點處結(jié)束時存儲所述結(jié)束值;
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述結(jié)束點中的至少一個結(jié)束點包括結(jié)束名稱,所述結(jié)束名稱用來定義一個名稱以標(biāo)識所述結(jié)束點。
4.根據(jù)權(quán)利要求I所述的方法,其特征在于,在第3步驟中針對復(fù)合斷言分解依據(jù)并行執(zhí)行的關(guān)系,所述并行執(zhí)行的關(guān)系包括1)邏輯或關(guān)系; 2)邏輯M選N關(guān)系;和 3)邏輯和關(guān)系。
5.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述遷移包括一個源頭、一個目標(biāo)和一個遷移條件,其中 a)所述源頭定義了第一個所述子動態(tài)系統(tǒng); b)所述目標(biāo)定義了第二個所述子動態(tài)系統(tǒng); c)所述遷移條件定義了這樣一種情況,即,如果滿足所述情況,則在運算了所述源頭之后運算所述目標(biāo)。
6.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述轉(zhuǎn)化為對應(yīng)的動態(tài)系統(tǒng)的具體步驟如下 第I、將所述斷言設(shè)為當(dāng)前斷言; 第2、為當(dāng)前斷言建立對應(yīng)的動態(tài)系統(tǒng),并將所述動態(tài)系統(tǒng)設(shè)為當(dāng)前系統(tǒng); 第3、若當(dāng)前斷言為簡單斷言,將所述簡單斷言轉(zhuǎn)化為簡單動態(tài)系統(tǒng),所述當(dāng)前斷言的轉(zhuǎn)化即結(jié)束;否則將當(dāng)前斷言根據(jù)并行執(zhí)行關(guān)系劃分為第二多個并行序列,針對第二多個并行序列中的每個序列在當(dāng)前系統(tǒng)中建立對應(yīng)的所述第一多個并行序列中的每個序列; 第4、將當(dāng)前 斷言中每個序列根據(jù)順序執(zhí)行關(guān)系劃分為多個子斷言,針對每個子斷言在當(dāng)前系統(tǒng)中所對應(yīng)的序列中建立對應(yīng)的子動態(tài)系統(tǒng);子動態(tài)系統(tǒng)之間依據(jù)對應(yīng)的子斷言之間順序關(guān)系而建立遷移關(guān)系;和 第5、針對步驟4中的每個子斷言,將所述子斷言設(shè)為當(dāng)前斷言,并遞歸執(zhí)行步驟2。
全文摘要
本發(fā)明是一種基于動態(tài)系統(tǒng)實現(xiàn)復(fù)合斷言計算的方法。本發(fā)明所述的方法將有效地支持將任意復(fù)合斷言轉(zhuǎn)換為動態(tài)系統(tǒng),并進(jìn)一步實現(xiàn)其計算求值。這些斷言包括單個簡單斷言、多個簡單斷言的順序多個復(fù)合斷言的順序組合、多個簡單斷言的并行組合、多個復(fù)合斷言的并行組合、以及上述多個斷言的順序和并行混合組合。本發(fā)明與現(xiàn)有的復(fù)合斷言實現(xiàn)方法相比,具有表達(dá)方式更通用、高效率并行化求值、以及使用更簡單更簡潔的特點。
文檔編號G06Q10/06GK102902519SQ20121029787
公開日2013年1月30日 申請日期2008年9月10日 優(yōu)先權(quán)日2007年9月11日
發(fā)明者夏壽民 申請人:夏壽民
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1