專利名稱:描述及開發(fā)動(dòng)態(tài)行為應(yīng)用系統(tǒng)的方法與系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明與流程圖,活動(dòng)圖,業(yè)務(wù)流程,流程建模,工作流,狀態(tài)機(jī),協(xié)議規(guī)程以及應(yīng)用軟件設(shè)計(jì)與實(shí)現(xiàn)有關(guān)。
背景技術(shù):
按照傳統(tǒng)的做法,可以有兩種不同途徑來(lái)對(duì)一個(gè)系統(tǒng)的行為進(jìn)行建模。一種途徑是關(guān)注系統(tǒng)的內(nèi)部主動(dòng)式行為,而另一種途徑則關(guān)注系統(tǒng)對(duì)外部事件的反應(yīng)式行為。這兩種途徑表現(xiàn)為UML中兩種不同風(fēng)格的圖畫關(guān)注主動(dòng)式行為的“活動(dòng)圖(ActivityDiagram) ”和關(guān)注反應(yīng)式行為的“狀態(tài)圖(Statechart) ”。我們把前一種途徑稱為“主動(dòng)式行為建?!倍押笠环N途徑稱為“反應(yīng)式行為建?!?。主動(dòng)式行為建模語(yǔ)言包括流程圖,業(yè)務(wù)流程建模符號(hào)(BPMN),XML流程定義語(yǔ)言(XPDL),業(yè)務(wù)流程執(zhí)行語(yǔ)言(BPEL)和UML活動(dòng)圖。BPMN和UML活動(dòng)圖都在一個(gè)圖畫中使用節(jié)點(diǎn)來(lái)表示要執(zhí)行的活動(dòng),而使用連接兩個(gè)節(jié)點(diǎn)的鏈接來(lái)表示這些活動(dòng)的順序。在另一方面,XPDL和BPEL用一個(gè)XML句法替代一個(gè)圖形來(lái)定義這些活動(dòng)節(jié)點(diǎn)和它們之間的鏈接。雖然這些主動(dòng)式行為建模語(yǔ)言在描述一個(gè)系統(tǒng)的內(nèi)部主動(dòng)式行為時(shí)有用,但它們?cè)诿枋鰧?duì)隨時(shí)可以發(fā)生的外部事件做出的反應(yīng)式行為時(shí)有所不足。一般的解決辦法是定義一些特殊的事件檢測(cè)活動(dòng),比如BPMN和BPEL中的“接收(receive) ”活動(dòng),來(lái)檢測(cè)這些可能發(fā)生的外部事件。由于這些外部事件隨時(shí)都可能發(fā)生,因此不得不在一幅圖的各個(gè)地方插入各種事件檢測(cè)活動(dòng)。然而,和一個(gè)狀態(tài)機(jī)不同的是,這些主動(dòng)式行為的建模圖畫沒(méi)有一個(gè)能把事件檢測(cè)活動(dòng)集中在一起的“狀態(tài)”機(jī)制。結(jié)果導(dǎo)致這些事件檢測(cè)活動(dòng)散布在圖畫中的各個(gè)地方,從而使得在運(yùn)行時(shí)刻要想知道某個(gè)時(shí)刻一個(gè)應(yīng)用系統(tǒng)在等待哪些外部事件變得非常困難。這種方法的主要缺點(diǎn)在于如果在圖畫中的關(guān)鍵點(diǎn)沒(méi)有插入正確的事件檢測(cè)活動(dòng),那么一些意外的事件會(huì)被漏掉,應(yīng)用系統(tǒng)就有可能會(huì)因此而崩潰。為了克服這個(gè)問(wèn)題,一個(gè)設(shè)計(jì)者會(huì)試圖在整個(gè)圖畫中布滿各種事件檢測(cè)機(jī)制。而這樣又會(huì)導(dǎo)致一個(gè)過(guò)度復(fù)雜的圖畫。這種方法的另一個(gè)不足在于這些事件檢測(cè)活動(dòng)是按照一種隨意、而沒(méi)有系統(tǒng)的方式布置在圖中,這使得驗(yàn)證各方行為是否一致的工作變得非常困難。許多重要的系統(tǒng)設(shè)計(jì)方面的問(wèn)題就是由這個(gè)不足所造成的。因?yàn)橐粋€(gè)主動(dòng)式行為的建模語(yǔ)言無(wú)法很好地支持對(duì)外部事件做出的反應(yīng)式行為,所以也有針對(duì)反應(yīng)式行為而設(shè)計(jì)的建模語(yǔ)言來(lái)解決這個(gè)問(wèn)題。反應(yīng)式行為的建模語(yǔ)言包括有限狀態(tài)機(jī)(FSM), UML的狀態(tài)圖以及動(dòng)態(tài)狀態(tài)機(jī)(Dynamic State Machine)。一個(gè)純粹的FSM狀態(tài)圖包括若干個(gè)狀態(tài)及這些狀態(tài)的向外的 遷移(Transition),而且每一個(gè)遷移的外部事件都定義得非常清楚。當(dāng)處于某個(gè)狀態(tài)時(shí),F(xiàn)SM在等待所有可能的外部事件。當(dāng)收到一個(gè)適當(dāng)?shù)耐獠渴录r(shí),會(huì)觸發(fā)一個(gè)遷移,而且伴隨著這個(gè)遷移會(huì)執(zhí)行一個(gè)關(guān)聯(lián)的動(dòng)作。當(dāng)一個(gè)遷移發(fā)生之后,當(dāng)前狀態(tài)就變成不活躍的,而另外一個(gè)狀態(tài)會(huì)成為活躍的。然后這個(gè)FSM會(huì)等待與這個(gè)新活躍的狀態(tài)相關(guān)聯(lián)的另外一組事件。因此,在任何時(shí)候,一個(gè)FSM —般都處于某個(gè)狀態(tài)在等待可能發(fā)生的各種外部事件。一個(gè)純粹的FSM有幾個(gè)缺點(diǎn)。比如,純粹的FSM沒(méi)有內(nèi)存就是一個(gè)局限。因?yàn)闆](méi)有內(nèi)存,所以純粹的FSM的用處就非常有限。因?yàn)樗臓顟B(tài)沒(méi)有內(nèi)存,任何狀態(tài)變化或者歷史信息,比如一個(gè)簡(jiǎn)單的計(jì)數(shù)器,都必須通過(guò)定義額外的狀態(tài)來(lái)保存這些變化。假如一個(gè)計(jì)數(shù)器有無(wú)限取值的可能,那么就會(huì)需要無(wú)限多個(gè)的狀態(tài)。從一個(gè)純粹FSM擴(kuò)展出來(lái)的有限狀態(tài)機(jī)(EFSMs)或者寄存自動(dòng)機(jī)(Regi sterAutomata)為每一個(gè)狀態(tài)都增加了內(nèi)存或數(shù)據(jù)變量以存值,比如數(shù)字和計(jì)數(shù)器等,這克服了純粹FSM的一個(gè)主要問(wèn)題。因此EFSM被廣泛地用于反應(yīng)式系統(tǒng)建模。當(dāng)EFSM被用來(lái)為現(xiàn)實(shí)世界的事件或行為進(jìn)行建模時(shí),人們經(jīng)常會(huì)發(fā)現(xiàn)一個(gè)分層的狀態(tài)或者嵌套的狀態(tài)對(duì)減少狀態(tài)的數(shù)量以及組織一組復(fù)雜的狀態(tài)有幫助。比如,UML的狀態(tài)圖(Statechart)及STATEMATE就是這樣的例子。狀態(tài)圖(Statechart)這個(gè)術(shù)語(yǔ)在這里就用來(lái)專指一個(gè)分層的有限狀態(tài)機(jī)。雖然一個(gè)反應(yīng)式行為建模語(yǔ)言適合用來(lái)處理外部事件的,但它卻忽略了如何描述系統(tǒng)內(nèi)部的一些復(fù)雜的主動(dòng)式行為。正如我們已經(jīng)從一些主動(dòng)式行為建模語(yǔ)言所了解到的,這些內(nèi)部主動(dòng)式行為可以是非常復(fù)雜的。因此需要能把反應(yīng)式行為建模語(yǔ)言和主動(dòng)式行為建模語(yǔ)言結(jié)合起來(lái)使用。另外一個(gè)現(xiàn)有的主動(dòng)式行為建模語(yǔ)言和反應(yīng)式行為建模語(yǔ)言共有的缺點(diǎn)是它們都只能描述一個(gè)單一系統(tǒng)的行為。它們無(wú)論用哪種方式都無(wú)法有效地描述一個(gè)父系統(tǒng)內(nèi)的組件間的復(fù)雜的內(nèi)部消息交換。而一個(gè)分布式系統(tǒng)恰恰就包含多個(gè)相互通信,彼此協(xié)調(diào)的子系統(tǒng),所以缺乏對(duì)多方行為的支持對(duì)一個(gè)分布式系統(tǒng)的限制非常大。除了上面提及的主動(dòng)式行為建模和反應(yīng)式行為建模,還有一些其它語(yǔ)言用來(lái)描述兩個(gè)交流系統(tǒng)之間的協(xié)議。Web服務(wù)編排描述語(yǔ)言(WS-CDL)就是這樣的一個(gè)例子。一種可能的應(yīng)用系統(tǒng)開發(fā)過(guò)程是用WS-CDL來(lái)定義協(xié)議,然后用另一種語(yǔ)言來(lái)設(shè)計(jì)一個(gè)參與系統(tǒng)的行為,比如BPEL,XPDL或者BPMN。但是,由于這些語(yǔ)言間存在的差異,從一個(gè)協(xié)議映射到兩個(gè)參與系統(tǒng),而且要保證這兩個(gè)系統(tǒng)彼此協(xié)調(diào),是有很多問(wèn)題的。因此需要一個(gè)能把主動(dòng)式行為建模語(yǔ)言和反應(yīng)式行為建模語(yǔ)言都統(tǒng)一起來(lái)的建模語(yǔ)言,并且它能夠描述現(xiàn)代分布式計(jì)算環(huán)境中的多方參與的動(dòng)態(tài)行為。本發(fā)明正是提供了這樣一個(gè)建模語(yǔ)言的解決方法。
發(fā)明內(nèi)容
本發(fā)明描述設(shè)計(jì)及開發(fā)具有動(dòng)態(tài)行為的應(yīng)用系統(tǒng)的方法和系統(tǒng)。本發(fā)明是旨在改進(jìn)我們用圖畫方式描述一個(gè)應(yīng)用系統(tǒng)的動(dòng)態(tài)行為的方法,以便用
一個(gè)計(jì)算機(jī)軟件或硬件來(lái)實(shí)現(xiàn)這個(gè)系統(tǒng)。本發(fā)明還旨在提供必需的方法及過(guò)程來(lái)構(gòu)造設(shè)計(jì)工具,代碼生成器以及運(yùn)行平臺(tái)來(lái)實(shí)現(xiàn)定義好的動(dòng)態(tài)行為。為了實(shí)現(xiàn)這些目的,本發(fā)明提供了描述應(yīng)用系統(tǒng)的動(dòng)態(tài)行為的一套系統(tǒng)、過(guò)程和過(guò)程的運(yùn)用方法以及開發(fā)這種動(dòng)態(tài)行為模型的方法。這個(gè)發(fā)明用一個(gè)動(dòng)態(tài)系統(tǒng)(即Dynamic System,簡(jiǎn)稱DS)類型來(lái)描述一個(gè)應(yīng)用系統(tǒng)的動(dòng)態(tài)行為。一個(gè)DS類型可以是簡(jiǎn)單的或組合的。一個(gè)簡(jiǎn)單的DS類型有一個(gè)行為類型來(lái)描述這個(gè)應(yīng)用系統(tǒng)的簡(jiǎn)單行為。一個(gè)組合的DS類型(模型I的)有若干個(gè)階段機(jī)(PhasedMachine)類型用來(lái)描述復(fù)雜的順序和并行的行為以及一個(gè)結(jié)束情況集或一個(gè)結(jié)束函數(shù)。每個(gè)階段機(jī)類型有一個(gè)或多個(gè)階段(Phase)類型和一個(gè)靜態(tài)實(shí)例數(shù)(也可以可省略的)。每個(gè)階段類型有一個(gè)子DS類型以及零個(gè)或多個(gè)遷移。每個(gè)遷移有一個(gè)遷移條件和一個(gè)目標(biāo)階段。如果定義了一個(gè)結(jié)束函數(shù),它會(huì)返回一個(gè)結(jié)束代碼,該結(jié)束代碼標(biāo)識(shí)了一個(gè)所述組合系統(tǒng)類型實(shí)例結(jié)束時(shí)的條件。如果定義了一個(gè)結(jié)束情況集,每個(gè)結(jié)束情況包括一對(duì)結(jié)束條件和結(jié)束代碼,該結(jié)束條件描述一個(gè)所述組合系統(tǒng)類型實(shí)例結(jié)束時(shí)的條件,而該結(jié)束代碼則標(biāo)識(shí)對(duì)應(yīng)的結(jié)束條件;一個(gè)階段機(jī)類型可以用多個(gè)階段類型來(lái)描述組合DS中的順序行為,而另一個(gè)階段機(jī)類型可以只用一個(gè)階段類型來(lái)描述所述組合DS中的并行行為。所述DS類型可以特例化為一個(gè)自主系統(tǒng)(即Proactive System,簡(jiǎn)稱PS)類型來(lái)描述一個(gè)在分布式環(huán)境中與其他系統(tǒng)交流的系統(tǒng)的反應(yīng)式行為。一個(gè)PS類型可以是簡(jiǎn)單的或者組合的。一個(gè)簡(jiǎn)單的PS類型是一個(gè)簡(jiǎn)單DS類型的特例,它的行為包括一個(gè)外部DS (即External DS,簡(jiǎn)稱Ext-DS)類型以及跟在這個(gè)Ext-DS類型后面的內(nèi)部DS ( SPInternal DS,簡(jiǎn)稱Int-DS) aExt-DS類型描述了和另外一個(gè)系統(tǒng)通訊時(shí)會(huì)發(fā)生的外部事件。而Int-DS類型則描述為響應(yīng)所發(fā)生的那些外部事件而執(zhí)行的內(nèi)部動(dòng)作。一個(gè)組合PS類型是一個(gè)組合DS的特例。因此,它和一個(gè)組合DS類型是相同的,除了它包含的是子PS類型,而不是子DS類型。一個(gè)Ext-DS類型也是一個(gè)DS類型的特例。一個(gè)Ext-DS類型可以是簡(jiǎn)單的或組合的。一個(gè)簡(jiǎn)單的Ext-DS類型是一個(gè)簡(jiǎn)單DS類型的特例,它的行為是一個(gè)事件類型,可以用來(lái)描述通訊協(xié)議中的一個(gè)向內(nèi)的外部事件類型。而一個(gè)組合Ext-DS類型是一個(gè)組合DS類型的特例。因此,它和一個(gè)組合DS類型是相同的,除了它包含的是子Ext-DS類型,而不是子DS類型。一個(gè)Int-DS類型也是一個(gè)DS類型的特例。一個(gè)Int-DS類型可以是簡(jiǎn)單的或組合的。一個(gè)簡(jiǎn)單的Int-DS類型是一個(gè)簡(jiǎn)單DS類型的特例,它的行為是一個(gè)動(dòng)作類型,可以用來(lái)描述待執(zhí)行的內(nèi)部動(dòng)作。一個(gè)組合Int-DS類型是一個(gè)組合DS類型的特例。因此,它和一個(gè)組合DS類型是相同的,除了它包含的是子Int-DS類型,而不是子DS類型。在運(yùn)行時(shí),一個(gè)DS類型,包括PS類型,Ext-DS類型和Int-DS類型,可以生成多個(gè)DS實(shí)例(instance)。一個(gè)DS實(shí)例可以是簡(jiǎn)單的或組合的。一個(gè)簡(jiǎn)單的DS實(shí)例有對(duì)它的DS類型的一個(gè)引用(Reference)和對(duì)執(zhí)行 它的行為的成果進(jìn)行記錄的一個(gè)結(jié)果。一個(gè)組合DS的實(shí)例包含有對(duì)它的組合DS類型的一個(gè)引用,一個(gè)結(jié)果以及若干個(gè)階段機(jī)。每一個(gè)階段機(jī)都有對(duì)它的階段機(jī)類型的一個(gè)引用,一個(gè)當(dāng)前階段以及若干個(gè)階段。每個(gè)階段有一個(gè)對(duì)它的階段類型的引用和一個(gè)子DS類型。在一個(gè)DS實(shí)例生成以后,在運(yùn)行時(shí)刻,這個(gè)DS實(shí)例的各個(gè)部分可以在活躍狀態(tài)和非活躍狀態(tài)之間切換,以反映現(xiàn)實(shí)世界中一個(gè)系統(tǒng)行為的演進(jìn)。和一個(gè)DS實(shí)例類似,在運(yùn)行時(shí)刻,一個(gè)Ext-DS,Int-DS和PS實(shí)例的各個(gè)部分也都可以在活躍狀態(tài)和非活躍狀態(tài)之間切換,以表現(xiàn)現(xiàn)實(shí)世界中一個(gè)所對(duì)應(yīng)系統(tǒng)的行為的演進(jìn)。為了描述當(dāng)一個(gè)簡(jiǎn)單PS變成活躍狀態(tài)后要立即執(zhí)行的Int-DS,可以在這個(gè)簡(jiǎn)單PS類型的Ext-DS中設(shè)定一個(gè)預(yù)定義的“開始”事件。而為了描述當(dāng)一個(gè)簡(jiǎn)單PS變成非活躍狀態(tài)之前一瞬間要執(zhí)行的Int-DS,可以在這個(gè)簡(jiǎn)單PS類型的Ext-DS中設(shè)定一個(gè)預(yù)定義的“結(jié)束”事件。使用DS模型的一個(gè)主要優(yōu)點(diǎn)在于整個(gè)設(shè)計(jì)流程只使用了一個(gè)一致性的通用模型,只是在不同的設(shè)計(jì)步驟會(huì)用到這個(gè)通用模型的某個(gè)特殊模型來(lái)關(guān)注某個(gè)特定行為。在本發(fā)明中提供了幾種設(shè)計(jì)方法,從而可以從協(xié)議規(guī)范(protocolspecification)推導(dǎo)出一個(gè)與其他系統(tǒng)有交流的系統(tǒng)的行為。首先,遵循一個(gè)通用性的轉(zhuǎn)換方法,從一個(gè)角色的每一個(gè)協(xié)議都推導(dǎo)出一個(gè)參與者PS。然后,把這些參與者PS合并成一個(gè)角色PS。這些設(shè)計(jì)方法可確保協(xié)議規(guī)范和通訊各方保持彼此一致。這些設(shè)計(jì)方法中用到的某些組件可以被擴(kuò)展得更具通用性,以用于其他行為建模語(yǔ)言。一個(gè)尚待定義的Ext-DS被擴(kuò)展成一個(gè)尚待定義的外部活動(dòng),用于描述要接收某些尚待定義的外部事件的活動(dòng)。而一個(gè)尚待定義的Int-DS被擴(kuò)展成一個(gè)尚待定義的內(nèi)部活動(dòng),用于描述要執(zhí)行某些尚待定義的內(nèi)部動(dòng)作的活動(dòng)。一個(gè)通用性的轉(zhuǎn)換方法是用來(lái)把一個(gè)組合活動(dòng)從協(xié)議規(guī)范轉(zhuǎn)換為一個(gè)參與者行為規(guī)范。這個(gè)方法包括把每一個(gè)描述參與者要接收事件的向內(nèi)的簡(jiǎn)單活動(dòng),替換成一個(gè)反應(yīng)式組合活動(dòng),這個(gè)反應(yīng)式組合活動(dòng)把這個(gè)向內(nèi)的簡(jiǎn)單活動(dòng)作為它的外部活動(dòng),而且用一個(gè)尚待定義的內(nèi)部活動(dòng)來(lái)描述為響應(yīng)所發(fā)生的向內(nèi)的簡(jiǎn)單活動(dòng)而執(zhí)行的活動(dòng);并且把每一個(gè)描述參與者要發(fā)送事件的向外的簡(jiǎn)單活動(dòng),替換成一個(gè)反應(yīng)式組合活動(dòng),這個(gè)反應(yīng)式組合活動(dòng)有一個(gè)尚待定義的外部活動(dòng),用于描述待接收的事件,而且把這個(gè)向外的簡(jiǎn)單活動(dòng)作為它的內(nèi)部活動(dòng),以對(duì)發(fā)生的尚待定義的外部活動(dòng)做出響應(yīng)。本發(fā)明提供了幾種實(shí)施例以便用類似的方法分別采用UML狀態(tài)圖、UML活動(dòng)圖、BPMN和BPEL語(yǔ)言來(lái)描述主動(dòng)式行為和反應(yīng)式行為。本發(fā)明還提供了一個(gè)方法來(lái)從一個(gè)參與者組合活動(dòng)推導(dǎo)出一個(gè)描述協(xié)議的協(xié)議組合活動(dòng)。這個(gè)方法包括復(fù)制一份描述一個(gè)參與者行為的參與者組合活動(dòng);并且把所述參與者組合活動(dòng)中既不接收向內(nèi)事件也不發(fā)送向外事件的各個(gè)簡(jiǎn)單活動(dòng)改變?yōu)榭?Null)活動(dòng)。本發(fā)明中提供了一些DS類型的圖形化表示法,包括PS類型,Ext-DS類型和Int-DS類型。一個(gè)DS類型可以圖形化地以一個(gè)包含框來(lái)表示。一個(gè)代表組合DS類型的包含框內(nèi)可以有若干個(gè)子包含框,若干個(gè)雙向的交流鏈接,若干個(gè)生成箭頭,若干個(gè)遷移箭頭以及若干個(gè)結(jié)束點(diǎn)。每一個(gè)這些子包含框代表了一個(gè)簡(jiǎn)單的或者組合的子DS。一個(gè)組合子DS可以把它的子子包含框畫在它的框內(nèi)。一個(gè)至少帶有一個(gè)遷移箭頭的子包含框代表了一個(gè)順序的子DS,而一個(gè)不帶任何遷移箭頭的子包含框則代表了一個(gè)并行的子DS。一個(gè)簡(jiǎn)單的子PS可以圖形化地用一個(gè)帶有兩個(gè)子包含框的包含框來(lái)表示。其中之一的子包含框代表了描述待接收外部事件的Ext-DS,而另一個(gè)子包含框則代表了用于描述為響應(yīng)所發(fā)生的外部事件而執(zhí)行的內(nèi)部行動(dòng)的Int-DS。借助本文的其他部分,包括附圖及權(quán)利要求,可以體現(xiàn)本專利的其他特征和優(yōu)勢(shì)?!は旅鏁?huì)結(jié)合附圖更進(jìn)一步詳細(xì)介紹本發(fā)明的特性和優(yōu)勢(shì),以及各種實(shí)施例的結(jié)構(gòu)和操作。
本發(fā)明上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中,圖I表示的是一個(gè)簡(jiǎn)化的框圖,代表了一個(gè)分布式計(jì)算環(huán)境的例子;圖2表示的是一個(gè)簡(jiǎn)化的框圖,展示了一個(gè)可以用來(lái)實(shí)施本發(fā)明的計(jì)算機(jī)系統(tǒng)。圖3表示的是一個(gè)包含子DS樹圖的DS ;圖4表示的是一個(gè)簡(jiǎn)單DS ;圖5表示的是一個(gè)組合DS ;圖6表不的是一個(gè)結(jié)束情況,它包括一對(duì)結(jié)束條件和結(jié)束代碼。圖7表示的是一個(gè)DS常見的生命周期;圖8表示的是協(xié)議,參與者PS和角色PS ;圖9表示的是一個(gè)簡(jiǎn)單的Ext-DS ;圖10表示的是一個(gè)簡(jiǎn)單的PS ;圖11表示的是一個(gè)簡(jiǎn)單的Int-DS ;圖12表示的是用圖形語(yǔ)言表示的事件檢查函數(shù)(Matching procedure)的偽代碼;圖13表示的是用圖形語(yǔ)言表示的反應(yīng)函數(shù)(React procedure)的偽代碼;圖14表示的是用圖形語(yǔ)言表示的動(dòng)作執(zhí)行函數(shù)(Act procedure)的偽代碼;圖15A表示的是用沒(méi)有任何遷移的并行階段機(jī)來(lái)模擬一個(gè)并行單元;圖15B表示的是用只有一個(gè)遷移的并行階段機(jī)來(lái)模擬一個(gè)并行單元;圖16表示的是一個(gè)模型I的組合DS ;圖17表不的是一個(gè)用圖形語(yǔ)言表不的DS例子;圖18表不的是另一個(gè)用圖形語(yǔ)言表不的DS例子;
圖19表示的是一個(gè)用圖形語(yǔ)言表示的組合PS例子;圖20表示的是一個(gè)組合PS的例子,它包含了一個(gè)子PS,而這個(gè)子PS又包含一個(gè)組合的Ext-DS和一個(gè)組合的Int-DS ;圖21表示的是一個(gè)包含了“開始”、“結(jié)束”預(yù)定義事件的組合PS ;圖22表示的是一個(gè)沒(méi)有包含“開始”預(yù)定義事件的X-Server參與者PS ;圖23表示的是一個(gè)包含了 “開始”預(yù)定義事件的X-Server參與者PS ;圖24表示的是一個(gè)簡(jiǎn)單DS的類型(Type)屬性(properties)和實(shí)例(Instance)屬性;圖25表示的是用UML類圖(class diagram)來(lái)定義的一個(gè)簡(jiǎn)單DS的類型屬性和實(shí)體屬性圖26表示的是一個(gè)簡(jiǎn)單Ext-DS的類型屬性和實(shí)例屬性;圖27表示的是一個(gè)用UML類圖來(lái)定義的簡(jiǎn)單Ext-DS的類型屬性和實(shí)例屬性;圖28表示的是一個(gè)簡(jiǎn)單PS的類型屬性和實(shí)例屬性; 圖29表示的是一個(gè)用UML類圖來(lái)定義的簡(jiǎn)單PS的類型屬性和實(shí)例屬性; 圖30表示的是一個(gè)簡(jiǎn)單Int-DS的類型屬性和實(shí)例屬性;圖31表示的是一個(gè)用UML類圖來(lái)定義的簡(jiǎn)單Int-DS的類型屬性和實(shí)例屬性;圖32A表示一個(gè)帶有一個(gè)結(jié)束情況集的模型I的組合DS的類型和實(shí)例;圖32B表示一個(gè)帶有一個(gè)結(jié)束函數(shù)的模型I的組合DS的類型和實(shí)例;圖32C表示模型I的組合PS類型和實(shí)例。圖33表示的是基于DS模型來(lái)設(shè)計(jì),編譯和運(yùn)行一個(gè)應(yīng)用軟件的流程。圖34表示的是基于DS模型來(lái)設(shè)計(jì)一個(gè)應(yīng)用軟件,然后在不同平臺(tái)上編譯和運(yùn)行這個(gè)應(yīng)用軟件的流程;圖35表示的是一個(gè)用UML類圖來(lái)定義的模型I的組合DS的類型屬性和實(shí)例屬性;圖36表示的是圖23中參與者PS” X-server”的組合PS類型;圖37表示的是一個(gè)與客戶端和服務(wù)端有交流的系統(tǒng)“X” ;圖38表示的是協(xié)議的例子“協(xié)議O”和“協(xié)議I ” ;圖39表示的是從圖38中“協(xié)議O”推導(dǎo)出來(lái)的“X-server”的參與者PS ;圖40表示的是從圖38中“協(xié)議I”推導(dǎo)出來(lái)的“X-client”的參與者PS ;圖41表示的是協(xié)議“協(xié)議2 ” ;圖42表示的是如何把參與者PS合并成一個(gè)角色PS ;圖43表示的是如何加上內(nèi)部的交流與行為;圖44是使用一個(gè)組合協(xié)議“協(xié)議2”的“X”的角色PS ;圖45表示的是用UML活動(dòng)圖描述的“協(xié)議O”和“協(xié)議I” ;圖46表示的是用UML活動(dòng)圖表示的從圖45中“協(xié)議O”推導(dǎo)出來(lái)的“X-server”;圖47表示的是用UML活動(dòng)圖表示的從圖45中“協(xié)議I”推導(dǎo)出來(lái)的“X-client”;圖48表示的是用UML活動(dòng)圖的“分叉”和“匯合”節(jié)點(diǎn)來(lái)描述由“X-server”和“X-client”合并而成的角色PS ;圖49表示的是用BPMN來(lái)描述的“協(xié)議O”和“協(xié)議I” ;
圖50表示的是用BPMN來(lái)描述從“協(xié)議O”推導(dǎo)得到的“X-server” ;圖51表示的是用BPMN來(lái)描述從“協(xié)議I”推導(dǎo)得到的“X-client” ;圖52表示的是用BPMN的“分叉(Fork) ”和“匯合(Join) ”并行網(wǎng)關(guān)(ParallelGateway)來(lái)描述由“X-server”和“X-client”合并得到的角色PS ;圖53表示的是用BPMN的并行框圖(Parallel Box)來(lái)描述由“X-server”和“X-client”合并得到的角色PS ;圖54表示的是用狀態(tài)圖描述的“協(xié)議O”和“協(xié)議I”;圖55表示的是用狀態(tài)圖描述的由“協(xié)議O”推導(dǎo)出的“X-server”;圖56表示的是用狀態(tài)圖描述的由“協(xié)議I”推導(dǎo)出的“X-client”; 圖57表示的是用狀態(tài)圖描述的由“X-server”和“X-client”合并得到的角色PS ;圖58表示的是由“x-server”參與者組合活動(dòng)推導(dǎo)出的一個(gè)協(xié)議;圖59表示的是如何遵循本發(fā)明所描述的設(shè)計(jì)流程來(lái)設(shè)計(jì)一個(gè)應(yīng)用系統(tǒng),然后在不同的運(yùn)行平臺(tái)上運(yùn)行這個(gè)應(yīng)用系統(tǒng)。圖60表示的是一個(gè)組合活動(dòng),它包含有順序的子組合活動(dòng)和并行的子組合活動(dòng)。其中有一個(gè)子組合活動(dòng)是一個(gè)反應(yīng)式組合活動(dòng);圖61表示的是一個(gè)組合活動(dòng),它包含有順序的子組合活動(dòng)和并行的子組合活動(dòng)以及一個(gè)交流鏈接;圖62表示的是一個(gè)組合活動(dòng),它包含有子組合活動(dòng),一個(gè)交流鏈接以及兩個(gè)結(jié)束占.圖63表示的是一個(gè)組合活動(dòng),它包含有順序的子組合活動(dòng)和并行的子組合活動(dòng)。外部活動(dòng)是通過(guò)一個(gè)箭頭和內(nèi)部活動(dòng)相連。
具體實(shí)施例方式下面會(huì)通過(guò)一個(gè)或多個(gè)實(shí)施例來(lái)描述本發(fā)明。下面的描述中會(huì)提供很多細(xì)節(jié)來(lái)更加透徹地闡明本發(fā)明。但是顯然對(duì)一個(gè)本領(lǐng)域的技術(shù)人員而言,即使沒(méi)有這些描述,他也可以實(shí)施本發(fā)明。另一方面,本文沒(méi)有對(duì)一些眾所周知的特性進(jìn)行詳細(xì)描述以免使得本發(fā)明
重點(diǎn)不清。現(xiàn)實(shí)世界中的許多系統(tǒng)都有復(fù)雜而動(dòng)態(tài)的行為。一個(gè)行為之所以是復(fù)雜的,是因?yàn)樗鼤?huì)涉及許多系統(tǒng)單元,而一個(gè)行為之所以是動(dòng)態(tài)的,則是因?yàn)樗鼤?huì)隨著時(shí)間而演變。對(duì)一個(gè)復(fù)雜行為建模的基本指導(dǎo)原則是先對(duì)復(fù)雜行為進(jìn)行分解然后再各個(gè)擊破(建模)。本發(fā)明用動(dòng)態(tài)系統(tǒng)(DS)和它的子系統(tǒng)(子DS)來(lái)對(duì)任何的復(fù)雜行為進(jìn)行分解與建模。這些復(fù)雜行為可以在很廣的的范圍內(nèi)適用,既可以是圖I中所描述的實(shí)時(shí)的或者分布式的軟、硬件系統(tǒng),也可以是現(xiàn)實(shí)世界中像人和組織這樣的實(shí)體。一個(gè)分布式的環(huán)境一般都是由多個(gè)通過(guò)網(wǎng)絡(luò)互聯(lián)的硬件系統(tǒng)組成。每個(gè)硬件系統(tǒng)如圖2所示,包含有一個(gè)中央處理單元(CPU),存儲(chǔ)器(ROM,RAM和磁盤)以及輸入輸出設(shè)備。這硬件系統(tǒng)是一種計(jì)算機(jī),它可以是PDA (Personal Data Assistant)、筆記本、桌面機(jī),也可以是工作站、主機(jī)、實(shí)時(shí)控制設(shè)備、網(wǎng)絡(luò)設(shè)備或者任何具有計(jì)算能力和輸入輸出能力的設(shè)備。
在本發(fā)明中,類型(Type)或者類(Class)與實(shí)例(Instance)是有區(qū)別的。類型或類是一個(gè)設(shè)計(jì)階段的概念,用來(lái)設(shè)定一個(gè)實(shí)體(Entity)的某些行為屬性。而實(shí)例是運(yùn)行時(shí)刻的概念,它的行為屬性是由所屬的類規(guī)定好的。除了特別申明為類的,本發(fā)明中所用的術(shù)語(yǔ)一般都指具體的實(shí)例。用DS模型描述動(dòng)態(tài)行為為了把復(fù)雜的系統(tǒng)行為分解成更小的組件,DS模型借助了這樣一個(gè)常識(shí),即我們所在的宇宙有兩個(gè)基本的時(shí)間和空間維度這一事實(shí)。沿著時(shí)間維度一個(gè)復(fù)雜的系統(tǒng)可以分解為順序的子DS,而沿著空間維度一個(gè)復(fù)雜的系統(tǒng)分解為并行的子DS。在時(shí)間和空間的任何一點(diǎn)上,一個(gè)DS可以被分解為多個(gè)并行子DS和多個(gè)順序子DS。而且每個(gè)子DS都可以沿著這兩個(gè)維度繼續(xù)分解為它自己的子DS。一般而言,一個(gè)DS可以包含一組順序的子系統(tǒng)和一組并行的子系統(tǒng)。因?yàn)槊總€(gè)子系統(tǒng)又可以包含它自己的子系統(tǒng),因此一個(gè)DS —般可以分解成由子系統(tǒng)構(gòu)成的樹狀圖。在 這棵樹上處于中間層次的DS對(duì)它的子系統(tǒng)而言是父系統(tǒng),而對(duì)它的父系統(tǒng)而言又成了子系統(tǒng)。因此根據(jù)不同的角度一個(gè)DS可以被稱作DS,父DS或者子DS。如圖3所示,DSO是DSl和DS2的父系統(tǒng)。因此DSl是DSO的子系統(tǒng),而同時(shí)它又是DS3和DS4的父系統(tǒng)。當(dāng)描述互聯(lián)世界里一個(gè)系統(tǒng)的行為時(shí),需要同時(shí)考慮外部和內(nèi)部準(zhǔn)備就緒的情況。一般而言,只有當(dāng)一個(gè)系統(tǒng)自己準(zhǔn)備就緒,并且某個(gè)外部條件后被滿足后才能執(zhí)行一個(gè)特定的動(dòng)作。本發(fā)明也會(huì)反映出系統(tǒng)間的這些相互依賴關(guān)系。一個(gè)DS可以是簡(jiǎn)單的或者組合的。一個(gè)簡(jiǎn)單的DS(如圖4所示)有一個(gè)行為和一個(gè)結(jié)果。這個(gè)行為就是用來(lái)描述DS的行為,而結(jié)果則可以被這個(gè)行為用來(lái)記錄行為執(zhí)行完畢后的最終成果。一個(gè)行為的例子可以是當(dāng)特定條件滿足時(shí),一個(gè)DS就執(zhí)行一個(gè)特定的動(dòng)作。請(qǐng)注意在圖4中一個(gè)簡(jiǎn)單的DS是用一個(gè)在頂部有標(biāo)簽的框來(lái)表示的。而DS的組件則用畫在大框內(nèi)部的小框表示。本文檔都會(huì)使用這個(gè)規(guī)范。一個(gè)組合的PS (如圖5所示)有如下組件 零個(gè)或者多個(gè)階段機(jī)501,是用來(lái)表示這個(gè)組合DS內(nèi)的順序行為。 每個(gè)階段機(jī)都有一個(gè)或者多個(gè)階段502,以及一個(gè)當(dāng)前階段503。 當(dāng)一個(gè)階段機(jī)變成活躍狀態(tài)時(shí),它的多個(gè)階段中的一個(gè)就會(huì)成為活躍狀態(tài)。當(dāng)階段機(jī)處于活躍狀態(tài)時(shí),它的各個(gè)階段會(huì)根據(jù)自己的遷移定義在活躍狀態(tài)和非活躍狀態(tài)間切換。一般情況下,當(dāng)階段機(jī)處于活躍狀態(tài)時(shí),它最多只有一個(gè)階段能處于活躍狀態(tài)。 一個(gè)正常的階段有一個(gè)順序的子DS 504及零個(gè)或多個(gè)遷移(Transition) 505。 這個(gè)順序的子DS包含了這個(gè)階段的行為。它可以是一個(gè)簡(jiǎn)單的DS,或者一個(gè)組合的DS。 每個(gè)遷移都有一個(gè)遷移條件506和一個(gè)目標(biāo)階段507。 在當(dāng)前階段變?yōu)榉腔钴S狀態(tài)時(shí),另一個(gè)階段就會(huì)被選中并成為活躍狀態(tài)。一個(gè)遷移會(huì)指明如果它的遷移條件得到滿足,它的目標(biāo)階段就是在遷移結(jié)束后下一個(gè)成為活躍狀態(tài)的階段。這遷移條件可以使用順序子DS結(jié)果中的信息或者它在運(yùn)行時(shí)刻可以獲得的任何其他信息來(lái)做判斷。 遷移中指定的目標(biāo)階段必須是同一個(gè)階段機(jī)中的階段。換言之,遷移不能夠跨越階段機(jī)的邊界。請(qǐng)注意,一個(gè)階段可以作為多個(gè)源階段的目標(biāo)階段。另外,還允許循環(huán)遷移,包括指向當(dāng)前階段自己的遷移。這樣就可以描述循環(huán)重復(fù)的行為。 因?yàn)槿魏螘r(shí)候都最多只能有一個(gè)階段處于活躍狀態(tài),所以從同一個(gè)源階段出來(lái)的各個(gè)遷移條件必須是彼此排他的(mutually exclusive)。 當(dāng)前階段是在運(yùn)行時(shí)刻指向階段機(jī)中處于活躍狀態(tài)的階段的一個(gè)指針(Pointer)或者一個(gè)引用(Reference)。 為了設(shè)置當(dāng)前階段,階段機(jī)可以有兩種特殊的階段。 其中一種特殊階段是初始階段。一個(gè)階段機(jī)最多可以有一個(gè)初始階段。初始階 段的作用是在階段機(jī)成為活躍狀態(tài)時(shí)選擇最先成為活躍狀態(tài)的階段。這個(gè)初始階段有一個(gè)空的順序子DS和一組初始遷移。 另外一種特殊的階段是空(Null)階段。當(dāng)一個(gè)階段機(jī)的當(dāng)前階段指向一個(gè)空階段時(shí),整個(gè)階段機(jī)就變成非活躍狀態(tài)。一個(gè)階段機(jī)可以有一個(gè)默認(rèn)的(default)空階段以及零個(gè)或多個(gè)用戶定義的空階段。一個(gè)空階段是不包含任何子DS和任何遷移的階段,它只有一個(gè)和其他空階段相區(qū)別的獨(dú)特標(biāo)識(shí)(ID)。默認(rèn)的空階段所預(yù)定義的ID和任何用戶定義的空階段的ID都不會(huì)相同??针A段的這個(gè)ID可以被結(jié)束情況或結(jié)束條件(在下文會(huì)有描述)用來(lái)判定一個(gè)組合DS是否應(yīng)當(dāng)結(jié)束。 零個(gè)或多個(gè)并行單元508 每個(gè)并行單元包含一個(gè)并行的子DS 509來(lái)代表組合DS中的并行行為,一個(gè)靜態(tài)實(shí)例數(shù)(可省略的)510以及一個(gè)用來(lái)指明運(yùn)行時(shí)刻這個(gè)并行子DS是否處于活躍狀態(tài)的模態(tài)(Mode) 511。 這個(gè)靜態(tài)實(shí)例數(shù)(可省略的)是一個(gè)數(shù)字,用來(lái)指明當(dāng)生成包含它的組合DS時(shí),會(huì)靜態(tài)地生成多少個(gè)并行子DS的實(shí)例。如果省略了靜態(tài)實(shí)例數(shù),靜態(tài)實(shí)例數(shù)的取值默認(rèn)為I。當(dāng)生成包含它的組合DS時(shí),總會(huì)靜態(tài)地生成一個(gè)并行子DS的實(shí)例。除了這些靜態(tài)生成的實(shí)例,在組合DS中也可以在運(yùn)行時(shí)刻根據(jù)用戶定義的行為而動(dòng)態(tài)地生成這些并行子DS的實(shí)例。動(dòng)態(tài)生成的被稱為動(dòng)態(tài)子DS,而那些伴隨父DS生成的被稱為靜態(tài)子DS。在并行子DS實(shí)例的數(shù)目無(wú)法事先確定的情況下,動(dòng)態(tài)子DS會(huì)很有用。 當(dāng)一個(gè)并行子DS在運(yùn)行時(shí)刻變成活躍狀態(tài)時(shí),它的模態(tài)就會(huì)被設(shè)置成“活躍的”。當(dāng)它變成非活躍狀態(tài)時(shí),它的模態(tài)又會(huì)被設(shè)置成“非活躍的”。 當(dāng)一個(gè)組合DS成為活躍狀態(tài)時(shí),它所有的并行子DS的實(shí)例都會(huì)成為活躍狀態(tài)。 這些并行子DS每一個(gè)都可以是簡(jiǎn)單的或者是組合的。 一個(gè)包含零個(gè)或多個(gè)結(jié)束情況的結(jié)束情況集512,其中每一個(gè)結(jié)束情況600用來(lái)指明在哪種情況下整個(gè)組合DS應(yīng)該變成非活躍狀態(tài)。每一個(gè)結(jié)束情況可以顯式地定義為一對(duì)結(jié)束條件601和與之對(duì)應(yīng)的結(jié)束代碼602 (如圖6所示)。這個(gè)結(jié)束條件可以用一個(gè)邏輯表達(dá)式,一個(gè)數(shù)學(xué)公式或者數(shù)學(xué)符號(hào),甚至是一段文字描述來(lái)設(shè)定。同一個(gè)組合DS中的每一個(gè)結(jié)束代碼都是不同的。結(jié)束代碼通常是由設(shè)計(jì)工具生成或者由設(shè)計(jì)人員設(shè)定的一個(gè)數(shù)值。當(dāng)某一個(gè)結(jié)束條件測(cè)試為“真”時(shí),組合DS就會(huì)結(jié)束并且把對(duì)應(yīng)的結(jié)束代碼記錄在組合DS的結(jié)果中。根據(jù)在結(jié)果中記錄的結(jié)束代碼我們就可以知道組合DS是在哪種情況下結(jié)束的。另外,結(jié)束情況集也可以定義為一個(gè)結(jié)束函數(shù),這個(gè)函數(shù)既可以是一個(gè)面向函數(shù)程序語(yǔ)言的函數(shù),也可以是一個(gè)面向?qū)ο蟪绦蛘Z(yǔ)言的方法。這結(jié)束函數(shù)會(huì)在內(nèi)部用到一組隱式定義的結(jié)束條件來(lái)判斷是否滿足了某個(gè)結(jié)束情況,并返回一個(gè)結(jié)束代碼以說(shuō)明具體是哪個(gè)結(jié)束條件被滿足了。 一個(gè)結(jié)束條件的實(shí)施例可以是當(dāng)任何階段機(jī)或者并行子DS結(jié)束時(shí),這個(gè)組合DS就結(jié)束; 另一個(gè)結(jié)束條件的實(shí)施例是當(dāng)某一個(gè)特定的并行子DS結(jié)束時(shí),這個(gè)組合DS就結(jié)束;
籲如果在結(jié)束情況集中沒(méi)有指明結(jié)束情況,默認(rèn)的結(jié)束情況是當(dāng)所有的階段機(jī)和并行子DS成為不活躍狀態(tài)時(shí),包含它們的組合DS就變成不活躍狀態(tài),同時(shí)會(huì)把一個(gè)預(yù)定義的默認(rèn)結(jié)束代碼記錄在結(jié)果中。這個(gè)默認(rèn)的結(jié)束情況是對(duì)任何一個(gè)組合DS都有效的。 一個(gè)屬于整個(gè)組合DS的結(jié)果513。這個(gè)結(jié)果是用來(lái)記錄一個(gè)結(jié)束函數(shù)返回的結(jié)束代碼?;蛘?,如果定義了一個(gè)結(jié)束情況集,則結(jié)果會(huì)記錄那個(gè)判斷為真的結(jié)束條件所對(duì)應(yīng)的結(jié)束代碼。請(qǐng)注意,如果允許某個(gè)組件有多個(gè)實(shí)例,這個(gè)組件就用帶陰影的圖畫表示。比如,在一個(gè)組合DS中可以有若干個(gè)階段機(jī)和并行單元。在一個(gè)階段機(jī)中又可以一個(gè)或多個(gè)階段。每個(gè)階段還可以有多個(gè)遷移。因此如圖5所示,每個(gè)階段機(jī),并行單元,階段和遷移都用有陰影的圖畫表示。許多現(xiàn)實(shí)世界中的系統(tǒng)會(huì)隨著時(shí)間的推移有不同的行為表現(xiàn)。為了表現(xiàn)這種隨時(shí)間推移的行為變化,DS的某些部分會(huì)隨著時(shí)間推移在活躍狀態(tài)和非活躍狀態(tài)之間切換,但是在任何一個(gè)時(shí)間點(diǎn)上只有活躍的那部分是生效的。因此在DS內(nèi)部控制子DS活躍與否就可以控制系統(tǒng)的行為變化了。一個(gè)DS的常見生命周期如圖7所示在一個(gè)DS生成以后,它會(huì)成為活躍狀態(tài)或者非活躍狀態(tài)。一個(gè)活躍狀態(tài)的DS在它的行為完成或者結(jié)束以后會(huì)變成非活躍狀態(tài)。當(dāng)一個(gè)DS(不管它是活躍的還是非活躍的)不能再次成為活躍狀態(tài)時(shí)可以被銷毀。在圖7中,一個(gè)長(zhǎng)方形代表一個(gè)階段,這個(gè)階段可以有一個(gè)標(biāo)簽(比如“已生成”)。一個(gè)箭頭代表了從一個(gè)階段向另一個(gè)階段的遷移。一個(gè)在長(zhǎng)方形邊框上的空心小長(zhǎng)方形代表一個(gè)初始階段或一個(gè)空階段,它表明這個(gè)DS不存在(要么是還沒(méi)有生成,要么是已經(jīng)被銷毀)。一個(gè)階段還可以包含子階段。比如,階段“已生成”就包含“活躍”和“非活躍”兩個(gè)子階段。在運(yùn)行時(shí)刻可以通過(guò)裝載相關(guān)代碼和數(shù)據(jù)到內(nèi)存或者持久存儲(chǔ)設(shè)備來(lái)生成一個(gè)DS類所定義的DS實(shí)例。然而生成和銷毀DS的具體過(guò)程對(duì)本發(fā)明來(lái)說(shuō)不是很重要,因此,這個(gè)過(guò)程留給實(shí)施本發(fā)明的應(yīng)用系統(tǒng)去決定。應(yīng)用系統(tǒng)只需要確保一個(gè)DS實(shí)例生成以后它所有的靜態(tài)組件都會(huì)生成,并且為進(jìn)入活躍狀態(tài)或非活躍狀態(tài)做好了準(zhǔn)備,一直到這個(gè)DS最后被銷毀。一個(gè)DS變?yōu)榛钴S(或非活躍)狀態(tài)的具體過(guò)程描述如下在運(yùn)行時(shí)刻一個(gè)簡(jiǎn)單的DS(如圖4所示)變?yōu)榛钴S(或非活躍)狀態(tài)的過(guò)程如下 當(dāng)一個(gè)簡(jiǎn)單的DS變成活躍狀態(tài)時(shí),它的行為就會(huì)被執(zhí)行; 當(dāng)簡(jiǎn)單的DS完成它的行為以后,執(zhí)行的成果被記錄在結(jié)果中,隨后這個(gè)簡(jiǎn)單的DS就變成非活躍狀態(tài)。在運(yùn)行時(shí)刻一個(gè)組合的DS(如圖5所示)變?yōu)榛钴S(或非活躍)狀態(tài)的過(guò)程如下
當(dāng)一個(gè)組合的DS變成活躍狀態(tài)時(shí),它所有的階段機(jī)和靜態(tài)的并行單元都會(huì)變成活躍狀態(tài); 當(dāng)一個(gè)并行單元變成活躍狀態(tài)時(shí),它的并行子DS會(huì)變成活躍狀態(tài),而且這個(gè)并行單元的模態(tài)會(huì)被設(shè)成“活躍的”; 當(dāng)一個(gè)階段機(jī)變成活躍狀態(tài)時(shí),它的階段之一(并包括該階段所包含的順序子DS)會(huì)變成活躍狀態(tài)。 階段機(jī)中最先成為活躍狀態(tài)的階段是根據(jù)以下方 法加以選定的如果階段機(jī)中只有一個(gè)階段,這個(gè)階段會(huì)被選為當(dāng)前階段,并成為活躍狀態(tài)。否則這些階段之一必須是設(shè)定為初始階段。在一個(gè)階段機(jī)變成活躍狀態(tài)時(shí)會(huì)對(duì)初始階段的這些初始遷移的遷移條件進(jìn)行判斷。如果某一個(gè)遷移條件被滿足了,對(duì)應(yīng)的目標(biāo)階段會(huì)被選作為當(dāng)前階段,并成為活躍狀態(tài)。 當(dāng)一個(gè)順序的或者并行的子DS(它可以是簡(jiǎn)單的或者組合的)成為活躍狀態(tài)時(shí),前文針對(duì)簡(jiǎn)單或組合DS的行為會(huì)遞歸性性地重復(fù)發(fā)生在子DS身上。 當(dāng)一個(gè)并行的子DS后來(lái)變成非活躍狀態(tài)時(shí),它的模態(tài)會(huì)被設(shè)置為“非活躍的”; 當(dāng)一個(gè)順序的子DS后來(lái)變成非活躍狀態(tài)時(shí),它的階段隨之也變成非活躍狀態(tài),同時(shí)這個(gè)階段的遷移條件也會(huì)被評(píng)估。如果有一個(gè)遷移條件判斷為“真”,相應(yīng)的目標(biāo)階段(可以是空階段)會(huì)變成活躍狀態(tài),而且當(dāng)前階段會(huì)指向這個(gè)目標(biāo)階段。如果沒(méi)有遷移條件判斷為“真”,會(huì)默認(rèn)地把當(dāng)前階段指向默認(rèn)的空階段。 當(dāng)一個(gè)階段機(jī)的當(dāng)前階段指向一個(gè)空階段時(shí),整個(gè)階段機(jī)會(huì)變?yōu)榉腔钴S狀態(tài)。 任何時(shí)候,當(dāng)任何一個(gè)階段機(jī)或并行單元變成非活躍狀態(tài)時(shí),它的組合DS的結(jié)束情況集將會(huì)被評(píng)估。如果顯式地定義了一個(gè)包含結(jié)束條件和結(jié)束代碼的集合(如圖6所示),則任何時(shí)候當(dāng)一個(gè)結(jié)束條件判斷為“真”時(shí),對(duì)應(yīng)的結(jié)束代碼就會(huì)被記錄在結(jié)果中,然后組合DS會(huì)變成非活躍狀態(tài)。如果定義了一個(gè)結(jié)束函數(shù),它會(huì)測(cè)試每一個(gè)結(jié)束情況,如果有任何一個(gè)結(jié)束情況被滿足,一個(gè)對(duì)應(yīng)的結(jié)束代碼就會(huì)被記錄在結(jié)果中,然后這個(gè)組合DS就會(huì)變成非活躍狀態(tài)。否則,這個(gè)組合DS會(huì)繼續(xù)保持活躍狀態(tài)。 當(dāng)一個(gè)組合DS變成非活躍狀態(tài)時(shí),它所有的階段機(jī)(包括它們處于活躍狀態(tài)的順序子DS)以及并行單元(包括它們的并行子DS)都會(huì)變成非活躍狀態(tài)。重復(fù)性的行為可以用重復(fù)性的階段來(lái)描述。一個(gè)重復(fù)性的階段是一個(gè)階段,它的某一個(gè)遷移會(huì)把它自己作為遷移的目標(biāo)階段。在本發(fā)明中支持遞歸性的(recursive)DS。一個(gè)遞歸性的DS有一個(gè)或多個(gè)子DS具有和遞歸性DS相同的類型,或者與遞歸性DS的直接或間接父DS有相同的類型。有了遞歸性的DS,一個(gè)相同的行為會(huì)在越來(lái)越小的范圍內(nèi)重復(fù)。一般情況下,當(dāng)選擇不再進(jìn)一步生成新的遞歸性子DS時(shí),遞歸就會(huì)被終止。用DS來(lái)進(jìn)行行為建模的優(yōu)點(diǎn)在于· DS的組合結(jié)構(gòu)直接反映了我們所生活的世界是由時(shí)間維度和空間維度所構(gòu)成的。 從時(shí)間維度和空間維度來(lái)觀察東西對(duì)人類是一種很自然的事。它較于現(xiàn)有的其他行為建模語(yǔ)言所定義的節(jié)點(diǎn)和鏈接賦予了更重要的含義。因此DS模型更易于學(xué)習(xí)和理解。
通過(guò)控制各種子DS變成活躍狀態(tài)和非活躍狀態(tài),一個(gè)DS的行為可以隨著時(shí)間非常有序地演進(jìn); 由若干結(jié)束條件與結(jié)束代碼構(gòu)成的結(jié)束情況集為控制一個(gè)組合DS什么時(shí)候應(yīng)該結(jié)束提供了一種強(qiáng)大而靈活的機(jī)制; 和許多采用分叉節(jié)點(diǎn)和匯合節(jié)點(diǎn)的現(xiàn)有技術(shù)不同的是,一個(gè)組合的DS呈現(xiàn)出來(lái)的塊狀結(jié)構(gòu)組織為它的所有組件定義了一個(gè)清晰的生命周期。 因?yàn)槊總€(gè)子DS都可以是組合的,所以DS模型支持以遞歸的方式不斷細(xì)化對(duì)系統(tǒng)行為的描述。 通過(guò)重復(fù)階段和動(dòng)態(tài)的并行子DS還可以描述重復(fù)的行為和動(dòng)態(tài)的行為;特殊的 DS Ext-DS, PS,Int-DS盡管DS是一個(gè)描述動(dòng)態(tài)行為的強(qiáng)有力的工具,但為了充分描述一個(gè)分布式環(huán)境 中與多個(gè)對(duì)端系統(tǒng)交流的應(yīng)用系統(tǒng)的行為,我們還需要使用三種DS的特例。第一種是外部DS(Ext-DS),用于描述一個(gè)應(yīng)用系統(tǒng)必須處理的外部活動(dòng),包括向內(nèi)的消息和事件。第二種是內(nèi)部DS (Int-DS),用于描述一個(gè)應(yīng)用系統(tǒng)為了完成某些工作要執(zhí)行的內(nèi)部活動(dòng)。第三種是把Ext-DS和Int-DS集成在一起的自主系統(tǒng)(PS),用于描述一個(gè)應(yīng)用系統(tǒng)的反應(yīng)式行為和自主行為。外部DS (Ext-DS)一個(gè)Ext-DS是用來(lái)定義一個(gè)PS在執(zhí)行內(nèi)部動(dòng)作之前所等待的外部事件。Ext-DS是DS的一個(gè)特例,它可以是簡(jiǎn)單的或者組合的。作為一個(gè)簡(jiǎn)單DS的特例,一個(gè)簡(jiǎn)單的Ext-DS(如圖9所示)也有一個(gè)行為和一個(gè)結(jié)果。它的行為就是一個(gè)事件類型。而事件類型是用來(lái)描述一個(gè)PS可能接收的信號(hào)、消息或者事件的類型。一個(gè)事件類型可以下列語(yǔ)言之一來(lái)描述1) 一種程序語(yǔ)言,比如C和JAVA ;2) 一種數(shù)據(jù)標(biāo)記語(yǔ)言,比如ASN. I (Abstract Syntax Notation One) ;3) 一種基于 XML 的語(yǔ)言,或者 4) 一種圖形語(yǔ)言。在運(yùn)行時(shí)刻一個(gè)簡(jiǎn)單的Ext-DS變?yōu)榛钴S(或非活躍)狀態(tài)的過(guò)程如下 當(dāng)一個(gè)簡(jiǎn)單的Ext-DS變成活躍狀態(tài)時(shí),它的事件類型也變成活躍狀態(tài)。 如果隨后這個(gè)簡(jiǎn)單的Ext-DS收到了一個(gè)和它的事件類型相符的消息,那么這個(gè)消息就會(huì)被保存下來(lái)備以后使用,然后這個(gè)簡(jiǎn)單的Ext-DS就會(huì)變成非活躍狀態(tài)。否則,如果這個(gè)消息和Ext-DS的事件類型不相符,它將被拋棄掉,而這個(gè)簡(jiǎn)單的Ext-DS會(huì)繼續(xù)保持活躍狀態(tài)。一個(gè)組合的Ext-DS和一個(gè)組合的DS相似(如圖5所示),只是子DS換成了子Ext-DS而已。所有這些子Ext-DS(不論是順序的還是并行的)都可以是簡(jiǎn)單的或者組合的。因?yàn)橐粋€(gè)組合的Ext-DS是組合DS的一個(gè)特例,前文關(guān)于一個(gè)組合的DS變成活躍(或非活躍)狀態(tài)的過(guò)程同樣適用于一個(gè)組合的Ext-DS。只需將文字中的DS替換成Ext-DS就可以了。當(dāng)一個(gè)簡(jiǎn)單PS在運(yùn)行時(shí)刻收到一個(gè)向內(nèi)的事件時(shí),它會(huì)調(diào)用函數(shù)“檢查事件O”去檢查這個(gè)事件是否是它的Ext-DS中定義的類型相符。這個(gè)檢查事件O函數(shù)返回下列值之一 不匹配,這表示事件類型不相符
部分匹配,這表示事件類型相符,這個(gè)向內(nèi)的事件已被保存起來(lái)供以后處理,但是Ext-DS尚未結(jié)束,因?yàn)镋xt-DS還在等待更多的事件;或者 完全匹配,這表示事件類型相符,這個(gè)向內(nèi)的事件已被保存起來(lái)供以后處理,而且Ext-DS已經(jīng)結(jié)束。下面用偽代碼提供了一個(gè)處于活躍狀態(tài)的Ext-DS的運(yùn)行時(shí)刻事件檢查函數(shù)的范例。其中參數(shù)“Ext-DS”是用來(lái)描述待接收的向內(nèi)的外部事件的外部DS,而參數(shù)“事件”是待檢查的向內(nèi)的事件。請(qǐng)注意,方括號(hào)“ □”之間的內(nèi)容是注釋。檢查事件(Ext-DS,事件){如果Ext-DS是簡(jiǎn)單的,檢查收到的事件的類型和Ext-DS的事件類型是否相同;如果是“否”,返回“不匹配”;否則[事件類型是正確的]保存這個(gè)事件;返回“完全匹配”;否則[Ext-DS是組合的],[檢查全部階段機(jī)]對(duì)每一個(gè)“當(dāng)前階段”不是空的階段機(jī),執(zhí)行以下步驟為順序的子Ext-DS,遞歸地調(diào)用檢查事件O函數(shù);如果它返回“部分匹配”,即返回“部分匹配”否則,如果它返回“完全匹配”,逐個(gè)檢查每一個(gè)遷移;如果任何一個(gè)遷移條件是“真”,把當(dāng)前階段指向遷移的目標(biāo)階段;;否則[如果沒(méi)有一個(gè)遷移條件為“真”],把當(dāng)前階段的取值設(shè)為默認(rèn)的空階段;如果當(dāng)前階段不是空階段,返回“部分匹配”;否則[當(dāng)前階段是空階段],檢查結(jié)束情況集;如果有任何結(jié)束情況得到滿足,把結(jié)束代碼記錄在結(jié)果中;返回“完全匹配”;否則[沒(méi)有結(jié)束情況被滿足],返回“部分匹配”;否則[返回“不匹配”],去檢查下一個(gè)階段機(jī);[如果執(zhí)行到這里,所有階段機(jī)都是“不匹配”,去檢查所有的并行單元]為每一個(gè)活躍狀態(tài)的并行單元,執(zhí)行以下步驟,對(duì)于并行子Ext-DS遞歸地調(diào)用檢查事件O函數(shù);
如果它返回“部分匹配”,返回“部分匹配”;否則,如果它返回“完全匹配”,設(shè)置模狀為“非活躍的”;檢查結(jié)束情況集;如果有任何結(jié)束情況被滿足,在結(jié)果中記錄結(jié)束代碼; 返回“完全匹配”;否則[沒(méi)有結(jié)束情況被滿足],返回“部分匹配”;否則[返“不匹配”],去檢查下一個(gè)并行單元;[如果執(zhí)行到這里,這個(gè)事件和所有順序的Ext-DS和并行的子Ext-DS都不相符,]返回“不匹配”;}為了清楚起見,這個(gè)事件檢查函數(shù)也會(huì)用本發(fā)明后面將介紹的圖形語(yǔ)言表示在圖12中。內(nèi)部DS(Int-DS)一旦一個(gè)簡(jiǎn)單的PS被一個(gè)與Ext-DS完全匹配的事件所觸發(fā),對(duì)應(yīng)的Int-DS就會(huì)被執(zhí)行。因此,一個(gè)Int-DS可以看作一個(gè)PS的行為中主動(dòng)的那一部分行為,或者PS的主動(dòng)式行為。一個(gè)Int-DS是DS的一個(gè)特例,它可以是簡(jiǎn)單的或者組合的。作為一個(gè)簡(jiǎn)單DS的特例,一個(gè)簡(jiǎn)單的Int-DS(如圖11所示)也有一個(gè)行為和一個(gè)結(jié)果。這個(gè)行為就是一個(gè)動(dòng)作。在本發(fā)明中的動(dòng)作是指不能再進(jìn)一步分解的最基本的行為單元。一個(gè)動(dòng)作可以是讀寫一段信息,也可以是查找或匹配信息,還可以是讀Ext-DS所保存的事件,或者是構(gòu)建、發(fā)送事件,或者是生成、銷毀DS實(shí)例,或者是調(diào)用由其它系統(tǒng)執(zhí)行的復(fù)雜動(dòng)作。一個(gè)動(dòng)作可以用面向函數(shù)程序語(yǔ)言(比如C語(yǔ)言)的一個(gè)函數(shù)來(lái)實(shí)現(xiàn),也可以用面向?qū)ο蟪绦蛘Z(yǔ)言(比如JAVA語(yǔ)言)的一個(gè)方法來(lái)實(shí)現(xiàn),或者用腳本語(yǔ)言(比如Linux的Shell語(yǔ)言)的一個(gè)腳本來(lái)實(shí)現(xiàn)。一個(gè)動(dòng)作也可以用腳本語(yǔ)言、程序語(yǔ)言的一個(gè)代碼片斷來(lái)實(shí)現(xiàn),或者是用字節(jié)代碼(比如Java的字節(jié)代碼),甚至包括匯編語(yǔ)言來(lái)實(shí)現(xiàn)。它的執(zhí)行成果則可以記錄在結(jié)果中。在運(yùn)行時(shí)刻一個(gè)簡(jiǎn)單的Int-DS變成活躍(或非活躍)狀態(tài)的過(guò)程描述如下 當(dāng)一個(gè)簡(jiǎn)單的Int-DS變成活躍狀態(tài)時(shí),它的動(dòng)作也變成活躍狀態(tài),并且被執(zhí)行; 在它的動(dòng)作被執(zhí)行完以后,這個(gè)簡(jiǎn)單的Int-DS隨之變成非活躍狀態(tài)。一個(gè)的組合Int-DS和一個(gè)組合的DS相似(如圖5所示),只是把子DS換成子Int-DS而已。這些子Int-DS(不管是順序的還是并行的)都可以是簡(jiǎn)單的或者是組合的。因?yàn)橐粋€(gè)組合的Int-DS是一個(gè)組合DS的特例,前文關(guān)于一個(gè)組合的DS變成活躍(或非活躍)狀態(tài)的過(guò)程同樣適用于一個(gè)組合的Int-DS。只需將文字中的DS替換成Int-DS就可以了。當(dāng)一個(gè)簡(jiǎn)單PS在運(yùn)行時(shí)刻收到一個(gè)向內(nèi)的事件時(shí),它會(huì)調(diào)用檢查事件函數(shù)去檢查這個(gè)事件是否是它的Ext-DS中所定義的類型。如果返回值是“完全匹配”,這個(gè)簡(jiǎn)單PS會(huì)調(diào)用動(dòng)作執(zhí)行函數(shù)“動(dòng)作O”去執(zhí)行它的Int-DS中所定義的內(nèi)部活動(dòng)。“動(dòng)作O”函數(shù)返回下列值之一 錯(cuò)誤,這表示發(fā)生了一個(gè)錯(cuò)誤;或者·正確,這表示內(nèi)部活動(dòng)已經(jīng)被成功執(zhí)行下面用偽代碼描述了一個(gè)處于活躍狀態(tài)的Int-DS的動(dòng)作執(zhí)行函數(shù)的范例,其中參數(shù)” Int-DS “是定義要執(zhí)行的內(nèi)部活動(dòng)的內(nèi)部DS 動(dòng)作(Int-DS){如果Int-DS是簡(jiǎn)單的,執(zhí)行Int-DS的動(dòng)作來(lái)對(duì)保存的事件進(jìn)行處理;如果檢測(cè)到錯(cuò)誤,返回“錯(cuò)誤”;·否則,返回“正確”;否則[Int-DS是組合的],[檢查全部階段機(jī)]為每一個(gè)當(dāng)前階段不是空階段的階段機(jī),執(zhí)行以下步驟為順序的子Int-DS遞歸地調(diào)用動(dòng)作O函數(shù);如果子Int-DS返回“錯(cuò)誤”,返回“錯(cuò)誤”;否則,逐個(gè)檢查每一個(gè)遷移;如果有任何一個(gè)遷移條件是“真”,把當(dāng)前階段指向遷移的目標(biāo)階段;否則,把當(dāng)前階段指向默認(rèn)的空階段;如果當(dāng)前階段不是空階段,對(duì)新的“當(dāng)前階段”重復(fù)這個(gè)過(guò)程;否則,檢查結(jié)束情況集;如果任何結(jié)束情況被滿足,把結(jié)束代碼記錄到結(jié)果中;返回“正確”;否則,去檢查下一個(gè)階段機(jī);[檢查所有的并行單元]為每一個(gè)活躍狀態(tài)的并行單元執(zhí)行以下步驟,對(duì)并行子Int-DS遞歸地調(diào)用動(dòng)作O函數(shù);如果并行單元返回“錯(cuò)誤”,則返回“錯(cuò)誤”;否則,設(shè)置模態(tài)為“非活躍的”;檢查結(jié)束情況集;如果有任何結(jié)束情況被滿足,把結(jié)束代碼記錄到結(jié)果中;返回“正確”;否則,去檢查下一個(gè)并行單元;}為了清楚起見,這個(gè)動(dòng)作函數(shù)也會(huì)用本發(fā)明在后面將介紹的圖形語(yǔ)言表示在圖14中。自主系統(tǒng)(PS)一個(gè)在外部交流或外部事件觸發(fā)下能做出反應(yīng)式行為的應(yīng)用系統(tǒng)可以用一個(gè)自主系統(tǒng)(即Proactive System,簡(jiǎn)稱PS)來(lái)定義。一個(gè)PS是一個(gè)DS的特例,它可以是簡(jiǎn)單的或者組合的。作為一個(gè)簡(jiǎn)單的DS的特例,一個(gè)簡(jiǎn)單的PS也有一個(gè)行為和一個(gè)結(jié)果。這個(gè)行為包括一個(gè)外部DS(Ext-DS)以及后面跟著的一個(gè)內(nèi)部DS(Int-DS)。Ext-DS描述了要發(fā)生的外部事件,而Int-DS描述了為響應(yīng)所發(fā)生的Ext-DS中定義的外部事件而執(zhí)行的內(nèi)部活動(dòng)。Ext-DS和Int-DS都可以是簡(jiǎn)單的或組合的。結(jié)果則可以被Int-DS用來(lái)記錄動(dòng)作執(zhí)行的成果。
在運(yùn)行時(shí)刻一個(gè)簡(jiǎn)單的PS變成活躍(或非活躍)狀態(tài)的過(guò)程描述如下 當(dāng)一個(gè)簡(jiǎn)單的PS變成活躍狀態(tài)時(shí),它的Ext-DS也變成活躍狀態(tài);·這個(gè)簡(jiǎn)單PS的Ext-DS隨后接收到一個(gè)完全匹配的事件(如前文所述),這個(gè)簡(jiǎn)單PS的Int-DS就變成活躍狀態(tài),并且會(huì)被執(zhí)行; 當(dāng)它的Int-DS被執(zhí)行完以后,這個(gè)簡(jiǎn)單的PS也隨之變成非活躍狀態(tài);一個(gè)組合的PS和一個(gè)組合的DS相似(如圖5所示),只是子DS被換成子PS而已。這些子PS(不管是順序的還是并行的)都可以是簡(jiǎn)單的或者組合的。因?yàn)橐粋€(gè)組合的PS是一個(gè)組合DS的特例,前文關(guān)于一個(gè)組合DS變成活躍(或非活躍)狀態(tài)的過(guò)程同樣適用于一個(gè)組合的PS。只需將文字中的DS替換成PS就可以了。當(dāng)一個(gè)PS在運(yùn)行時(shí)收到一個(gè)向內(nèi)的事件時(shí),它會(huì)調(diào)用反應(yīng)O函數(shù)去處理這個(gè)事件。反應(yīng)函數(shù)返回下列值之一籲未做任何事情,這表示沒(méi)有執(zhí)行任何內(nèi)部活動(dòng); 未作部分完成,這表不內(nèi)部活動(dòng)的一部分被完成了,但是PS尚未結(jié)束;或者 完成,這表示內(nèi)部活動(dòng)被全部完成,而且PS已經(jīng)結(jié)束。下面用偽代碼描述了一個(gè)處于活躍狀態(tài)的PS在收到事件后的反應(yīng)函數(shù)的范例,其中參數(shù)“PS”是做出反應(yīng)的PS,參數(shù)“事件”是待處理的事件反應(yīng)(PS,事件){如果PS是簡(jiǎn)單的,用事件作為參數(shù),為PS的Ext-DS來(lái)調(diào)用檢查事件O函數(shù);如果返回結(jié)果是“不匹配”,返回“未做任何事情”;否則如果返回結(jié)果是“部分匹配”,返回“部分完成”;否則[返回結(jié)果是“完全匹配”],調(diào)用動(dòng)作O函數(shù),執(zhí)行Int-DS ;返回“完成”;否則[PS是組合的],[檢查全部階段機(jī)]為每一個(gè)當(dāng)前階段不是空階段的階段機(jī)執(zhí)行以下步驟對(duì)于順序的子PS遞歸地調(diào)用反應(yīng)O函數(shù);如果順序的子PS返回“部分完成“,返回“部分完成”;
否則如果它返回“完成”,檢查每一個(gè)遷移;如果有任何一個(gè)遷移條件為“真”,把當(dāng)前階段指向遷移的目標(biāo)階段;否則[沒(méi)有遷移條件為真]把當(dāng)前階段設(shè)置為默認(rèn)的空階段;如果當(dāng)前階段不是空階段,返回“部分完成”;否則[當(dāng)前階段是空階段],檢查結(jié)束情況集;
如果有任何結(jié)束情況被滿足,把結(jié)束代碼記錄在結(jié)果中;返回“完成”;否則[沒(méi)有結(jié)束情況被滿足],返回“部分完成”;否則[返回“未做任何事”],去檢查下一個(gè)階段機(jī);[如果執(zhí)行到這里,所有的階段機(jī)都是返回“未作任何事情”,去檢查所有的并行單元]為每一個(gè)活躍狀態(tài)的并行單元執(zhí)行以下步驟對(duì)于每一個(gè)并行子PS遞歸地調(diào)用反應(yīng)O函數(shù)如果并行子PS返回“部分完成”,則返回“部分完成”;否則如果它返回“完成”,設(shè)置模態(tài)為“非活躍的”;檢查結(jié)束情況集;如果有任何結(jié)束情況被滿足,把結(jié)束代碼記錄在結(jié)果中;返回“完成”;否則[沒(méi)有結(jié)束情況被滿足],返回“部分完成”;否則[返回”未作任何事情”],去檢查下一個(gè)并行單元.[如果執(zhí)行到這里,未做任何事情]返回“未做任何事情”;}為了清楚起見,上述反應(yīng)函數(shù)也會(huì)用本發(fā)明后面將介紹的圖形語(yǔ)言表示在圖13中。在不同的步驟中使用Ext-DS,PS和Int-DS這些特殊的DS,比用一個(gè)通用性的DS有很多額外的好處^Ext-DS,PS和Int-DS提供了多種層面的抽象方法,使得定義分布式環(huán)境中的復(fù)雜系統(tǒng)行為更加方便,因?yàn)樗鼈冎械拿恳粋€(gè)都以一種特殊的方式幫助設(shè)計(jì)者專注在系統(tǒng)行為的某一個(gè)方面?!?PS是對(duì)基于狀態(tài)機(jī)的傳統(tǒng)技術(shù)(比如狀態(tài)圖技術(shù))來(lái)做擴(kuò)展和改進(jìn)的。而Int-DS是對(duì)基于流程圖的傳統(tǒng)技術(shù)(比如BPMN技術(shù)和UML2. O活動(dòng)圖技術(shù))來(lái)做擴(kuò)展和改進(jìn)的。
因?yàn)镋xt-DS,PS和Int-DS中的每一個(gè)都是同一個(gè)DS模型的特例,所以在設(shè)計(jì)的每個(gè)層面上都有很強(qiáng)的一致性,使得本發(fā)明更加容易學(xué)而且容易懂。 正如在本發(fā)明后面會(huì)展示的,因?yàn)檫@種一致性,可以系統(tǒng)化地、機(jī)械地從一個(gè)用DS所定義的通訊協(xié)議來(lái)推導(dǎo)出來(lái)一個(gè)用PS所定義的反應(yīng)式行為。因此本發(fā)明為解決如何保證通訊協(xié)議以及參與各方彼此一致的難題提供了一種解決方案。DS, Ext-DS, PS 和 Int-DS 的簡(jiǎn)化模型到目前為止,我們已經(jīng)描述了 DS的基本模型以及它 的一些特例,比如Ext-DS,PS和Int-DS。在本發(fā)明中它們都被稱為DS模型。這個(gè)基本的DS模型(以后我們稱之為“模型O”)可以通過(guò)用并行階段機(jī)來(lái)模擬并行單元進(jìn)而簡(jiǎn)化。這個(gè)簡(jiǎn)化后的模型我們將稱之為“模型I”;一個(gè)模型O的組合DS中的一個(gè)并行單元可以用一個(gè)只有一個(gè)階段及一個(gè)空遷移的階段機(jī)來(lái)模擬。這個(gè)用來(lái)模擬并行單元的階段機(jī),我們?cè)诒景l(fā)明中稱之為“并行階段機(jī)”。一個(gè)并行階段機(jī)的階段只有一個(gè)子DS。它的空遷移可以由下面幾種方法之一來(lái)實(shí)現(xiàn) 不定義任何遷移,如圖15A所示; 只有一個(gè)標(biāo)識(shí)為空的遷移; 只有一個(gè)遷移,而它的遷移條件設(shè)置為真,它的目標(biāo)階段指向一個(gè)空階段1502,如圖15B所示。這個(gè)并行階段機(jī)還增加了一個(gè)組件“靜態(tài)實(shí)例數(shù)”(可省略的)1604。和并行單元的靜態(tài)實(shí)例數(shù)類似,這個(gè)階段機(jī)的靜態(tài)實(shí)例數(shù)用來(lái)指明當(dāng)包含階段機(jī)的DS生成時(shí),要生成多少個(gè)這種階段機(jī)的靜態(tài)實(shí)例。如果沒(méi)有設(shè)定靜態(tài)實(shí)例數(shù),靜態(tài)實(shí)例數(shù)的取值默認(rèn)為1,因此當(dāng)包含它的組合DS生成時(shí),總會(huì)生成一個(gè)階段機(jī)的實(shí)例。一個(gè)并行階段機(jī)的子DS的行為是和該階段機(jī)所模擬的并行單元的并行子DS的行為相同。在本發(fā)明中,用術(shù)語(yǔ)“順序的階段機(jī)”來(lái)表示一個(gè)沒(méi)有受上述并行階段機(jī)限制的正常的階段機(jī)。一個(gè)順序階段機(jī)的靜態(tài)實(shí)例數(shù)通常是被設(shè)置為“1”,因此當(dāng)包含它的組合DS生成時(shí),會(huì)生成一個(gè)順序階段機(jī)的實(shí)例。在用了并行階段機(jī)來(lái)模擬組合DS中的并行單元后,一個(gè)模型I的組合DS就只需要有若干個(gè)階段機(jī)1601,一個(gè)結(jié)束情況集1602以及一個(gè)結(jié)果1603。其中的這些階段機(jī)有些是順序的,有些則是并行的(如圖16所示)。因?yàn)槊恳粋€(gè)并行單元都是用一個(gè)階段機(jī)來(lái)模擬,所以一個(gè)組合的DS變成活躍(或非活躍)狀態(tài)的過(guò)程對(duì)模型O和模型I都是一樣的,只是模型I的組合DS不再有任何并行單元,所以和并行單元有關(guān)的那部份代碼不會(huì)再被執(zhí)行。同樣地,一個(gè)組合的Ext-DS,組合的PS或組合的Int-DS也是一個(gè)模型I的組合DS的特例。因?yàn)槊恳粋€(gè)并行單元都被替換成一個(gè)并行階段機(jī)了,這些模型I的DS組件變成活躍(或非活躍)狀態(tài)的過(guò)程和模型O的相同,只是和并行單元有關(guān)的那部分代碼不會(huì)再執(zhí)行。類似的,前文描述的一個(gè)活躍的Ext-DS的事件檢查函數(shù),一個(gè)活躍的Int-DS的動(dòng)作函數(shù)以及一個(gè)活躍的PS的反應(yīng)函數(shù)對(duì)模型I還是同樣適用。圖形化表示法本發(fā)明的一種實(shí)施例是用人可以讀懂的一種圖形語(yǔ)言來(lái)表示PS,Ext-DS, Int-DS或者任何其他由DS導(dǎo)出的組件(我們將把這些都稱為“DS組件”)。作為一個(gè)這種圖形語(yǔ)言的例子,一個(gè)DS或子DS可以用一個(gè)包含框,或者帶標(biāo)簽的包含框表示。這種包含框可以是各種形狀的,比如多邊形,圓形或者橢圓形等。一個(gè)包含若干子DS(可以是順序的或者并行的)的父DS可以用一個(gè)大框(代表父DS)里包含若干個(gè)小框(代表子DS)來(lái)表示。如果一個(gè)DS可以有多個(gè)實(shí)例,這個(gè)框就會(huì)帶有陰影。另外,一個(gè)初始階段或空階段可以用組合DS框邊上一個(gè)小框或者一個(gè)符號(hào)來(lái)表示。圖17描述了用一種圖形語(yǔ)言表示的組合DS的一個(gè)例子組合DS “DS0” 1700有三個(gè)順序的子DS (它們是子DS “s0” 1701,“si” 1702,和“s2” 1703),3個(gè)并行的簡(jiǎn)單子DS (它們是子DS “p0” 1706,“p3” 1709和“p5,,1708)以及兩個(gè)并行的組合子DS (它們是子DS “pi” 1705和“p2” 1708)。請(qǐng)注意,子DS “p2” 1708和“p3” 1709帶有陰影,這表示它們?cè)谶\(yùn)行時(shí)刻可以有多個(gè)實(shí)例。
在本例中,一個(gè)簡(jiǎn)單的DS用一個(gè)內(nèi)部帶有名字或者一個(gè)簡(jiǎn)單的行為描述的長(zhǎng)方框來(lái)表示。圖17中的子DS “p0” 1706和“p5” 1704就是兩個(gè)簡(jiǎn)單DS的例子。一個(gè)遷移是用一根鏈接或者箭頭(我們稱之為遷移箭頭)來(lái)表示,箭頭指向的是遷移的目標(biāo)階段,而遷移條件則顯示在靠近箭頭旁作為遷移的一個(gè)標(biāo)簽。圖17中有一個(gè)從子DS “s2” 1703指向子DS “sO” 1701(目標(biāo)階段)的用“遷移條件5”作為標(biāo)簽的遷移箭頭。每一個(gè)具有一個(gè)或多個(gè)遷移箭頭(向內(nèi)或向外的)的子DS是一個(gè)順序的子DS,而沒(méi)有遷移箭頭的子DS則是一個(gè)并行的子DS。一個(gè)生成箭頭可以用來(lái)指向一個(gè)動(dòng)態(tài)生成的動(dòng)態(tài)組件。盡管一個(gè)生成箭頭在圖17中是用一個(gè)粗的虛線箭頭1707作為圖形語(yǔ)言的范例,它也可以用其他種類的鏈接表示,只要這種鏈接能夠和遷移箭頭區(qū)別開。正如圖17所示,子DS“p0”1706可以動(dòng)態(tài)地生成多個(gè)子DS “p2,,1708的實(shí)例,而且子DS “p2” 1708可以動(dòng)態(tài)地生成子DS “p3” 1709的多個(gè)實(shí)例。一個(gè)帶有向內(nèi)的生成箭頭的并行子DS,比如圖17中的子DS”p2”1708和“p3”1709,是一個(gè)動(dòng)態(tài)的并行子DS,它的并行單元中的靜態(tài)實(shí)例數(shù)會(huì)被設(shè)置成O。而不帶有向內(nèi)的生成箭頭的并行子DS,比如圖17中的子DS "p0"1706和“pl”1705,則是靜態(tài)的并行子DS,相應(yīng)的靜態(tài)實(shí)例數(shù)會(huì)被設(shè)置成I,表示當(dāng)”DS O" 1700生成時(shí),只會(huì)生成一個(gè)子DS “ρ0” 1706和“pi” 1705的實(shí)例。請(qǐng)注意,在圖17中的DS O 1700沒(méi)有顯式地定義任何結(jié)束情況。正如前面所講,默認(rèn)的結(jié)束情況是當(dāng)DSO 1700的所有子DS結(jié)束時(shí),DSO才結(jié)束。圖18表示的是如何用可視化的方式顯式地表示初始階段,空階段,結(jié)束條件和結(jié)束點(diǎn)。在圖18中,初始階段1801用左邊框上的一個(gè)小框代表,它有兩個(gè)遷移,其中一個(gè)指向包含子DS “s0”1802的階段,另一個(gè)指向包含子DS “sl,,1803的階段。子DS “s0”1802有一個(gè)遷移指向子DS “s2” 1804,這個(gè)遷移的條件永遠(yuǎn)為“真”。子DS “s2” 1804有3個(gè)遷移,其中一個(gè)標(biāo)簽為“遷移條件2”的遷移指向空階段1806,標(biāo)簽為“遷移條件3 “的遷移指向它自己,而標(biāo)簽為”遷移條件4 “的遷移則指回到包含子DS “s0”1802的階段。DSO還包含一個(gè)并行的子DS “pi” 1805和兩個(gè)結(jié)束點(diǎn)。每個(gè)結(jié)束點(diǎn)代表了一個(gè)結(jié)束情況來(lái)指明在哪種情況下一個(gè)組合DS會(huì)結(jié)束。一個(gè)結(jié)束情況有一對(duì)結(jié)束條件和結(jié)束代碼。一個(gè)結(jié)束點(diǎn)可以用組合DS的包含框的邊框內(nèi)或者邊框上的一個(gè)符號(hào)或者小框來(lái)表示。作為一個(gè)例子,在圖18中每一個(gè)結(jié)束點(diǎn)用邊框上的一個(gè)小的黑框1807表示,并且用相關(guān)的結(jié)束條件作為小黑框的標(biāo)簽。一個(gè)結(jié)束條件可以用一段文字,一個(gè)邏輯表達(dá)式或者一個(gè)數(shù)學(xué)公式來(lái)描述在哪種情況下一個(gè)組合DS會(huì)結(jié)束。結(jié)束條件“子DS Pl已經(jīng)結(jié)束”就是一個(gè)文字條件的例子,表示當(dāng)子DS Pl結(jié)束后,組合DS “DS 0”1800就會(huì)結(jié)束。結(jié)束條件“□”是一個(gè)邏輯表達(dá)式的例子,表示當(dāng)所有組件都結(jié)束后,“DS0” 1800才會(huì)結(jié)束。結(jié)束條件“年齡< 10”是一個(gè)數(shù)學(xué)公式的例子,表示當(dāng)“年齡”取值小于10的時(shí)候,“DS0” 1800就會(huì)結(jié)束。為了簡(jiǎn)化行為模型和對(duì)應(yīng)的圖形語(yǔ)言,下面定義了一些默認(rèn)情況的范例· 一個(gè)永遠(yuǎn)為真的遷移條件可以被省略?!と绻粋€(gè)階段只有一個(gè)和初始階段相連的向內(nèi)的遷移,而且它的遷移條件永遠(yuǎn)為“真”,那么這個(gè)遷移可以被完全省略。·如果一個(gè)階段只有一個(gè)和空階段相連的向外遷移,而且它的遷移條件永遠(yuǎn)為 “真”,那么這個(gè)遷移也可以完全省略。圖19描述了一個(gè)用圖形語(yǔ)言表示的組合PS例子。在這個(gè)范例圖畫中,組合的”PS0” 1902包含兩個(gè)順序的子PS(即子PS “sO” 1903和子PS “si” 1904)、三個(gè)并行的子DS (即子PS “p0”1905,子PS “pl,,1906和子PS “p2”1911)和兩個(gè)結(jié)束條件分別為“結(jié)束條件O”和“結(jié)束條件I”的結(jié)束點(diǎn)1913和1915。一個(gè)簡(jiǎn)單的PS 1906用一個(gè)包含它的Ext-DS組件1908和Int-DS組件1910的框表示。為了區(qū)分一個(gè)簡(jiǎn)單PS的Ext-DS和Int-DS,在這兩個(gè)組件之間畫了一根分隔線(一根垂直線1909或者一根水平線1907)。子PS “p0” 1905和”pi” 1906就是兩個(gè)這樣的例子。兩個(gè)PS之間的交流可以用一個(gè)連接它們的雙向鏈接來(lái)表示(我們稱之為交流鏈接)。圖19表示的是組合“PS O” 1902和“PS1” 1900有交流,子PS “Si” 1904和子PS “p2” 1911有交流,子PS “p0” 1905和子PS “pi “1911有交流。在這個(gè)例子中,一個(gè)交流鏈接是用虛線表示的(圖19中的“協(xié)議O”就是這樣的一個(gè)例子)。然而,它也可以用其他種的鏈接來(lái)表示,只要它在視覺上能夠和一個(gè)遷移箭頭和生成箭頭區(qū)分開來(lái)。這些交流鏈接還可以加上一個(gè)或兩個(gè)箭頭(可省略的)來(lái)指明交流的方向。一個(gè)只發(fā)送一個(gè)方向的事件的簡(jiǎn)單交流可以用只帶一個(gè)箭頭的虛線表示(圖19中的“協(xié)議2”就是這樣的一個(gè)例子)。一條兩端都有箭頭的交流鏈接表示有雙向的交流(圖19中的“協(xié)議I”就是這樣的一個(gè)例子)。一個(gè)交流鏈接還可以有一個(gè)標(biāo)簽或標(biāo)識(shí)符(可省略的)來(lái)指明這個(gè)交流所必須遵循的協(xié)議規(guī)范。圖19中的“協(xié)議0”,“協(xié)議I”和“協(xié)議2”就是這樣的標(biāo)簽。在本發(fā)明中,一個(gè)組合DS中的任何子DS都可以是簡(jiǎn)單的或組合的。甚至一個(gè)簡(jiǎn)單子PS中的Ext-DS或Int-DS也都可以是簡(jiǎn)單的或者組合的。因此一個(gè)包含框可以有多個(gè)子包含框,而且這些子包含框中的任何一個(gè)又都可以包含多個(gè)子子包含框。這些子子包含框中有些是順序的,因此,它們之間連著遷移箭頭。而有些子子包含框是并行的,因此沒(méi)有與任何其他子子包含框相連。圖20表示了一個(gè)組合PS的例子“PS0”。組合PS“PSO”2000包含一個(gè)子PS“s0”2001,子PS“s0”又有一個(gè)組合的Ext-DS 2002和一個(gè)組合的Int_DS2006。組合的 Ext-DS 2002 還包含了兩個(gè)順序的 Ext-DS (即“Ext-DS s0”2003 和“Ext-DS sl”2004)及一個(gè)并行的Ext-DS“Ext-DS p0”2005。組合的Int-DS 2006包含兩個(gè)順序的Int_DS2007和2008,以及一個(gè)并行的Int-DS 2009。
用圖形語(yǔ)言表示DS,Ext-DS,PS和Int-DS有以下好處(為了簡(jiǎn)捷起見,這里用術(shù)語(yǔ)“系統(tǒng)”代表 DS,Ext-DS, PS 或 Int-DS)·能夠很清晰地同時(shí)展現(xiàn)一個(gè)組合系統(tǒng)內(nèi)的順序組件和并行組件。 包含框可以清晰地表明當(dāng)一個(gè)父系統(tǒng)變成非活躍狀態(tài)或者被銷毀時(shí),它所有的組件都會(huì)變成非活躍狀態(tài)或者被銷毀。 結(jié)束點(diǎn)可以清楚地表明一個(gè)組合子系統(tǒng)的內(nèi)部操作會(huì)如何影響它的父系統(tǒng)改變當(dāng)前階段的方式。 一個(gè)組合系統(tǒng)里只有關(guān)鍵的單元才被畫出來(lái)。而階段機(jī),階段和并行單元都沒(méi)有畫在圖中,因?yàn)樗鼈冊(cè)趫D中對(duì)人們理解系統(tǒng)的行為不是很重要。這樣做會(huì)極大地簡(jiǎn)化了表明一個(gè)系統(tǒng)行為的圖形?!?Ext-DS, PS和Int-DS圖形的一致性會(huì)讓人們更容易學(xué)習(xí)和理解一個(gè)復(fù)雜行為的描述。
·
請(qǐng)注意,上文的描述只給出了一種描述DS,Ext-DS, PS, Int-DS及其組件的方法。然而根據(jù)在這里披露的技術(shù)和給出的指導(dǎo),一個(gè)本領(lǐng)域的技術(shù)人員可以很容易明白,只要保持以下關(guān)鍵點(diǎn)不變,可以用各種圖形表示方法來(lái)表示與本發(fā)明一致的機(jī)制 一個(gè)組合的DS用一個(gè)包含框表示,包含框里包含了它的組件,比如順序的子DS,并行的子DS,初始階段,空階段,結(jié)束點(diǎn),遷移箭頭,生成箭頭以及交流鏈接等。 組合DS的包含框里的每一種組件必須要能夠在視覺上彼此區(qū)分; 一個(gè)簡(jiǎn)單PS的包含框里包含一個(gè)Ext-DS組件和一個(gè)Int-DS組件,并且它們能在視覺上彼此區(qū)分;預(yù)定義的事件類型有些系統(tǒng)需要在PS —變成活躍狀態(tài)時(shí)就執(zhí)行某一個(gè)Int-DS的動(dòng)作。本發(fā)明支持一個(gè)預(yù)定義的“開始”事件,每當(dāng)一個(gè)PS剛剛變成活躍狀態(tài)時(shí),這個(gè)事件就會(huì)被分發(fā)給這個(gè)PS0圖21中的一個(gè)組合PS范例2100包含一個(gè)用“開始”事件作為其Ext-DS 2102的簡(jiǎn)單的子PS2101。當(dāng)組合PS2100變成活躍狀態(tài)時(shí),它所有的并行子PS也會(huì)變成活躍狀態(tài)。因此,與“開始”事件對(duì)應(yīng)的Int-DS會(huì)在組合PS 2100變成活躍狀態(tài)后立即被執(zhí)行。有些系統(tǒng)需要在PS變成非活躍狀態(tài)前一瞬間執(zhí)行某一個(gè)Int-DS的動(dòng)作。本發(fā)明支持一個(gè)預(yù)定義的“結(jié)束”事件,每當(dāng)一個(gè)PS即將變成非活躍狀態(tài)時(shí),這個(gè)事件就會(huì)被分發(fā)給這個(gè)PS。圖21中的一個(gè)組合PS范例2100包含一個(gè)把“結(jié)束”事件作為其Ext-DS 2105的簡(jiǎn)單的子PS 2104。當(dāng)組合PS 2100變成非活躍狀態(tài)時(shí),它所有的并行子PS也會(huì)變成非活躍狀態(tài)。因此,與“結(jié)束”事件對(duì)應(yīng)的Int-DS會(huì)在這個(gè)組合PS 2100變成非活躍狀態(tài)前一瞬間立即被執(zhí)行。預(yù)定義的“開始”和“結(jié)束”事件的好處在于· UML狀態(tài)圖需要提供額外的特殊機(jī)制才能實(shí)現(xiàn)一個(gè)狀態(tài)的開始動(dòng)作和結(jié)束動(dòng)作,而有了“開始”和“結(jié)束”事件類型,用同一個(gè)簡(jiǎn)單的PS機(jī)制就可以用來(lái)實(shí)現(xiàn)同樣的功能。因此用戶在本發(fā)明中不需要學(xué)習(xí)額外的特殊機(jī)制。 在有些時(shí)候需要把某個(gè)特定的Int-DS與一個(gè)Ext-DS分離開來(lái)。比如,在根據(jù)協(xié)議推導(dǎo)參與者PS時(shí)(這一部分本發(fā)明后面會(huì)有進(jìn)一步描述),參與者PS最好能保持和協(xié)議同一樣的組合結(jié)構(gòu)。以圖39中的x-server的參與者PS為例,它應(yīng)該具有和圖38所示協(xié)議“協(xié)議O”一樣的組合結(jié)構(gòu)。然而,如果尚未定義的Ext-DS “?? ”3905并沒(méi)需要接收一個(gè)額外的向內(nèi)的事件,Int-DS “答復(fù)O” 3906就只得和Ext-DS “請(qǐng)求O” 3902綁定在一起,這樣就破壞了同樣的組合結(jié)構(gòu)(如圖22所示)。但是如果為尚未定義的Ext-DS “?? ”加上了一個(gè)“開始”事件,則同樣的組合結(jié)構(gòu)可以得到保持(如圖23所示)。實(shí)現(xiàn)中的問(wèn)題一些DS,Ext-DS, PS和Int- DS的屬性會(huì)在運(yùn)行時(shí)刻頻繁改變,然而有些靜態(tài)的設(shè)計(jì)階段的屬性則在整個(gè)生命周期都不會(huì)變化。另外,同一種類型在運(yùn)行時(shí)也可以有多個(gè)實(shí)例。因此把這些類或類型結(jié)構(gòu)中的設(shè)計(jì)時(shí)屬性與實(shí)例結(jié)構(gòu)中的運(yùn)行時(shí)屬性分離開是有意義。在本專利的一種實(shí)施例中,一個(gè)簡(jiǎn)單DS的實(shí)例結(jié)構(gòu)2402包含有一個(gè)指向它的類型結(jié)構(gòu)2400的指針或引用2403以及一個(gè)結(jié)果組件2404(如圖24所示)。一個(gè)簡(jiǎn)單DS的類型結(jié)構(gòu)2400包含一個(gè)行為類型的組件2401。如圖24所示,可以有多個(gè)簡(jiǎn)單DS的實(shí)例共享同一個(gè)簡(jiǎn)單DS的類型。圖25用UML類圖來(lái)表示同一個(gè)簡(jiǎn)單DS的類型結(jié)構(gòu)和實(shí)例結(jié)構(gòu)。在本專利的一種實(shí)施例中,一個(gè)簡(jiǎn)單Ext-DS的實(shí)例結(jié)構(gòu)包含一個(gè)指向它的類型結(jié)構(gòu)的指針或弓I用以及一個(gè)結(jié)果組件(如圖26所示)。一個(gè)簡(jiǎn)單Ext-DS的類型結(jié)構(gòu)包含一個(gè)事件類型的組件。如圖26所示,可以有多個(gè)簡(jiǎn)單Ext-DS的實(shí)例共享同一個(gè)簡(jiǎn)單Ext-DS的類型。圖27用UML類圖來(lái)表示同一個(gè)簡(jiǎn)單Ext-DS的類型結(jié)構(gòu)和實(shí)例結(jié)構(gòu)。在本專利的一種實(shí)施例中,一個(gè)簡(jiǎn)單PS的實(shí)例結(jié)構(gòu)包含一個(gè)指向它的類型結(jié)構(gòu)的指針或弓I用以及一個(gè)結(jié)果組件(如圖28所示)。一個(gè)簡(jiǎn)單PS的類型結(jié)構(gòu)包含一個(gè)Ext-DS類型組件(它可以是簡(jiǎn)單的或者組合的)和一個(gè)Int-DS類型組件(它可以是簡(jiǎn)單的或者組合的)。如圖28所示,可以有多個(gè)簡(jiǎn)單PS的實(shí)例共享同一個(gè)簡(jiǎn)單PS的類型。圖29用UML類圖來(lái)表示同一個(gè)簡(jiǎn)單PS的類型結(jié)構(gòu)和實(shí)例結(jié)構(gòu)。在本專利的一個(gè)實(shí)施例中,一個(gè)簡(jiǎn)單Int-DS的實(shí)例結(jié)構(gòu)包含一個(gè)指向它的類型結(jié)構(gòu)的指針或引用和一個(gè)結(jié)果組件(如圖30所示)。一個(gè)簡(jiǎn)單Int-DS的類型結(jié)構(gòu)包含一個(gè)動(dòng)作類型組件,它可以是一段代碼,一個(gè)函數(shù)(對(duì)C語(yǔ)言這樣的面向函數(shù)程序語(yǔ)言而言)或者一個(gè)方法(對(duì)JAVA這樣的面向?qū)ο蟪绦蛘Z(yǔ)言而言),甚至可以是一個(gè)腳本(對(duì)LinuxShell這樣的腳本語(yǔ)言而言)。如圖30所示,可以有多個(gè)簡(jiǎn)單Int-DS的實(shí)例共享同一個(gè)簡(jiǎn)單Int-DS的類型。圖31用UML類圖來(lái)表示同一個(gè)簡(jiǎn)單Int-DS的類型結(jié)構(gòu)和實(shí)例結(jié)構(gòu)。組合DS類型和實(shí)例如圖32A所示,模型I的組合DS的類型3200包含有若干個(gè)階段機(jī)類型3201,以及一個(gè)如圖32A所示的結(jié)束情況集3202或者一個(gè)如圖32B所示的結(jié)束函數(shù)3218。如果定義了一個(gè)結(jié)束條件集,那么它至少包含一個(gè)結(jié)束情況,而且每一個(gè)結(jié)束情況都包含一對(duì)結(jié)束條件和結(jié)束代碼,其中結(jié)束條件描述在何種情況下一個(gè)組合DS類型的實(shí)例會(huì)結(jié)束,而結(jié)束代碼則用來(lái)標(biāo)識(shí)對(duì)應(yīng)的結(jié)束條件。如果定義了一個(gè)結(jié)束函數(shù),這結(jié)束函數(shù)會(huì)返回一結(jié)束代碼以標(biāo)明在何種情況下一個(gè)組合DS類型的實(shí)例會(huì)結(jié)束。每個(gè)階段機(jī)類型有一個(gè)靜態(tài)實(shí)例數(shù)3203(可省略的)以及一個(gè)或多個(gè)階段類型3204。每個(gè)階段類型有一個(gè)子DS類型3205,以及零個(gè)或多個(gè)遷移3206。每個(gè)遷移有一個(gè)遷移條件3207和一個(gè)目標(biāo)階段3208。每個(gè)子DS類型可以是簡(jiǎn)單DS類型或者組合DS類型。如果在一個(gè)階段機(jī)類型中定義了靜態(tài)實(shí)例數(shù),它定義了這個(gè)階段機(jī)類型的靜態(tài)實(shí)例個(gè)數(shù)。如果沒(méi)有定義靜態(tài)實(shí)例數(shù),這個(gè)階段機(jī)類型則默認(rèn)僅有一個(gè)靜態(tài)實(shí)例。請(qǐng)注意,每一個(gè)階段機(jī)類型都可以是順序的或者并行的階段機(jī)。如前文所述,一個(gè)并行的階段機(jī)類型只有一個(gè)階段類型,如圖15A和圖15B所示.一個(gè)模型I的組合DS的實(shí)例結(jié)構(gòu)3209有一個(gè)對(duì)它的DS類型結(jié)構(gòu)的引用3210,若干個(gè)階段機(jī)3211,以及一個(gè)結(jié)果3212。每個(gè)階段機(jī)有一個(gè)對(duì)它的階段機(jī)類型結(jié)構(gòu)的引用3213,若干個(gè)階段3214以及一個(gè)當(dāng)前階段3215。每個(gè)階段有一個(gè)對(duì)它的階段類型結(jié)構(gòu)的引用3216和一個(gè)子DS實(shí)例結(jié)構(gòu)3217。這個(gè)子DS實(shí)例可以是簡(jiǎn)單的或者組合的。如果它是簡(jiǎn)單的,如圖24中2402所示,那么它包含一個(gè)對(duì)它的簡(jiǎn)單DS類型2400的引用2403,以及一個(gè)結(jié)果2404用于記錄執(zhí)行它的簡(jiǎn)單DS類型的行為2401的成果。如果這個(gè)子DS實(shí)例是組合的,則它的結(jié)構(gòu)和圖中3209 —樣。請(qǐng)注意,圖32A,32B及32C中實(shí)例結(jié)構(gòu)的陰影表示可以有多個(gè)組合DS的實(shí)例來(lái)共享同一個(gè)組合DS的類型。圖35是用UML類圖表示的同一個(gè)組合DS的類型結(jié)構(gòu)和實(shí)例結(jié)構(gòu)。作為一個(gè)模型I的組合DS的一個(gè)特例,一個(gè)模型I的組合Ext-DS也可以類似地分為類型結(jié)構(gòu)和實(shí)例結(jié)構(gòu)兩部分。在用“Ext-DS”替代每一個(gè)“DS”以后,圖32A或32B中所示的組合DS的類型結(jié)構(gòu)、實(shí)例結(jié)構(gòu)即變成一個(gè)模型I的組合Ext-DS的類型結(jié)構(gòu)、實(shí)例結(jié)構(gòu)。作為一個(gè)模型I的組合DS的特例,一個(gè)模型I的組合PS也可以類似地分為類型 結(jié)構(gòu)和實(shí)例結(jié)構(gòu)兩部分。因?yàn)橐粋€(gè)模型I的組合PS的類型結(jié)構(gòu)和組合DS的類型結(jié)構(gòu)完全相同,在用“PS”替代每一個(gè)“DS”以后,圖32A或32B中所示的即變成一個(gè)模型I的組合PS的類型。請(qǐng)注意,一個(gè)階段類型中的子PS類型可以是簡(jiǎn)單的或者組合的。圖32C表示一個(gè)包含一個(gè)簡(jiǎn)單PS類型3220的組合PS類型3219。這個(gè)簡(jiǎn)單的PS類型包括一個(gè)Ext-DS類型用于描述待發(fā)生的外部事件和一個(gè)Int-DS類型用于描述為響應(yīng)所發(fā)生的所述外部事件而執(zhí)行的內(nèi)部動(dòng)作。在用“PS”替代每一個(gè)“DS”以后,圖32A或32B所示的組合DS的實(shí)例即變成一個(gè)模型I的組合PS的實(shí)例。請(qǐng)注意,一個(gè)階段中的子PS可以是簡(jiǎn)單的或者組合的。如圖32C中表示,一個(gè)組合PS實(shí)例3221包含了一個(gè)簡(jiǎn)單PS實(shí)例3222。這個(gè)簡(jiǎn)單的PS實(shí)例包括了一個(gè)Ext-DS實(shí)例和一個(gè)Int-DS實(shí)例。圖36表示了如何用一個(gè)包含了一個(gè)默認(rèn)結(jié)束情況集和一個(gè)階段機(jī)類型“0”3601的組合PS的類型結(jié)構(gòu)3600來(lái)定義圖23中的“x-server”參與者PS類型。階段機(jī)類型“O”有一個(gè)靜態(tài)實(shí)例數(shù),和三個(gè)階段類型。它們是“初始” 3615,“O” 3602和“I” 3605。它的靜態(tài)實(shí)例數(shù)取值為1,表明當(dāng)這個(gè)組合PS生成時(shí),會(huì)生成一個(gè)這種類型階段機(jī)的實(shí)例。階段類型“初始”3615是一個(gè)帶有遷移3616的初始階段。遷移3616的遷移條件3617永遠(yuǎn)為真,它的目標(biāo)階段是類型“O”的階段3618。請(qǐng)注意,圖36中沒(méi)有畫出空的順序子DS。階段類型“O” 3602有一個(gè)遷移3603和一個(gè)子PS類型3604。而子PS類型3604以“請(qǐng)求O”作為它的Ext-DS類型,以“?? ”作為它的Int-DS類型。階段類型“I” 3605把一個(gè)空階段作為它的目標(biāo)階段3606,并且在它的子Ext-DS類型3607中定義了一個(gè)預(yù)定義的“開始”事件類型。圖36還表示了一個(gè)“X-server”參與者PS類型的實(shí)例3608。這個(gè)實(shí)例有一個(gè)結(jié)果,一個(gè)指向它的類型3600的引用3609,和一個(gè)階段機(jī)“O”3610。階段機(jī)“O” 3610包含有一個(gè)指向它的階段機(jī)類型“0”3601的引用,一個(gè)當(dāng)前階段以及兩個(gè)階段,即階段“0”3611和階段“1”3613。階段“O”有一個(gè)指向它的階段類型“0”3602的引用以及一個(gè)子PS 3612。子PS 3612包含了一個(gè)指向它的PS類型3604的引用及一個(gè)結(jié)果。同樣地,作為一個(gè)模型I的組合DS的特例,一個(gè)模型I的組合Int-DS也可以類似地分為類型結(jié)構(gòu)和實(shí)例結(jié)構(gòu)兩部分。在用“Int-DS”替代每一個(gè)“DS”以后,圖32A或圖32B所示的組合DS的類型結(jié)構(gòu)、實(shí)例結(jié)構(gòu)即變成一個(gè)模型I的組合Int-DS的類型結(jié)構(gòu)、實(shí)例結(jié)構(gòu)。盡管把類型信息從實(shí)例信息中抽象 出來(lái)了,但只要在運(yùn)行時(shí)刻能夠訪問(wèn)到這些類型信息和實(shí)例信息,在前文所描述的那些執(zhí)行函數(shù)都還是可以照用的,包括一個(gè)處于活躍狀態(tài)的Ext-DS的事件檢查函數(shù),一個(gè)處于活躍狀態(tài)的PS的反應(yīng)函數(shù),以及一個(gè)處于活躍狀態(tài)的Int-DS的動(dòng)作執(zhí)行函數(shù)。盡管把實(shí)例結(jié)構(gòu)與類型結(jié)構(gòu)清晰地分割開有它的好處,但具體實(shí)現(xiàn)時(shí)也可以選擇把二者聯(lián)合在一起或者按某種方式進(jìn)行混合。本發(fā)明并不會(huì)限制具體的實(shí)現(xiàn)方法。在本發(fā)明前面描述的那些執(zhí)行函數(shù)可能需要在執(zhí)行過(guò)程中保存一些臨時(shí)的中間數(shù)據(jù)。在本發(fā)明的一種實(shí)施例中,除了這些定義在實(shí)例結(jié)構(gòu)中的數(shù)據(jù)以外,一個(gè)DS組件的實(shí)例結(jié)構(gòu)中還可以加上一些本地使用的數(shù)據(jù)。本發(fā)明包括了對(duì)一個(gè)應(yīng)用軟件的整個(gè)開發(fā)生命周期都有用處的方法和組件。在本發(fā)明的一種實(shí)施例中,可以用一個(gè)設(shè)計(jì)工具來(lái)設(shè)計(jì)一個(gè)基于DS組件的應(yīng)用軟件,然后用代碼生成器來(lái)生成準(zhǔn)備在運(yùn)行平臺(tái)上執(zhí)行的機(jī)器可讀的二進(jìn)制代碼。如圖33所示,設(shè)計(jì)工具的產(chǎn)出是DS類型定義,而這個(gè)DS類型定義可以傳送到代碼生成器或者保存在存儲(chǔ)設(shè)備中供代碼生成器以后訪問(wèn)。代碼生成器的產(chǎn)出是代表DS類型的一組二進(jìn)制代碼,這些二進(jìn)制代碼可以被一個(gè)運(yùn)行平臺(tái)裝載到內(nèi)存中去執(zhí)行。這個(gè)運(yùn)行平臺(tái)也可以提供一些為實(shí)現(xiàn)基本動(dòng)作或已存在的Int-DS的所需要的二進(jìn)制代碼。這個(gè)設(shè)計(jì)工具可以支持圖形用戶界面(GUI)以便設(shè)計(jì)者用前面描述的圖形語(yǔ)言來(lái)定義DS組件。在設(shè)計(jì)流程結(jié)束后,設(shè)計(jì)工具會(huì)生成一組用戶定義的DS類型或者DS類的詳細(xì)說(shuō)明,比如PS類型,Ext-DS類型和Int-DS類型。在設(shè)計(jì)階段,設(shè)計(jì)工具只會(huì)涉及類型信息而不需要涉及實(shí)例結(jié)構(gòu)。一個(gè)代碼生成器讀入這些保存在存儲(chǔ)設(shè)備上的DS類型詳細(xì)說(shuō)明,然后生成代表DS類型的二進(jìn)制代碼。這個(gè)代碼生成器的輸出可以保存在存儲(chǔ)設(shè)備上,也可以直接傳送給運(yùn)行平臺(tái)去執(zhí)行。在執(zhí)行過(guò)程中,運(yùn)行平臺(tái)把這些代表DS類型的二進(jìn)制代碼裝載到內(nèi)存中,生成本發(fā)明中描述的實(shí)例結(jié)構(gòu)并引用它們的類型結(jié)構(gòu)。這些DS組件的實(shí)例是根據(jù)DS類型詳細(xì)說(shuō)明中的信息來(lái)生成并進(jìn)行初始化的。這些DS組件也能夠根據(jù)本發(fā)明所描述的過(guò)程動(dòng)態(tài)地變成活躍狀態(tài)和非活躍狀態(tài)以完成它們各自的功能。在本發(fā)明的一種實(shí)施例中,一個(gè)運(yùn)行平臺(tái)可以實(shí)現(xiàn)上面所述的動(dòng)作執(zhí)行函數(shù)以便處理每一個(gè)用Int-DS類型來(lái)定義的組合Int-DS,而在另一種實(shí)施例中,每一個(gè)組合的Int-DS類型也可以被編譯成一個(gè)底層、而更高效的執(zhí)行代碼,然后再在一個(gè)運(yùn)行平臺(tái)上運(yùn)行。一種底層的代碼可以是能夠被虛擬機(jī)直接執(zhí)行的字節(jié)碼格式,比如可以被JAVA虛擬機(jī)執(zhí)行的JAVA字節(jié)碼。還有另一種底層的代碼可以是一種程序語(yǔ)言(比如C/JAVA)的目標(biāo)代碼。在這種情況下,可以先為每個(gè)組合Int-DS類型生成相應(yīng)的程序語(yǔ)言源代碼,然后再編譯成目標(biāo)代碼。本發(fā)明中描述的類型結(jié)構(gòu)和實(shí)例結(jié)構(gòu)是抽象的結(jié)構(gòu),也就是說(shuō)它們并不依賴于某一種具體的實(shí)現(xiàn)。當(dāng)實(shí)現(xiàn)在一個(gè)工具里,這些抽象的結(jié)構(gòu)需要映射到工具所實(shí)現(xiàn)的各種具體結(jié)構(gòu)上去。比如,這 些DS組件可以按照一種具體的外部格式保存在存儲(chǔ)設(shè)備中,而按照另一種具體的內(nèi)部格式裝載到內(nèi)存中進(jìn)行處理。這種具體的外部格式可以是下面任何一種1) 一種程序語(yǔ)言,比如C或者JAVA ;2) 一種數(shù)據(jù)描述語(yǔ)言,比如ASN. I (AbstractSyntax Notation One) ;3) 一種基于XML的語(yǔ)言;或者4) 一個(gè)可視化設(shè)計(jì)工具可以支持的任何表示方法。具體的內(nèi)部格式則可以是一種數(shù)據(jù)單元的形式,而這種數(shù)據(jù)單元可以用數(shù)據(jù)描述語(yǔ)言,或者用基于XML的語(yǔ)言,或者用腳本語(yǔ)言,或者用像C或JAVA這樣的程序語(yǔ)言,以及任何程序語(yǔ)言的二進(jìn)制代碼或機(jī)器碼來(lái)表示。實(shí)現(xiàn)本發(fā)明所描述的抽象結(jié)構(gòu)時(shí),并沒(méi)有必要一字不變地照搬抽象結(jié)構(gòu)的定義。比如階段機(jī)類型或并行單元類型中的“靜態(tài)實(shí)例數(shù)”就可以采用一個(gè)標(biāo)識(shí)的形式來(lái)指明當(dāng)一個(gè)階段機(jī)的父組合DS生成時(shí),是否會(huì)靜態(tài)地生成這個(gè)階段機(jī)的靜態(tài)實(shí)例。這個(gè)標(biāo)識(shí)甚至可以用另一個(gè)變量的特殊字位來(lái)實(shí)現(xiàn)。另外一個(gè)例子是一個(gè)DS實(shí)例結(jié)構(gòu)中的結(jié)果,它可以被實(shí)現(xiàn)為一個(gè)整數(shù),或者一個(gè)包含各種結(jié)果信息的復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。簡(jiǎn)而言之,作為本發(fā)明的一種實(shí)施例的具體格式不需要完全參照本文所描述的抽象結(jié)構(gòu)。盡管本發(fā)明用PS,Ext_DS和Int-DS來(lái)描述一個(gè)與其他系統(tǒng)有交流的系統(tǒng)的行為,但并不需要同時(shí)都用到Ext-DS,PS和Int-DS,它們中的任何一個(gè)都可以被替換成使用現(xiàn)有的或者未來(lái)的行為描述技術(shù),腳本語(yǔ)言或程序語(yǔ)言所定義的組件。在本發(fā)明的另外一種實(shí)施例中,只在設(shè)計(jì)階段和代碼生成階段用到DS組件。如圖34所示,一個(gè)應(yīng)用系統(tǒng)可以基于DS組件來(lái)設(shè)計(jì),然而一個(gè)代碼生成器可以將輸出的應(yīng)用系統(tǒng)的DS類型用來(lái)為另一個(gè)不支持DS組件的運(yùn)行平臺(tái)生成代碼。這個(gè)代碼生成器只要遵循某種合適的方式把本發(fā)明描述的DS類型結(jié)構(gòu)映射為運(yùn)行平臺(tái)所支持的另一種機(jī)制就行了。設(shè)計(jì)方法要設(shè)計(jì)一個(gè)分布式的、彼此有交流的多個(gè)應(yīng)用系統(tǒng)是一個(gè)有挑戰(zhàn)性的任務(wù)。如果我們分別地來(lái)設(shè)計(jì)兩個(gè)交流的應(yīng)用系統(tǒng),要確保它們的行為完全協(xié)調(diào)是比較困難的。一個(gè)更好的辦法是,先定義這些交流系統(tǒng)間的通訊協(xié)議,然后用一種系統(tǒng)化的、機(jī)械的方法把這些協(xié)議規(guī)范轉(zhuǎn)換成每一方的行為規(guī)范,從而避免了設(shè)計(jì)過(guò)程中產(chǎn)生不一致的可能性。在本發(fā)明的一種實(shí)施例中,一個(gè)應(yīng)用系統(tǒng)可以扮演多個(gè)角色,而且每個(gè)角色可能需要同時(shí)和多方進(jìn)行交流。為了清楚起見,本發(fā)明用術(shù)語(yǔ)“角色PS”來(lái)特指這個(gè)應(yīng)用系統(tǒng)所扮演的角色的行為。對(duì)每一個(gè)協(xié)議而言都會(huì)有兩個(gè)交流參與方?!皡⑴c者PS”這個(gè)術(shù)語(yǔ)指的是一個(gè)交流參與者的那部分行為。因此一個(gè)系統(tǒng)中一般有多個(gè)“角色PS”,而每個(gè)角色PS又會(huì)有多個(gè)參與者PS,其中每個(gè)參與者PS對(duì)應(yīng)了該角色所支持的一個(gè)協(xié)議。圖8所示例子中“系統(tǒng)O” 800和“系統(tǒng)I” 801,“系統(tǒng)2” 802及“系統(tǒng)3” 803之間有交流。“系統(tǒng)O”扮演兩個(gè)角色,即“角色PSO” 804和“角色PSI” 805。其中“角色PSO”會(huì)與“系統(tǒng)I”和“系統(tǒng)2”交流,而“角色PS1”會(huì)與“系統(tǒng)3”交流。
為了說(shuō)明這個(gè)理想的設(shè)計(jì)過(guò)程,我們使用了一個(gè)應(yīng)用系統(tǒng)的例子“X”。圖37表明系統(tǒng)“X”有一個(gè)角色PS同時(shí)與一個(gè)客戶端和一個(gè)服務(wù)器端有交流?!癤”內(nèi)部有一個(gè)參與者PS “x-server”通過(guò)協(xié)議“協(xié)議O”和客戶端進(jìn)行交流,而另一個(gè)參與者PS “X-client”通過(guò)協(xié)議“協(xié)議I”和服務(wù)器端進(jìn)行交流。遵循這個(gè)設(shè)計(jì)過(guò)程,我們首先定義協(xié)議“協(xié)議O”和“協(xié)議1”,然后我們把“協(xié)議O”轉(zhuǎn)換成參與者PS “X-server”,而把“協(xié)議I”轉(zhuǎn)換成參與者PS “X-client”。最后,我們把 “X-server” 和 “X-client” 合并成一個(gè)角色 PS “X”.。本發(fā)明最提倡的設(shè)計(jì)過(guò)程描述如下
第一步,為一個(gè)角色可能與之交流的每一個(gè)對(duì)端系統(tǒng)都定義一個(gè)協(xié)議;這個(gè)協(xié)議是用一個(gè)DS類型來(lái)定義,它包含了該角色和一個(gè)對(duì)端系統(tǒng)間兩個(gè)方向上可能發(fā)生的所有外部事件。 第二步,遵循一個(gè)轉(zhuǎn)換方法,把第一步得到的每一個(gè)協(xié)議轉(zhuǎn)換成該角色的一個(gè)參與者PS ; 第三步,遵循一個(gè)合并方法,把第二步得到的同一個(gè)角色的所有參與者PS合并成一個(gè)角色PS ; 最后一步,通過(guò)增加一些內(nèi)部的交流和內(nèi)部的主動(dòng)式行為,讓這個(gè)角色的行為規(guī)范變得完整。每一個(gè)這些內(nèi)部交流都用一個(gè)DS類型來(lái)定義,而每一個(gè)這些內(nèi)部主動(dòng)式行為都用一個(gè)Int-DS類型來(lái)定義。 當(dāng)設(shè)計(jì)有變化時(shí),可以重復(fù)以上這幾個(gè)步驟。在本發(fā)明中,一個(gè)協(xié)議是用一個(gè)DS類型來(lái)定義,它只描述了一個(gè)參與者要接收的向內(nèi)事件和要發(fā)送的向外事件(其他與收發(fā)事件無(wú)關(guān)的內(nèi)部活動(dòng)都可以被忽略)。這個(gè)協(xié)議DS類型也可以被視為一個(gè)處于通訊雙方中間,能接收雙向事件的一個(gè)實(shí)體的行為。圖38描述了用DS類型定義的協(xié)議例子“協(xié)議O”和“協(xié)議I”?!皡f(xié)議O”規(guī)定客戶端首先向X-server發(fā)送一個(gè)“請(qǐng)求O”的事件,然后“X-server”回送一個(gè)“答復(fù)O”事件?!皡f(xié)議I”規(guī)定“X-client”首先向服務(wù)器發(fā)送一個(gè)“請(qǐng)求I”事件,然后服務(wù)器回送一個(gè)“答復(fù)I”事件。請(qǐng)注意,“一”和“一”符號(hào)是用來(lái)使得在圖中更容易看出事件流的方向。把一個(gè)描述協(xié)議的DS類型轉(zhuǎn)換為一個(gè)描述參與者的反應(yīng)式行為的PS類型的轉(zhuǎn)換方法說(shuō)明如下 對(duì)協(xié)議DS類型中描述每一個(gè)參與者要接收事件的向內(nèi)的簡(jiǎn)單子DS類型,用一個(gè)簡(jiǎn)單的子PS類型來(lái)替代這個(gè)簡(jiǎn)單子DS類型,這個(gè)簡(jiǎn)單的子PS類型把這個(gè)向內(nèi)的簡(jiǎn)單子DS類型作為它的Ext-DS類型,并包括一個(gè)尚待定義的Int-DS類型; 對(duì)協(xié)議DS類型中描述每一個(gè)參與者要發(fā)送事件的向外的簡(jiǎn)單子DS類型,用一個(gè)簡(jiǎn)單的子PS類型來(lái)替代這個(gè)簡(jiǎn)單子DS類型,這個(gè)簡(jiǎn)單的子PS類型包括一個(gè)尚待定義的Ext-DS類型,并把這個(gè)向外的簡(jiǎn)單子DS類型作為它的Int-DS類型;基于上面描述的轉(zhuǎn)換方法,可以按照下面的步驟得到X-server的參與者PS3900(如圖39所示) 因?yàn)椤罢?qǐng)求O”對(duì)“X-server”而言是一個(gè)向內(nèi)的簡(jiǎn)單子DS類型,所以它被替換成一個(gè)簡(jiǎn)單的子PS類型3901,這個(gè)簡(jiǎn)單的子PS類型3901把“請(qǐng)求O”作為它的Ext-DS類型3902,并包含一個(gè)尚待定義的Int-DS類型3903(在圖39中用“?? ”表示)。 因?yàn)椤按饛?fù)O”對(duì)“X-server”而言是一個(gè)向外的簡(jiǎn)單子DS類型,所以它被替換成了一個(gè)簡(jiǎn)單的子PS類型3904,這個(gè)簡(jiǎn)單的子PS類型3904包括一個(gè)尚待定義的Ext-DS類型3905 (在圖39中用“ ?? ”表示),并把這個(gè)向外的簡(jiǎn)單子DS類型“答復(fù)O”作為它的Int-DS 類型 3906。基于上面描述的轉(zhuǎn)換方法,可以按照下面的步驟得到X-client的參與者PS4000(如圖40所示) 因?yàn)椤罢?qǐng)求I”對(duì)“X-client”而言是一個(gè)向外的簡(jiǎn)單子DS類型,所以它被替換成了一個(gè)簡(jiǎn)單的子PS類型4001,這個(gè)簡(jiǎn)單的子PS類型4001包括一個(gè)尚待定義的Ext-DS類型4002,并把這個(gè)向外的簡(jiǎn)單子DS類型“請(qǐng)求I”作為它的Int-DS類型4003。 因?yàn)椤按饛?fù)I”對(duì)“X-client”而言是一個(gè)向內(nèi)的簡(jiǎn)單子DS類型,所以它被替換成一個(gè)簡(jiǎn)單的子PS類型4004,這個(gè)簡(jiǎn)單的子PS類型4004把“答復(fù)I”作為它的Ext-DS類型4005,并包含一個(gè)尚待定義的Int-DS類型4006。在本專利的一種實(shí)施例中,也可以不用圖38、39和40所示的DS類型的圖形語(yǔ)言 而直接在DS類型的數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上實(shí)現(xiàn)上述轉(zhuǎn)換方法。把所得到的屬于同一個(gè)角色的所有參與者PS并成一個(gè)角色PS的合并方法是先定義一個(gè)父PS,然后把這些參與者PS都作為它的并行子PS。圖42表示出如何將x-server和X-client的參與者PS合并成一個(gè)角色PS “X”。在本專利的一種實(shí)施例中,也可以不用圖42所示的PS類型的圖形語(yǔ)言而直接在參與者PS類型的數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上實(shí)現(xiàn)這個(gè)合并方法。這樣得到的角色PS —般是不完整的,因?yàn)闀?huì)有很多尚待定義的Ext-DS和Int-DS。下一步就是用內(nèi)部的交流和行為來(lái)替換這些尚待定義的Ext-DS和Int-DS。我們假定“X”系統(tǒng)的行為是在收到“請(qǐng)求O”以后,X-server會(huì)完成部分的工作,然后通過(guò)發(fā)送“請(qǐng)求I”給服務(wù)器,讓服務(wù)器完成余下的工作。我們還假定在收到來(lái)自服務(wù)器的“答復(fù)I”后,“X-client”會(huì)把服務(wù)器的工作結(jié)果通知”x-server”,然后由“x-server”把“答復(fù)O”送回給客戶端。為了達(dá)成這些內(nèi)部交流的需要,X-server可以發(fā)送一個(gè)事件“aa”給X-client以請(qǐng)求服務(wù)器完成余下的工作。然后X-client可以發(fā)送一個(gè)事件“bb”給X-server以通知服務(wù)器的工作結(jié)果。在替換了這些尚待定義的Ext-DS和Int-DS后,新的角色PS如圖43所示。這個(gè)例子用了兩個(gè)非常簡(jiǎn)單的內(nèi)部協(xié)議(每個(gè)協(xié)議只有一個(gè)事件),比如“aa”和“bb”,來(lái)完成這項(xiàng)工作。本發(fā)明還支持在兩個(gè)內(nèi)部子PS間用一個(gè)組合的DS來(lái)定義復(fù)雜的協(xié)議。事實(shí)上,可以用同一個(gè)例子來(lái)舉例說(shuō)明這一點(diǎn)。圖44描述的是同一個(gè)例子,只是內(nèi)部協(xié)議用一個(gè)組合的DS “協(xié)議2”(如圖41所示)來(lái)定義。使用本發(fā)明描述的各種設(shè)計(jì)方法的好處在于 通過(guò)機(jī)械地由一個(gè)外部行為推導(dǎo)出內(nèi)部的反應(yīng)式行為,本發(fā)明可以確保協(xié)議和通訊各方是一致的。籲因?yàn)镋xt-DS,Int-DS和PS都是DS的特例,并且共享同樣的組合結(jié)構(gòu),所以很容易識(shí)別哪些是在機(jī)械式推導(dǎo)出的反應(yīng)式行為之上增加的內(nèi)部行為。 通過(guò)從外部行為機(jī)械地推導(dǎo)出內(nèi)部反應(yīng)式行為,可以極大地減少描述復(fù)雜行為
的工作量。
上述的這些設(shè)計(jì)方法可以擴(kuò)展到其他基于節(jié)點(diǎn)和鏈接的建模語(yǔ)言(比如UML活動(dòng)圖,BPMN, XPDL, WS-⑶L和BPEL或者這些技術(shù)的結(jié)合)。相對(duì)應(yīng)于本發(fā)明中的一個(gè)組合DS的等同物,在UML活動(dòng)圖中稱為一個(gè)活動(dòng)(activity),在BPMN,XPDL和BPEL中稱為一個(gè)流程(process),在WS-Q)L稱為一個(gè)流程編排(choreography)。為了簡(jiǎn)化描述,我們將這些組合DS的等同物都稱作組合活動(dòng)。相對(duì)應(yīng)于本發(fā)明中的一個(gè)簡(jiǎn)單DS的等同物,在UML活動(dòng)圖中稱為一個(gè)動(dòng)作(action),在BPMN和XPDL中稱為一個(gè)任務(wù)(task),在BPEL和WS-CDL中稱為一個(gè)活動(dòng)(activity)。它們都將被稱作簡(jiǎn)單活動(dòng)。另外,我們用術(shù)語(yǔ)“活動(dòng)”來(lái)泛稱一個(gè)簡(jiǎn)單的或者組合的活動(dòng)。一個(gè)簡(jiǎn)單的PS可以映射到這些建模語(yǔ)言中的一個(gè)反應(yīng)式的組合活動(dòng),這個(gè)組合活動(dòng)包含一個(gè)外部活動(dòng),用于描述待接收的外部事件,以及一個(gè)內(nèi)部活動(dòng),用于描述為響應(yīng)所發(fā)生的這個(gè)外部活動(dòng)而執(zhí)行的內(nèi)部動(dòng)作。因?yàn)橐粋€(gè)組合的PS和一個(gè)組合的DS有相同的結(jié)構(gòu),一個(gè)組合的PS可以被直接映射到一個(gè)組合活動(dòng)。 這些設(shè)計(jì)方法中用到的其他一些組件也被擴(kuò)展得更具通用性,因此它們也可以用于其他行為建模語(yǔ)言。一個(gè)尚待定義的Ext-DS被擴(kuò)展成一個(gè)尚待定義的外部活動(dòng),用于描述要接收某些尚待定義的外部事件的活動(dòng)。而一個(gè)尚待定義的Int-DS被擴(kuò)展成一個(gè)尚待定義的內(nèi)部活動(dòng),用于描述要執(zhí)行某些尚待定義的內(nèi)部動(dòng)作的活動(dòng)。使用了以上這些通用性的構(gòu)件,以上這些設(shè)計(jì)方法可以擴(kuò)展成通用性的方法使用其他行為語(yǔ)言來(lái)做設(shè)計(jì),它的的過(guò)程可以描述如下 第一步是用UML活動(dòng)圖,BPMN, XPDL, WS-CDL或者BPEL的組合活動(dòng)來(lái)描述一個(gè)角色所支持的每一個(gè)協(xié)議。 第二步是使用通用性的轉(zhuǎn)換方法,將每一個(gè)描述協(xié)議的組合活動(dòng)轉(zhuǎn)換成一個(gè)參與者的組合活動(dòng)。 第三步是把那些屬于同一個(gè)角色的參與者組合活動(dòng)合并成一個(gè)用UML活動(dòng)圖,BPMN, XPDL, WS-CDL或者BPEL表示的角色組合活動(dòng)。 第四步是把上一步得到的角色組合活動(dòng)中尚待定義的外部活動(dòng)和尚待定義的內(nèi)部活動(dòng)替換成內(nèi)部的交流和行為,從而使這個(gè)角色的規(guī)范變得完整。一個(gè)協(xié)議可以用UML活動(dòng)圖,BPMN,XPDL, WS-⑶L或者BPEL描述成一個(gè)組合活動(dòng),它包含了一系列只描述交流雙方之間的雙向的外部事件(其他與收發(fā)事件無(wú)關(guān)的活動(dòng)可以被忽略)的簡(jiǎn)單活動(dòng)。因?yàn)檫@些建模語(yǔ)言的每一種都有用于接收外部事件的簡(jiǎn)單活動(dòng),所以一個(gè)協(xié)議可以用一些接收事件的簡(jiǎn)單活動(dòng)來(lái)描述。換言之,這個(gè)協(xié)議組合活動(dòng)可以看作是被用來(lái)描述一個(gè)處于通信雙方中間,能接收兩個(gè)方向事件的一個(gè)實(shí)體的行為。根據(jù)這個(gè)方法,一個(gè)協(xié)議可以用UML活動(dòng)圖的組合活動(dòng)來(lái)定義,并且用“AcceptEventAction”來(lái)接收雙向的外部事件。比如,圖38中用DS類型定義的協(xié)議“協(xié)議0”和“協(xié)議I”可以用UML活動(dòng)圖表示在圖45中。轉(zhuǎn)換成一個(gè)參與者組合活動(dòng)可以用這個(gè)通用性的轉(zhuǎn)換方法把一個(gè)組合活動(dòng)從一個(gè)協(xié)議規(guī)范轉(zhuǎn)換成一個(gè)參與者的行為規(guī)范。這個(gè)方法包括 對(duì)所述組合活動(dòng)中每一個(gè)描述參與者待接收事件的向內(nèi)的簡(jiǎn)單活動(dòng),把這個(gè)向內(nèi)的簡(jiǎn)單活動(dòng)替換成一個(gè)反應(yīng)式的組合活動(dòng),而這個(gè)反應(yīng)式的組合活動(dòng)把所述向內(nèi)的簡(jiǎn)單活動(dòng)作為它的外部活動(dòng),這個(gè)外部活動(dòng)后面跟著一個(gè)尚待定義的內(nèi)部活動(dòng),以描述為響應(yīng)所發(fā)生的向內(nèi)的簡(jiǎn)單活動(dòng)而執(zhí)行的活動(dòng)。 對(duì)所述組合活動(dòng)中每一個(gè)描述參與者待發(fā)送事件的向外的簡(jiǎn)單活動(dòng),把這個(gè)向外的簡(jiǎn)單活動(dòng)替換成一個(gè)反應(yīng)式組合活動(dòng),這個(gè)反應(yīng)式組合活動(dòng)包含一個(gè)尚待定義的外部活動(dòng)用于描述要接收的事件,然后跟著這個(gè)尚待定義的外部活動(dòng)后面,用這個(gè)向外的簡(jiǎn)單活動(dòng)作為它的內(nèi)部活動(dòng),以響應(yīng)所發(fā)生的這個(gè)尚待定義的外部活動(dòng)。圖46是用UML活動(dòng)圖表示的由圖45中“協(xié)議0 ” 4500轉(zhuǎn)換得到的“X-server ”的參與者組合活動(dòng)4600。簡(jiǎn)單活動(dòng)“請(qǐng)求0”4501是一個(gè)向內(nèi)的待接收事件,因此,它被替換成一個(gè)反應(yīng)式的組合活動(dòng)4601,而這個(gè)反應(yīng)式的組合活動(dòng)包含一個(gè)外部活動(dòng)用以接收向內(nèi)的“請(qǐng)求0”事件4602,以及跟在這個(gè)外部活動(dòng)后面的尚待定義的內(nèi)部活動(dòng)4603用以響應(yīng)“請(qǐng)求0”事件。這個(gè)內(nèi)部活動(dòng)可以用UML活動(dòng)圖中的一個(gè)動(dòng)作(action)或一個(gè)活動(dòng)(Activity)來(lái)定義?!皡f(xié)議0”4500中的簡(jiǎn)單活動(dòng)“答復(fù)0”4502是一個(gè)向外的待發(fā)送事件, 因此,它被替換成一個(gè)反應(yīng)式的組合活動(dòng)4604,而這個(gè)反應(yīng)式的組合活動(dòng)包含一個(gè)尚待定義的外部活動(dòng)4605用以接收尚待定義的向內(nèi)事件,以及跟在這個(gè)外部活動(dòng)后面發(fā)送向外的“答復(fù)0”事件4606的內(nèi)部活動(dòng)。這些外部活動(dòng)和內(nèi)部活動(dòng)中的每一個(gè)都可以用一個(gè)動(dòng)作或一個(gè)UML活動(dòng)圖中的活動(dòng)來(lái)定義。圖47是用UML活動(dòng)圖表示的由圖45中“協(xié)議I” 4503轉(zhuǎn)換得到的“X-client”的參與者組合活動(dòng)4700。簡(jiǎn)單活動(dòng)“請(qǐng)求I”4504是一個(gè)向外的待發(fā)送事件,因此,它被替換成一個(gè)反應(yīng)式的組合活動(dòng)4701,而這個(gè)反應(yīng)式的組合活動(dòng)包含一個(gè)尚待定義的外部活動(dòng)4702用以接收尚待定義的向內(nèi)事件,以及跟在這個(gè)外部活動(dòng)后面發(fā)送向外的“請(qǐng)求I”事件4703的內(nèi)部活動(dòng)用以響應(yīng)尚待定義的向內(nèi)事件“?? ”。這些外部活動(dòng)和內(nèi)部活動(dòng)中的每一個(gè)都可以用UML活動(dòng)圖中的一個(gè)動(dòng)作或一個(gè)活動(dòng)來(lái)定義?!皡f(xié)議I”4503中的簡(jiǎn)單活動(dòng)“答復(fù)I” 4505是一個(gè)向內(nèi)的待接收事件,因此,它被替換成一個(gè)反應(yīng)式的組合活動(dòng)4704,而這個(gè)反應(yīng)式的組合活動(dòng)包含一個(gè)外部活動(dòng)4705用以接收向內(nèi)的“答復(fù)I”事件,以及跟在這個(gè)外部活動(dòng)后面的尚待定義的內(nèi)部活動(dòng)4706。這個(gè)外部活動(dòng)可以用UML活動(dòng)圖中的一個(gè)動(dòng)作或一個(gè)活動(dòng)來(lái)定義。當(dāng)使用基于節(jié)點(diǎn)和鏈接的建模語(yǔ)言時(shí),可用一個(gè)通用性的合并方法把以上得到的屬于同一個(gè)角色的所有參與者組合活動(dòng)合并成一個(gè)描述單一角色行為的組合活動(dòng),具體步驟描述如下 增加一個(gè)父組合活動(dòng),然后把所有這些得到的參與者組合活動(dòng)作為它的并行子活動(dòng)。這可以通過(guò)增加一個(gè)分叉節(jié)點(diǎn)和一個(gè)匯合節(jié)點(diǎn)來(lái)實(shí)現(xiàn),而這個(gè)分叉節(jié)點(diǎn)會(huì)有一個(gè)鏈接指向每一個(gè)參與者組合活動(dòng),這個(gè)匯合節(jié)點(diǎn)則是每一個(gè)參與者組合活動(dòng)的目標(biāo)節(jié)點(diǎn)。圖48用UML活動(dòng)圖表示如何把得到的參與者組合活動(dòng)“X-server”和“X-client”合并成“X”角色組合活動(dòng)。請(qǐng)注意,分叉節(jié)點(diǎn)4800和匯合節(jié)點(diǎn)4801用UML活動(dòng)圖中的豎線表示。當(dāng)把這個(gè)通用性的設(shè)計(jì)過(guò)程用于BPMN建模語(yǔ)言時(shí),具體過(guò)程描述如下 用BPMN定義協(xié)議組合活動(dòng)(如圖49所示),它只包含接收雙向外部事件的事件接收任務(wù)。 作如下修改把它轉(zhuǎn)換成一個(gè)參與者組合活動(dòng)(如圖50和圖51所示)
為每一個(gè)從參與者角度看是接收向內(nèi)事件的“接收(Receive)”任務(wù)4901,把“接收”任務(wù)替換成一個(gè)反應(yīng)式流程5001,這個(gè)反應(yīng)式流程把該“接收”任務(wù)5003作為它的外部活動(dòng),而后面跟著一個(gè)尚待定義的內(nèi)部活動(dòng)5004(是BPMN的一個(gè)子流程(Sub-process)或任務(wù)(Task))作為響應(yīng)所發(fā)生的向內(nèi)事件時(shí)執(zhí)行的內(nèi)部活動(dòng)。 為組合活動(dòng)中每一個(gè)從交流對(duì)端系統(tǒng)看來(lái)是接收事件,而從參與者角度看來(lái)是發(fā)送事件的“接收”任務(wù)4902,把“接收”任務(wù)替換成一個(gè)反應(yīng)式流程5002,這個(gè)反應(yīng)式流程包含一個(gè)尚待定義的外部活動(dòng)5005 (是BPMN的一個(gè)子流程或任務(wù)),用來(lái)描述待接收的尚待定義的外部事件,后面跟著一個(gè)發(fā)送這個(gè)事件的任務(wù)作為響應(yīng)所發(fā)生的尚待定義的外部活動(dòng)時(shí)執(zhí)行的內(nèi)部活動(dòng)5006。 為了把這些參與者組合活動(dòng)合并成一個(gè)角色組合活動(dòng),我們定義一個(gè)父流程,它用一對(duì)并行的“與分流”網(wǎng)關(guān)(AND-Split Gateway) 5200和“與匯合”網(wǎng)關(guān)(AND-joinGateway) 5201 (如圖52所示)或者一個(gè)并行框(Parallel box) 5300(如圖53所示)把這 些參與者組合活動(dòng)作為它的并行子流程整合在一起。與一個(gè)組合PS的并行子PS類似,當(dāng)父流程開始運(yùn)行時(shí),這些子流程就會(huì)開始并行運(yùn)行。隨后可以通過(guò)用內(nèi)部交流和行為來(lái)替換尚待定義的外部活動(dòng)和尚待定義的內(nèi)部活動(dòng)讓所得到的流程定義變得完整。當(dāng)把這個(gè)通用性的設(shè)計(jì)過(guò)程用于BPEL建模語(yǔ)言時(shí),具體的過(guò)程描述如下 用BPEL定義一個(gè)協(xié)議組合活動(dòng),它只包含用BPEL “接收(receive) ”或“拾取(pick) ”活動(dòng)來(lái)定義的接收雙向外部事件的事件接收任務(wù)。 如果用了“拾取(pick) ”活動(dòng)來(lái)定義一個(gè)協(xié)議,那么它的〈onMessage〉結(jié)構(gòu)應(yīng)該把這個(gè)事件的名稱描述在它的“operation”中,而且把它的活動(dòng)定義為“Empty”。舉個(gè)例子,“協(xié)議0”的BPEL偽代碼應(yīng)該是下面這樣的〈sequence …〉
<pick ..+>
〈onMessage ... operation="RequestO" ..+> empty
〈/onMessage〉
</pick>
<pick ..+>
<onMessage ... operation="ReplyO" ..+> empty
〈/onMessage〉
</pick>
〈/sequence〉籲如果用了 “接收(receive)”活動(dòng)來(lái)定義一個(gè)協(xié)議,應(yīng)該把這個(gè)事件的名稱描述在它的“operation”中。舉個(gè)例子,“協(xié)議I ”的BPEL偽代碼應(yīng)該是下面這樣的
〈sequence ..+>
〈receive ... operation="Requestl"…〉
〈/receive〉
〈receive ... operation="ReplyI" ..+>
〈/receive〉
〈/sequence〉籲請(qǐng)注意,盡管在本例中用到了 “sequence”來(lái)定義順序的活動(dòng),BPEL中還可以用“flow”和“l(fā)ink”來(lái)定義順序的活動(dòng)。 作以下修改來(lái)得到一個(gè)參與者組合活動(dòng)為協(xié)議組合活動(dòng)中的每一個(gè)“接收(receive) ”或“拾取(pick)"活動(dòng)執(zhí)行下面的步驟 如果這個(gè)活動(dòng)描述的是參與者要接收的向內(nèi)的事件,把它替換成一個(gè)反應(yīng)式組合活動(dòng),這反應(yīng)式組合活動(dòng)把這個(gè)向內(nèi)的活動(dòng)作為它的外部活動(dòng),后面跟著一個(gè)尚待定義的內(nèi)部活動(dòng)(BPEL中的一個(gè)子活動(dòng))作為響應(yīng)所發(fā)生的向內(nèi)活動(dòng)時(shí)執(zhí)行的內(nèi)部活動(dòng)。 對(duì)“拾取(pick) ”活動(dòng),在〈onMessage〉結(jié)構(gòu)中的事件應(yīng)該由“empty”變成一個(gè)尚待定義的內(nèi)部活動(dòng)“ InternalActivity”,并且
對(duì)“接收(receive) ”活動(dòng),它后面應(yīng)該跟著一個(gè)在“sequence”里面尚待定義的內(nèi)部活動(dòng) “ InternalActivity”。 如果這個(gè)事件是向外的,則定義一個(gè)反應(yīng)式組合活動(dòng),這反應(yīng)式組合活動(dòng)包含一個(gè)尚待定義的外部事件用來(lái)描述要接收的事件,后面跟著一個(gè)發(fā)送這個(gè)向外事件的活動(dòng),作為響應(yīng)所發(fā)生的尚待定義的外部事件時(shí)執(zhí)行的內(nèi)部活動(dòng)。 如果用了“拾取(pick) ”活動(dòng),一個(gè)尚待定義的外部活動(dòng)的〈onMessage〉結(jié)構(gòu)應(yīng)該等待一個(gè)尚待定義的向內(nèi)事件“?? ”,而它的內(nèi)部活動(dòng)則應(yīng)該包含這個(gè)向外的事件?;n如果用了 “接收(receive)”活動(dòng),尚待定義的外部活動(dòng)應(yīng)該等待一個(gè)尚待定義的事件,而且后面跟著一個(gè)在“ sequence ”里面發(fā)送這個(gè)向外事件的內(nèi)部活動(dòng)。 比如,使用"拾取(pick)"活動(dòng)的X-server參與者組合活動(dòng),用BPEL偽代碼應(yīng)
該如下所示
〈sequence ...>
<pick ...>
〈onMessage ... operation="RequestO" ...>
Internal Activity
〈/onMessage〉
</pick>
<pick ...>
〈onMessage ... operation=" " ...>
〈invoke ... operation="ReplyO" ...
〈/invoke〉
〈/onMessage〉
</pick>
〈/sequence〉 又比如,使用"接收(receive)"活動(dòng)的X-client參與者組合活動(dòng),用BPEL偽
代碼應(yīng)該如下所示〈sequence …〉
〈receive ... operation=" " ..+>
〈/receive〉
〈invoke ... operation="Requestl"...
〈/invoke〉 〈receive ... operation="ReplyI" ..+>
〈/receive〉
InternalActivitv
〈/sequence〉 為了定義一個(gè)角色組合活動(dòng),我們?cè)黾右粋€(gè)父流程,通過(guò)用“flow”結(jié)構(gòu)把這些參與者組合活動(dòng)作為這個(gè)父流程的并行子流程進(jìn)行合并。 舉個(gè)例子,這個(gè)合并后的角色組合活動(dòng)用BPEL偽代碼可以表示如下
<flow>
〈sequence …〉
<pick …〉
〈onMessage ... operation="RequestO" ..+>Internal Activity
〈/onMessage〉
</pick>
<pick ..+>
<onMessage ... operation=" " ..+>
〈invoke ... operation="ReplyO" ...
〈/invoke〉
〈/onMessage〉
</pick>
〈/sequence〉
〈sequence ..+>
〈receive ... operation=" " ..+>
〈/receive〉
〈invoke ... operation="Requestl"...
〈/invoke〉
〈receive ... operation="ReplyI" ..+>
〈/receive〉
InternalActivitv
〈/sequence〉
</flow>隨后可以通過(guò)用內(nèi)部的交流和行為來(lái)替換那些尚待定義的外部活動(dòng)和尚待定義的內(nèi)部活動(dòng)讓得到的流程定義變得完整。請(qǐng)注意,上述的實(shí)施例中實(shí)用了 “operation =” ? ””來(lái)表示尚待定義的外部活動(dòng),以及“內(nèi)部活動(dòng)?? ”來(lái)表示尚待定義的內(nèi)部活動(dòng)。每一個(gè)尚待定義的外部活動(dòng)和尚待定義的內(nèi)部活動(dòng)可以在其他實(shí)施例中用其他方式來(lái)表示,只要它們能夠與正常的活動(dòng)區(qū)分開。盡管上面所述的通用性設(shè)計(jì)方法的實(shí)施例是基于BPEL來(lái)描述一個(gè)協(xié)議組合活動(dòng)和一個(gè)參與者組合活動(dòng),但是類似的方法可以被本領(lǐng)域的技術(shù)人員用于任何基于XML并且支持“順序(sequence)”活動(dòng)的行為描述語(yǔ)言,比如XPDL和WS-CDL。一般而言,上述的一個(gè)反應(yīng)式組合活動(dòng)可以定義成一個(gè)順序活動(dòng),而這個(gè)順序活動(dòng)包含一個(gè)等待向內(nèi)事件的外部活動(dòng)以及一個(gè)為響應(yīng)所發(fā)生的這個(gè)向內(nèi)事件而執(zhí)行的內(nèi)部活動(dòng)。下面的XML表示一個(gè)用順序活動(dòng)來(lái)定義的反應(yīng)式組合活動(dòng)。
〈sequence〉
ExternalActivity
InternalActivity
〈/sequence〉對(duì)于一個(gè)用WS-⑶L定義的反應(yīng)式組合活動(dòng),它的外部活動(dòng)可以是用一個(gè)WS-⑶L的交流活動(dòng)(Interaction activity)來(lái)描述要等待的向內(nèi)事件,而它的內(nèi)部活動(dòng)可以是一個(gè)用來(lái)描述一些待執(zhí)行動(dòng)作的活動(dòng)。盡管WS-CDL目前還不支持內(nèi)部活動(dòng),但可以想像得到,WS-⑶L是可以被擴(kuò)展來(lái)支持內(nèi)部的活動(dòng)的。本發(fā)明描述的這些通用性的設(shè)計(jì)方法可以被用于這樣一個(gè)擴(kuò)展了的行為描述語(yǔ)言。·生成一個(gè)參與者狀態(tài)機(jī)當(dāng)把這個(gè)通用性的設(shè)計(jì)過(guò)程用于一個(gè)狀態(tài)機(jī)建模語(yǔ)言(比如狀態(tài)圖),具體的過(guò)程描述如下 把每一個(gè)協(xié)議定義為一個(gè)狀態(tài)機(jī)(State machine)(如圖54中的“協(xié)議0”5400和“協(xié)議1”5403),這個(gè)狀態(tài)機(jī)只把向內(nèi)或向外的事件定義為它的狀態(tài)遷移的事件或者觸發(fā)器(Trigger),比如“協(xié)議0”中的“請(qǐng)求O,,5401和“答復(fù)0”5402,以及“協(xié)議I”中的“請(qǐng)求I” 5404和“答復(fù)I” 5405,但沒(méi)有為這個(gè)狀態(tài)遷移定義任何動(dòng)作或遷移效果(Effect)。一個(gè)協(xié)議狀態(tài)機(jī)可以被視為是用來(lái)定義一個(gè)處于通訊雙方之間,能接收兩個(gè)方向的事件的一個(gè)實(shí)體的行為。每一個(gè)像這樣的事件都可被定義為它所對(duì)應(yīng)的狀態(tài)遷移中的一個(gè)觸發(fā)器。 按如下步驟修改每一個(gè)協(xié)議狀態(tài)機(jī)來(lái)轉(zhuǎn)換得到一個(gè)參與者狀態(tài)機(jī)(如圖55和圖56所示) 對(duì)這個(gè)協(xié)議狀態(tài)機(jī)中的每一個(gè)遷移,如果它的觸發(fā)器中包含一個(gè)向內(nèi)的事件(從參與者角度來(lái)看),則在這個(gè)遷移上增加一個(gè)尚待定義的遷移效果(如圖55中的“?? ”5501 和圖 56 中的 “?? ”5603 所示)。 對(duì)這個(gè)協(xié)議狀態(tài)機(jī)中的每一個(gè)遷移,如果它的觸發(fā)器中包含一個(gè)向外的事件(從參與者角度來(lái)看),則在這個(gè)遷移上增加一個(gè)遷移效果來(lái)發(fā)送這個(gè)向外事件。然后把這個(gè)遷移的觸發(fā)器改成等待一個(gè)尚待定義的向內(nèi)事件(如圖56中的“?? ”所示)。為了生成一個(gè)角色狀態(tài)機(jī),一個(gè)父狀態(tài)可以被定義來(lái)把所有這些參與者狀態(tài)機(jī)合并到一個(gè)單一的角色狀態(tài)機(jī)。這個(gè)父狀態(tài)把所有這些得到的參與者狀態(tài)機(jī)都當(dāng)作它的正交區(qū)域(orthogonal regions)。如圖57所示,參與者狀態(tài)機(jī)“X-server” 5701和“X-client”5702變成合并在父狀態(tài)“X”5700內(nèi)的兩個(gè)正交區(qū)域。請(qǐng)注意,狀態(tài)機(jī)中的正交區(qū)域類似于一個(gè)組合PS中的并行子PS。隨后可以通過(guò)用內(nèi)部的交流和行為替換那些尚待定義的觸發(fā)器和遷移效果以使得到的角色狀態(tài)機(jī)定義變得完整。盡管圖54,55,56和57是用狀態(tài)圖(Statechart)圖畫來(lái)表示的,它們也可以被替換成其他的狀態(tài)機(jī)(state machine)圖畫而不會(huì)失去本發(fā)明的精髓。有時(shí)候,一個(gè)設(shè)計(jì)者需要定義一個(gè)需要和一個(gè)已存在應(yīng)用系統(tǒng)進(jìn)行交流的新的應(yīng)用系統(tǒng)的行為。因?yàn)椴惶赡芨淖円汛嬖趹?yīng)用系統(tǒng)的行為,所以需要根據(jù)已存在應(yīng)用系統(tǒng)的行為來(lái)推導(dǎo)出已存在應(yīng)用系統(tǒng)所支持的協(xié)議。然后應(yīng)用上述轉(zhuǎn)換方法來(lái)生成新應(yīng)用系統(tǒng)的參與者組合活動(dòng)。這樣得到的參與者組合活動(dòng)就可以和已存在應(yīng)用系統(tǒng)正確地進(jìn)行交流。 生成一個(gè)協(xié)議組合活動(dòng)下面說(shuō)明如何從一個(gè)描述參與者行為的參與者組合活動(dòng)來(lái)生成一個(gè)描述兩個(gè)參與者之間的協(xié)議的協(xié)議組合活動(dòng)的方法 把所述參與者組合活動(dòng)復(fù)制為一個(gè)協(xié)議組合活動(dòng); 把所述協(xié)議組合活動(dòng)中既不接收向內(nèi)事件也不發(fā)送向外事件的各個(gè)簡(jiǎn)單活動(dòng)改變?yōu)榭栈顒?dòng),但是保持原有向外的鏈接不變。
下面用UML活動(dòng)圖作為行為建模語(yǔ)言來(lái)舉例說(shuō)明如何應(yīng)用這個(gè)方法。圖46是用UML活動(dòng)圖表示的“X-server”參與者組合活動(dòng)。遵循上述的協(xié)議生成方法可以推導(dǎo)出一個(gè)協(xié)議組合活動(dòng)。 把圖46中的“X-server”參與者組合活動(dòng)4600復(fù)制一份為圖58中協(xié)議組合活動(dòng) 5800 ; 因?yàn)楹?jiǎn)單活動(dòng)“?? ”4603既不接收向內(nèi)事件也不發(fā)送向外事件,所以把它變成一個(gè)空活動(dòng)5803 ; 因?yàn)楹?jiǎn)單活動(dòng)” ? ”4605既不接收向內(nèi)事件也不發(fā)送向外事件,所以把它變成一個(gè)空活動(dòng)5805 ;請(qǐng)注意,除了不包含任何要執(zhí)行的實(shí)際動(dòng)作以外,這個(gè)空活動(dòng)和一個(gè)普通節(jié)點(diǎn)是一樣的。如果用BPEL來(lái)描述一個(gè)組合活動(dòng),則可以用一個(gè)“empty”活動(dòng)來(lái)表示空活動(dòng)。如果用WS-⑶L來(lái)描述一個(gè)組合活動(dòng),則可以用一個(gè)“noAction”來(lái)表示一個(gè)空活動(dòng)。如果一個(gè)組合活動(dòng)是用不支持空活動(dòng)的行為建模語(yǔ)言來(lái)表示的,比如BPMN,XPDL和UML活動(dòng)圖,則需要為這個(gè)行為建模語(yǔ)言增加一個(gè)特殊的空活動(dòng)。以上所生成的協(xié)議組合活動(dòng)可能包含了許多空活動(dòng)。這些空活動(dòng)可以根據(jù)以下規(guī)則加以清除 對(duì)每一個(gè)空活動(dòng),可以將它的目標(biāo)活動(dòng)和源活動(dòng)直接相連,從而把空活動(dòng)刪除; 如果一對(duì)分叉、匯合節(jié)點(diǎn)之間沒(méi)有鏈接,或者只剩下一個(gè)鏈接,那么這對(duì)分叉匯合節(jié)點(diǎn)可以刪除。 如果一個(gè)組合活動(dòng)只剩下一個(gè)子活動(dòng),那么這個(gè)組合活動(dòng)可以用這個(gè)剩下的子活動(dòng)來(lái)替代。在清除完這些空活動(dòng)后,圖58中的協(xié)議就變成了圖45中的“協(xié)議0 ” 4500。實(shí)現(xiàn)上文這些通用性設(shè)計(jì)方法的一個(gè)設(shè)計(jì)工具或者一個(gè)運(yùn)行平臺(tái)需要用一種具體的形式來(lái)表現(xiàn)所述的通用性組件,比如尚待定義的外部活動(dòng)和尚待定義的內(nèi)部活動(dòng),協(xié)議組合活動(dòng)和參與者組合活動(dòng)。一個(gè)具體的形式可以是下面的任何一種I) 一種程序語(yǔ)言,比如C和Java ;2) 一種數(shù)據(jù)描述語(yǔ)言,比如ASN. I (AbstractSyntax Notation One) ;3) 一種基于 XML 的語(yǔ)言,比如 XPDL,BPEL 和 WS-CDL ;或 4) 一種圖形語(yǔ)言,比如BPMN,UML活動(dòng)圖,或該設(shè)計(jì)工具可以支持的任何專有表示方法。在這些設(shè)計(jì)方法的一種實(shí)施例中,可以用同一種具體形式來(lái)表示協(xié)議組合活動(dòng)和參與者組合活動(dòng)。而在另一種實(shí)施例中,可以用一種具體形式來(lái)表示協(xié)議組合活動(dòng),而采取另一種具體形式來(lái)表示參與者組合活動(dòng)。結(jié)論本發(fā)明包括了對(duì)一個(gè)應(yīng)用軟件的整個(gè)開發(fā)生命周期都有用處的方法和組件。在本發(fā)明的一種實(shí)施例中,本發(fā)明所描述的DS組件和方法可以用于設(shè)計(jì)階段,代碼生成階段以及執(zhí)行階段。而在另一種實(shí)施例中,這些DS組件和方法會(huì)用在設(shè)計(jì)階段和代碼生成階段。還有一種實(shí)施例中,這些DS組件和方法僅被設(shè)計(jì)工具使用。還有一種實(shí)施例中可以把本發(fā)明所描述的通用性的方法和圖形語(yǔ)言與UML狀態(tài)圖,UML活動(dòng)圖,BPMN,XPDL和BPEL等建模語(yǔ)言結(jié)合起來(lái)用在設(shè)計(jì)階段。如圖59所示,一個(gè)設(shè)計(jì)工具可以通過(guò)使用這些通用性的方法和指導(dǎo)來(lái)描述一個(gè)應(yīng)用系統(tǒng)的內(nèi)部行為和外部行為,從而支持一個(gè)應(yīng)用系統(tǒng)設(shè)計(jì)流程。本發(fā)明描述的全部或部分圖形語(yǔ)言可以被一個(gè)設(shè)計(jì)工具采用以方便設(shè)計(jì)流程。然而這樣設(shè)計(jì)出來(lái)的行為是可以用另外一種機(jī)制來(lái)描述的, 比如UML狀態(tài)圖,UML活動(dòng)圖,BPMN,XPDL和BPEL。然后它可以經(jīng)過(guò)一個(gè)代碼生成器來(lái)生成二進(jìn)制代碼,再被運(yùn)行平臺(tái)裝載執(zhí)行。本發(fā)明描述的圖形語(yǔ)言是很靈活而且模塊化的,一個(gè)設(shè)計(jì)工具不必支持全部的組件。因此一個(gè)設(shè)計(jì)工具可以只選用本發(fā)明所描述的組件的一部分來(lái)用于各種目的。在下面三幅圖中表示了一些這樣的實(shí)施例。圖60中的包含框6000代表了一個(gè)應(yīng)用系統(tǒng),而該應(yīng)用系統(tǒng)的動(dòng)態(tài)行為是用一個(gè)包含了 3個(gè)子包含框6001,6002和6003的組合活動(dòng)來(lái)描述的。其中兩個(gè)子包含框6001,6002代表順序的子活動(dòng),而子包含框6003代表一個(gè)并行子活動(dòng)。有一個(gè)遷移箭頭從子包含框6001指向子包含框6002,而并行子活動(dòng)6003則沒(méi)有任何遷移箭頭。那兩個(gè)順序子活動(dòng)中的一個(gè)是一個(gè)反應(yīng)式組合活動(dòng)6001,6001包含一個(gè)事件子子包含框6004作為它的外部活動(dòng)以描述待發(fā)生的外部事件,以及一個(gè)動(dòng)作子子包含框6005作為它的內(nèi)部活動(dòng)以描述響應(yīng)所發(fā)生的外部事件時(shí)執(zhí)行的內(nèi)部活動(dòng)。一個(gè)雙向的交流鏈接6006代表了順序子活動(dòng)6001和并行子活動(dòng)6003之間的一組交流。這個(gè)交流協(xié)議用標(biāo)識(shí)符“協(xié)議0”來(lái)表示。附注這個(gè)交流協(xié)議的DS在此圖中并沒(méi)有顯示出來(lái)。圖61中的一個(gè)包含框6100代表一個(gè)應(yīng)用系統(tǒng),而該應(yīng)用系統(tǒng)的行為是用一個(gè)包含了三個(gè)子包含框6101,6102和6105的組合活動(dòng)來(lái)描述,每一個(gè)子包含框代表了一個(gè)子活動(dòng)。一個(gè)雙向的交流鏈接6106代表了子包含框6101和6105之間的一組交流。這個(gè)交流鏈接用一個(gè)標(biāo)識(shí)符“協(xié)議0”來(lái)表明這個(gè)交流集所要遵循的協(xié)議規(guī)范。組合活動(dòng)6100有兩個(gè)結(jié)束點(diǎn),其中的一個(gè)結(jié)束點(diǎn)6103有一個(gè)沒(méi)有顯示出的默認(rèn)的結(jié)束條件。另一個(gè)結(jié)束點(diǎn)6104有一個(gè)結(jié)束條件“遷移條件I”。圖62中的一個(gè)包含框6200代表一個(gè)應(yīng)用系統(tǒng),而該應(yīng)用系統(tǒng)的行為是用一個(gè)組合活動(dòng)6200來(lái)描述的,它有兩個(gè)順序的子活動(dòng)6201和6202,一個(gè)并行的子活動(dòng)6205,以及一個(gè)在順序子活動(dòng)6201和并行子活動(dòng)6205之間的交流鏈接6206。有一個(gè)遷移箭頭6208從源子包含框6201指向目標(biāo)子包含框6202。還有一個(gè)生成箭頭6207指向一個(gè)在運(yùn)行時(shí)可以被順序子活動(dòng)6202生成的動(dòng)態(tài)組件6205。一個(gè)子包含框6201則代表了一個(gè)反應(yīng)式組合活動(dòng),這個(gè)反應(yīng)式組合活動(dòng)包含一個(gè)事件子子包含框6209用來(lái)描述待發(fā)生的外部事件和一個(gè)動(dòng)作子子包含框6210用來(lái)描述為響應(yīng)發(fā)生的所述外部事件而執(zhí)行的內(nèi)部活動(dòng)。
在本發(fā)明的另外一種實(shí)施例中,可以采用有向鏈接,而不用圖60中的分割線來(lái)區(qū)別一個(gè)反應(yīng)式組合活動(dòng)中的外部活動(dòng)和內(nèi)部活動(dòng)。圖63表示了和圖60同樣的組合活動(dòng)例子,只是在反應(yīng)式組合活動(dòng)6300內(nèi)部多了一個(gè)連接外部活動(dòng)6301和內(nèi)部活動(dòng)6302的有向鏈接6303。除了使用可視化的設(shè)計(jì)工具,也可以在本發(fā)明的基礎(chǔ)上用其他工具來(lái)生成用戶定義的DS類型。比如可以使用計(jì)算機(jī)輔助的軟件工程工具(CASE)。一個(gè)CASE工具可以在整個(gè)開發(fā)方法學(xué)中綜合了本發(fā)明的功能以支持生成和編輯用戶定義的DS組件。一個(gè)CASE工具也可以為用戶定義的DS類型提供分析和驗(yàn)證功能,而另一個(gè)CASE工具更可以通過(guò)提供一個(gè)DS類型的分類和目錄以及支持對(duì)DS類型的查詢和匹配來(lái)幫助重復(fù)使用用戶已定義的DS類型。其他的CASE工具可以對(duì)基于DS組件的應(yīng)用程序進(jìn)行模擬,甚至可以提供自動(dòng)測(cè) 試功能,而測(cè)試用例則可以根據(jù)DS類型的定義自動(dòng)生成。在本發(fā)明的另一種實(shí)施例中可以用一個(gè)集成開發(fā)環(huán)境(IDE)來(lái)支持基于本發(fā)明的軟件開發(fā),包括軟件設(shè)計(jì),編譯和執(zhí)行。特別是,執(zhí)行時(shí)刻可以通過(guò)帶有軟件庫(kù)函數(shù)的運(yùn)行平臺(tái)來(lái)支持DS組件。類似于一個(gè)運(yùn)行平臺(tái),本專利還有一種實(shí)施例是在一個(gè)軟件的虛擬機(jī)里或者一個(gè)完全基于硬件和固件的計(jì)算設(shè)備上支持DS組件和它的執(zhí)行函數(shù)。另一方面,并不是所有的DS組件都需要被自動(dòng)化或者通過(guò)軟件來(lái)執(zhí)行。本發(fā)明的另外一種實(shí)施例是一個(gè)設(shè)計(jì)者通過(guò)一個(gè)設(shè)計(jì)工具用DS的組件或組合活動(dòng)來(lái)定義人的行為,業(yè)務(wù)流程或者是行動(dòng)計(jì)劃。這些DS組件或組合活動(dòng)中的一部分可以是要人去完成的工作。盡管上面的描述都帶有某些特性,但這不能被看作是對(duì)本發(fā)明范圍的限制,而只能看作是本發(fā)明的一些實(shí)施例。根據(jù)本文所披露的信息和所指導(dǎo)的內(nèi)容,一個(gè)本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)該可以意識(shí)到在本發(fā)明的范圍內(nèi)還可以有很多其他實(shí)施例和進(jìn)一步的衍生例。本發(fā)明的應(yīng)用將是非常廣泛的,因?yàn)榇蠖鄶?shù)解決現(xiàn)實(shí)世界問(wèn)題的系統(tǒng)都可以看作為一個(gè)反應(yīng)式的系統(tǒng)。比如,在一個(gè)3層架構(gòu)中,數(shù)據(jù)庫(kù)管理系統(tǒng)可以看作一個(gè)對(duì)數(shù)據(jù)庫(kù)管理系統(tǒng)的上一層服務(wù)器的輸入做出反應(yīng)的系統(tǒng)。而這些服務(wù)器又可以看作對(duì)這些服務(wù)器的上一層輸入做出反應(yīng)的系統(tǒng)。表示層(presentation tier)則可以看作對(duì)人類的輸入做出反應(yīng)的系統(tǒng)。換言之,幾乎所有的計(jì)算系統(tǒng)都可以用本發(fā)明描述的DS,PS,Ext-DS和Int-DS來(lái)建模,并獲益于它們所具有的先進(jìn)特性。本發(fā)明還可以用來(lái)為高度復(fù)雜的通訊協(xié)議進(jìn)行建模。尤其是利用一個(gè)組合DS的特性,一個(gè)協(xié)議不僅可以支持單個(gè)會(huì)話,還可以支持多個(gè)并發(fā)的、嵌套的會(huì)話。本發(fā)明還可以用來(lái)為人機(jī)界面建模。一個(gè)人可以同時(shí)處理很多件事情。為了和人類的這種“多進(jìn)程”能力相稱,一個(gè)基于圖形用戶界面的應(yīng)用可以用一個(gè)組合的DS來(lái)定義它與人的界面,而用一個(gè)組合的PS來(lái)定義它的反應(yīng)式行為。因?yàn)楸景l(fā)明所具備的高度完善的建模能力,它甚至可以用來(lái)對(duì)人類行為或者組織行為進(jìn)行建模。比如,一個(gè)組織的整個(gè)業(yè)務(wù)流程可以用一個(gè)組合的PS來(lái)建模,這個(gè)組合的PS包含有多個(gè)層次的子PS來(lái)實(shí)現(xiàn)部門,團(tuán)隊(duì)和雇員的行為。計(jì)劃流程,決策流程以及解決問(wèn)題的流程也可以用DS,PS, Ext-DS和Int-DS來(lái)建模。
一個(gè)通用的業(yè)務(wù)運(yùn)行環(huán)境,比如一個(gè)業(yè)務(wù)流程管理平臺(tái),一個(gè)工作流引擎或者一個(gè)通用的業(yè)務(wù)運(yùn)營(yíng)框架,也可以通過(guò)承載各種業(yè)務(wù)流程和活動(dòng)的DS,PS, Ext-DS和Int-DS來(lái)實(shí)現(xiàn)。有些現(xiàn)實(shí)世界的東西,它們具有多個(gè)狀態(tài),比如機(jī)器,顧客記錄,訂單項(xiàng),也可以用DS或者DS的擴(kuò)展來(lái)建模。用本發(fā)明的方法來(lái)建模并設(shè)計(jì)各種應(yīng)用系統(tǒng),比如上文描述的那些系統(tǒng),可以定義出DS,PS,Ext-DS和Int-DS的規(guī)范。這些規(guī)范的一部分也可以通過(guò)其他途徑來(lái)得到。不管是采用哪種途徑,所得到的這些應(yīng)用系統(tǒng)的DS,PS, Ext-DS和Int-DS規(guī)范可以由一臺(tái)實(shí)施本發(fā)明的設(shè)備或機(jī)器,比如一臺(tái)計(jì)算機(jī)來(lái)執(zhí)行。一般而言,本發(fā)明可能以方法的形式實(shí)施或者以執(zhí)行這些方法的設(shè)備的形式來(lái)實(shí)施。本發(fā)明也可以通過(guò)有形媒體(比如磁盤,光盤,磁盤驅(qū)動(dòng)器或者任何其它機(jī)器可讀的存儲(chǔ)介質(zhì))上的程序代碼來(lái)實(shí)施。當(dāng)這些程序代碼被一個(gè)設(shè)備,比如計(jì)算機(jī),裝載并執(zhí)行時(shí), 這個(gè)設(shè)備就成了一個(gè)實(shí)施本發(fā)明的設(shè)備。本發(fā)明也可以通過(guò)在某些傳輸介質(zhì)(比如電纜,光纖或者電磁輻射)來(lái)傳輸程序代碼而得到實(shí)施。當(dāng)這些程序代碼被一個(gè)設(shè)備或機(jī)器,t匕如計(jì)算機(jī),裝載并執(zhí)行時(shí),這個(gè)機(jī)器就成了一個(gè)實(shí)施本發(fā)明的設(shè)備。因此,可以看到本發(fā)明所描述的DS組件以及相關(guān)的方法和過(guò)程是定義系統(tǒng)的行為和通訊協(xié)議的非常強(qiáng)大的方法和技術(shù)。特別是它對(duì)現(xiàn)有技術(shù),比如BPMN,BPEL, XPDL,WS-CDL或UML在以下幾個(gè)主要方面都進(jìn)行了擴(kuò)展并加以改良。第一個(gè)方面的改良在于DS模型反映了我們所在宇宙中的時(shí)間維度和空間維度,從而在現(xiàn)有技術(shù)所描述的一堆節(jié)點(diǎn)和鏈接的基礎(chǔ)上增加了重要的含義和結(jié)構(gòu)。第二個(gè)方面的改良是通過(guò)在圖畫中使用包含順序組件與并行組件的包含框,省去了各種分叉節(jié)點(diǎn)和匯合節(jié)點(diǎn)以及鏈接。第三個(gè)方面的改良是使用結(jié)果與結(jié)束情況為組合DS的結(jié)束提供了非常強(qiáng)大而且靈活的控制機(jī)制。第四個(gè)方面的改良是使用DS的特例,比如Ext-DS,PS和Int-DS來(lái)以一種一致的方式分別描述系統(tǒng)的外部行為,系統(tǒng)的反應(yīng)式行為和系統(tǒng)的內(nèi)部行為。第五個(gè)方面的改良是可以描述多個(gè)系統(tǒng)間的復(fù)雜的交流行為。第六方面的改良是提供了系統(tǒng)化的方法從協(xié)議導(dǎo)出角色PS,從而確保了相關(guān)規(guī)范的一致性。應(yīng)該可以理解的是,在本文中描述的例子和實(shí)施例都僅僅是為了說(shuō)明本發(fā)明,對(duì)本領(lǐng)域的技術(shù)人員來(lái)說(shuō)還會(huì)出現(xiàn)許多修正,但這些修正都應(yīng)包含在本專利申請(qǐng)以及權(quán)利要求的范圍以內(nèi)。進(jìn)一步可以理解的是,本領(lǐng)域的技術(shù)人員可以在不偏離權(quán)利要求中所表達(dá)的本發(fā)明的原則和范圍的條件下,出于闡釋本發(fā)明的本質(zhì)的目的,對(duì)一些細(xì)節(jié),材料或者編排做出修改。在此不管出于何種目的而引用的出版物,專利或?qū)@暾?qǐng)都會(huì)被看作對(duì)相關(guān)內(nèi)容的完整引用。
權(quán)利要求
1.一種包括至少一個(gè)用于設(shè)計(jì)應(yīng)用軟件系統(tǒng)行為的動(dòng)態(tài)系統(tǒng)類型的計(jì)算機(jī)系統(tǒng),其特征在于,所述計(jì)算機(jī)系統(tǒng)包括 一個(gè)設(shè)計(jì)工具,所述設(shè)計(jì)工具用于生成所述動(dòng)態(tài)系統(tǒng)類型的設(shè)計(jì)文檔以便代碼生成器能根據(jù)所述動(dòng)態(tài)系統(tǒng)類型的設(shè)計(jì)文檔生成表示所述動(dòng)態(tài)系統(tǒng)類型的二進(jìn)制代碼,其中所述二進(jìn)制代碼能夠由執(zhí)行平臺(tái)裝載到內(nèi)存中而為所述組合動(dòng)態(tài)系統(tǒng)類型創(chuàng)建組合動(dòng)態(tài)系統(tǒng)實(shí)例。
2.根據(jù)權(quán)利要求I所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述動(dòng)態(tài)系統(tǒng)類型包括一個(gè)第一個(gè)簡(jiǎn)單動(dòng)態(tài)系統(tǒng)類型或一個(gè)第一個(gè)組合動(dòng)態(tài)系統(tǒng)類型。
3.根據(jù)權(quán)利要求2所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述第一個(gè)組合動(dòng)態(tài)系統(tǒng)類型包含多個(gè)階段機(jī)類型,一個(gè)結(jié)束情況集或一個(gè)結(jié)束函數(shù),其中所述一個(gè)結(jié)束情況集至少包含一個(gè)結(jié)束情況,所述結(jié)束情況包含一對(duì)結(jié)束條件和結(jié)束代碼,其中結(jié)束條件描述在何種情 況下所述第一個(gè)組合動(dòng)態(tài)系統(tǒng)類型的實(shí)例會(huì)結(jié)束,結(jié)束代碼用來(lái)標(biāo)識(shí)對(duì)應(yīng)的結(jié)束條件。
4.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述一個(gè)結(jié)束函數(shù)會(huì)返回結(jié)束代碼以標(biāo)明在何種情況下所述第一個(gè)組合動(dòng)態(tài)系統(tǒng)類型的實(shí)例會(huì)結(jié)束。
5.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)系統(tǒng),其特征在于,每個(gè)所述階段機(jī)類型包括一個(gè)或多個(gè)階段類型,其中每個(gè)階段類型包括一個(gè)子動(dòng)態(tài)系統(tǒng)類型以及至少一個(gè)遷移,每個(gè)遷移有一個(gè)遷移條件和一個(gè)目標(biāo)階段,每個(gè)所述子動(dòng)態(tài)系統(tǒng)類型包括一個(gè)第二個(gè)簡(jiǎn)單動(dòng)態(tài)系統(tǒng)類型或一個(gè)第二個(gè)組合動(dòng)態(tài)系統(tǒng)類型。
6.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)系統(tǒng),其特征在于,至少一個(gè)所述至少一個(gè)的階段機(jī)類型進(jìn)一步包括靜態(tài)實(shí)例數(shù),用于描述出該所述至少一個(gè)的階段機(jī)類型的靜態(tài)實(shí)例的數(shù)量。
7.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)系統(tǒng),其特征是,至少一個(gè)所述多個(gè)階段機(jī)類型僅具有一個(gè)所述至少一個(gè)的階段類型。
8.根據(jù)權(quán)利要求2所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述的簡(jiǎn)單系統(tǒng)類型進(jìn)一步包括 第一個(gè)所述子系統(tǒng)類型,用于描述出待發(fā)生的外部事件;以及 第二個(gè)所述子系統(tǒng)類型,用于描述出為響應(yīng)發(fā)生的所述外部事件而執(zhí)行的內(nèi)部動(dòng)作。
9.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)系統(tǒng),其特征在于,至少一個(gè)所述至少一個(gè)的組合系統(tǒng)類型是以一種程序語(yǔ)言、一種數(shù)據(jù)描述語(yǔ)言、一種基于XML的語(yǔ)言和一種圖形語(yǔ)言之一來(lái)描述。
10.根據(jù)權(quán)利要求5所述的計(jì)算機(jī)系統(tǒng),其特征在于,進(jìn)一步包括 至少一個(gè)組合系統(tǒng)實(shí)例,包括 一個(gè)對(duì)所述第一個(gè)組合系統(tǒng)類型的引用; 一個(gè)結(jié)果用來(lái)記錄所述至少一個(gè)組合系統(tǒng)實(shí)例結(jié)束時(shí)的情況;以及 至少一個(gè)階段機(jī); 其中所述至少一個(gè)階段機(jī)包括對(duì)所述至少一個(gè)的階段機(jī)類型的一個(gè)引用、一個(gè)當(dāng)前階段和至少一個(gè)階段; 其中所述至少一個(gè)階段包括對(duì)所述至少一個(gè)的階段類型的一個(gè)引用和一個(gè)子系統(tǒng)實(shí) 例; 其中所述子系統(tǒng)實(shí)例是所述第二個(gè)組合系統(tǒng)類型的實(shí)例或所述第二個(gè)簡(jiǎn)單系統(tǒng)類型的實(shí)例中的至少一個(gè); 其中所述第二個(gè)簡(jiǎn)單系統(tǒng)類型的實(shí)例包括對(duì)所述第二個(gè)簡(jiǎn)單系統(tǒng)類型的一個(gè)引用和一個(gè)對(duì)執(zhí)行所述第二個(gè)簡(jiǎn)單系統(tǒng)類型行為的成果進(jìn)行記錄的結(jié)果。
11.根據(jù)權(quán)利要求10所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述計(jì)算機(jī)系統(tǒng)進(jìn)一步包括所述執(zhí)行平臺(tái)。
12.根據(jù)權(quán)利要求5所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述計(jì)算機(jī)系統(tǒng)進(jìn)一步包括所述代碼生成器。
13.根據(jù)權(quán)利要求9所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述至少一種圖形語(yǔ)言包括 至少一個(gè)包含框,用于可視化地表示所述應(yīng)用系統(tǒng)的一部分,至少一個(gè)所述至少一個(gè)包含框包括多個(gè)子包含框, 至少一個(gè)帶有標(biāo)識(shí)符的雙向鏈接組件用于表示所述多個(gè)子包含框中的兩個(gè)之間的一組交流,而所述標(biāo)識(shí)符標(biāo)明了所述的一組交流必需遵循的一個(gè)協(xié)議規(guī)范,和 多個(gè)結(jié)束點(diǎn)組件; 其中所述多個(gè)結(jié)束點(diǎn)組件中至少有一個(gè)組件具有一個(gè)用于描述出該包含框在何種條件下會(huì)結(jié)束的結(jié)束條件組件。
14.根據(jù)權(quán)利要求11所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述結(jié)束條件組件可視化地以一段文本,一個(gè)邏輯表達(dá)式和一個(gè)數(shù)學(xué)公式之一來(lái)表示。
15.根據(jù)權(quán)利要求13所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述多個(gè)結(jié)束點(diǎn)組件中至少一個(gè)結(jié)束點(diǎn)組件可視化地以一個(gè)符號(hào)或一個(gè)框子來(lái)表示。
16.根據(jù)權(quán)利要求13所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述框子可視化地以一個(gè)多邊形,一個(gè)圓形和一個(gè)橢圓形之一來(lái)表示。
17.根據(jù)權(quán)利要求11所述的計(jì)算機(jī)系統(tǒng),其特征在于,至少一個(gè)所述至少一個(gè)包含框進(jìn)一步包括至少一個(gè)遷移箭頭,用于連接所述多個(gè)子包含框中的一個(gè)子包含框和所述多個(gè)子包含框中的另外一個(gè)子包含框。
18.根據(jù)權(quán)利要求11所述的計(jì)算機(jī)系統(tǒng),其特征在于,至少一個(gè)所述至少一個(gè)子包含框包括多個(gè)子子包含框,以及至少有一個(gè)遷移箭頭連接所述多個(gè)子子包含框中的一個(gè)子子包含框與所述多個(gè)子子包含框中的另一個(gè)子子包含框,其中所述多個(gè)子子包含框中至少有一個(gè)子子包含框不通過(guò)所述的遷移箭頭與任何其它所述多個(gè)子子包含框連接。
19.根據(jù)權(quán)利要求11所述的計(jì)算機(jī)系統(tǒng),其特征在于,至少一個(gè)所述至少一個(gè)包含框進(jìn)一步包括至少一個(gè)用于指向動(dòng)態(tài)組件的生成箭頭。
20.一種包括至少一個(gè)用于設(shè)計(jì)應(yīng)用軟件系統(tǒng)行為的動(dòng)態(tài)系統(tǒng)類型的計(jì)算機(jī)系統(tǒng),其特征在于,所述計(jì)算機(jī)系統(tǒng)包括 一個(gè)代碼生成器,所述代碼生成器用于根據(jù)由設(shè)計(jì)工具生成的動(dòng)態(tài)系統(tǒng)類型的設(shè)計(jì)而生成表示所述動(dòng)態(tài)系統(tǒng)類型的二進(jìn)制代碼,其中所述二進(jìn)制代碼能夠由執(zhí)行平臺(tái)裝載到內(nèi)存中以被執(zhí)行。
21.一種包括至少一個(gè)用于設(shè)計(jì)應(yīng)用軟件系統(tǒng)行為的動(dòng)態(tài)系統(tǒng)類型的計(jì)算機(jī)系統(tǒng),其特征在于,所述計(jì)算機(jī)系統(tǒng)包括 一個(gè)執(zhí)行平臺(tái),所述執(zhí)行平臺(tái)將用于表示動(dòng)態(tài)系統(tǒng)類型的二進(jìn)制代碼裝載到內(nèi)存中以生成所述動(dòng)態(tài)系統(tǒng)類型的實(shí)例,其中所述二進(jìn)制代碼是由代碼生成器根據(jù)由設(shè)計(jì)工具所生成的動(dòng)態(tài)系統(tǒng)類型的設(shè)計(jì)而生成的。
22.根據(jù)權(quán)利要求21所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述動(dòng)態(tài)系統(tǒng)類型包括一個(gè)第一個(gè)簡(jiǎn)單動(dòng)態(tài)系統(tǒng)類型或一個(gè)第一個(gè)組合動(dòng)態(tài)系統(tǒng)類型。
23.根據(jù)權(quán)利要求22所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述第一個(gè)組合動(dòng)態(tài)系統(tǒng)類型包含多個(gè)階段機(jī)類型,一個(gè)結(jié)束情況集或一個(gè)結(jié)束函數(shù),其中所述一個(gè)結(jié)束情況集至少包含一個(gè)結(jié)束情況,所述結(jié)束情況包含一對(duì)結(jié)束條件和結(jié)束代碼,其中結(jié)束條件描述在何種情況下所述第一個(gè)組合動(dòng)態(tài)系統(tǒng)類型的實(shí)例會(huì)結(jié)束,結(jié)束代碼用來(lái)標(biāo)識(shí)對(duì)應(yīng)的結(jié)束條件。
24.根據(jù)權(quán)利要求23所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述一個(gè)結(jié)束函數(shù)會(huì)返回結(jié)束代碼以標(biāo)明在何種情況下所述第一個(gè)組合動(dòng)態(tài)系統(tǒng)類型的實(shí)例會(huì)結(jié)束。
25.根據(jù)權(quán)利要求23所述的計(jì)算機(jī)系統(tǒng),其特征在于,每個(gè)所述階段機(jī)類型包括一個(gè)或多個(gè)階段類型,其中每個(gè)階段類型包括一個(gè)子動(dòng)態(tài)系統(tǒng)類型以及至少一個(gè)遷移,每個(gè)遷 移有一個(gè)遷移條件和一個(gè)目標(biāo)階段,每個(gè)所述子動(dòng)態(tài)系統(tǒng)類型包括一個(gè)第二個(gè)簡(jiǎn)單動(dòng)態(tài)系統(tǒng)類型或一個(gè)第二個(gè)組合動(dòng)態(tài)系統(tǒng)類型。
26.根據(jù)權(quán)利要求23所述的計(jì)算機(jī)系統(tǒng),其特征在于,至少一個(gè)所述至少一個(gè)的階段機(jī)類型進(jìn)一步包括靜態(tài)實(shí)例數(shù),用于描述出該所述至少一個(gè)的階段機(jī)類型的靜態(tài)實(shí)例的數(shù)量。
27.根據(jù)權(quán)利要求23所述的計(jì)算機(jī)系統(tǒng),其特征是,至少一個(gè)所述多個(gè)階段機(jī)類型僅具有一個(gè)所述至少一個(gè)的階段類型。
28.根據(jù)權(quán)利要求22所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述的簡(jiǎn)單系統(tǒng)類型進(jìn)一步包括 第一個(gè)所述子系統(tǒng)類型,用于描述出待發(fā)生的外部事件;以及 第二個(gè)所述子系統(tǒng)類型,用于描述出為響應(yīng)發(fā)生的所述外部事件而執(zhí)行的內(nèi)部動(dòng)作。
29.根據(jù)權(quán)利要求23所述的計(jì)算機(jī)系統(tǒng),其特征在于,至少一個(gè)所述至少一個(gè)的組合系統(tǒng)類型是以一種程序語(yǔ)言、一種數(shù)據(jù)描述語(yǔ)言、一種基于XML的語(yǔ)言和一種圖形語(yǔ)言之一來(lái)描述。
30.根據(jù)權(quán)利要求23所述的計(jì)算機(jī)系統(tǒng),其特征在于,進(jìn)一步包括 至少一個(gè)組合系統(tǒng)實(shí)例,包括 一個(gè)對(duì)所述第一個(gè)組合系統(tǒng)類型的引用; 一個(gè)結(jié)果用來(lái)記錄所述至少一個(gè)組合系統(tǒng)實(shí)例結(jié)束時(shí)的情況;以及 至少一個(gè)階段機(jī); 其中所述至少一個(gè)階段機(jī)包括對(duì)所述至少一個(gè)的階段機(jī)類型的一個(gè)引用、一個(gè)當(dāng)前階段和至少一個(gè)階段; 其中所述至少一個(gè)階段包括對(duì)所述至少一個(gè)的階段類型的一個(gè)引用和一個(gè)子系統(tǒng)實(shí)例; 其中所述子系統(tǒng)實(shí)例是所述第二個(gè)組合系統(tǒng)類型的實(shí)例或所述第二個(gè)簡(jiǎn)單系統(tǒng)類型的實(shí)例中的至少一個(gè); 其中所述第二個(gè)簡(jiǎn)單系統(tǒng)類型的實(shí)例包括對(duì)所述第二個(gè)簡(jiǎn)單系統(tǒng)類型的一個(gè)引用和一個(gè)對(duì)執(zhí)行所述第二個(gè)簡(jiǎn)單系統(tǒng)類型行為的成果進(jìn)行記錄的結(jié)果。
全文摘要
本發(fā)明提供了對(duì)動(dòng)態(tài)應(yīng)用系統(tǒng)行為進(jìn)行建模的一套系統(tǒng)、過(guò)程和過(guò)程的運(yùn)用方法以及開發(fā)這種動(dòng)態(tài)行為模型的方法。本發(fā)明提供了一個(gè)動(dòng)態(tài)系統(tǒng)(即Dynamic System,簡(jiǎn)稱DS)以及相應(yīng)的操作方法來(lái)對(duì)普遍的復(fù)雜而且動(dòng)態(tài)的行為進(jìn)行建模。為了對(duì)一個(gè)分布式環(huán)境中的應(yīng)用系統(tǒng)進(jìn)行建模,本發(fā)明采用了一個(gè)外部的DS(即External DS)來(lái)對(duì)這個(gè)系統(tǒng)的外部行為進(jìn)行建模,而采用一個(gè)自主系統(tǒng)(即Proactive System)來(lái)對(duì)這個(gè)應(yīng)用系統(tǒng)的反應(yīng)式行為進(jìn)行建模,以及一個(gè)內(nèi)部DS(Internal DS)來(lái)對(duì)這個(gè)應(yīng)用系統(tǒng)的內(nèi)部主動(dòng)式行為進(jìn)行建模。本發(fā)明同時(shí)還提供了表示DS以及它的組件的圖形化語(yǔ)言。最后本發(fā)明描述了一個(gè)系統(tǒng)化的方法,從外部行為推導(dǎo)出反應(yīng)式行為或者反過(guò)來(lái),從反應(yīng)式行為推導(dǎo)出外部行為。
文檔編號(hào)G06F9/44GK102736919SQ201210100410
公開日2012年10月17日 申請(qǐng)日期2006年5月16日 優(yōu)先權(quán)日2005年5月16日
發(fā)明者夏壽民 申請(qǐng)人:夏壽民