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