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