版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章建立輔助模型一、概念與表示法1、概述
順序圖(SequenceDiagram)是一種詳細(xì)表示對象之間以及對象與參與者實(shí)例之間交互的圖,它由一組協(xié)作的對象(或參與者實(shí)例)以及它們之間可發(fā)送的消息組成,它強(qiáng)調(diào)消息之間的順序。
[對象名]:類名圖中含有對象(參與者)、消息、生命線和執(zhí)行規(guī)約。5.1順序圖類圖對對象之間的消息(交互情況)表達(dá)不夠詳細(xì);詳細(xì)說明對消息的表達(dá)雖然詳細(xì),但不夠直觀;順序圖是二維的:垂直方向表示時(shí)間,水平方向表示不同的對象或參與者。通常時(shí)間維由上到下(根據(jù)需要,也可以由下到上)。通常只有時(shí)間順序是重要的,但在實(shí)時(shí)應(yīng)用中時(shí)間軸是能度量的。對象的水平順序并不重要,順序可以是任意的。
t02、對象生命線把對象表示成稱之為“生命線”的垂直虛線。生命線代表一個(gè)對象在特定時(shí)間內(nèi)的存在。
在圖的頂部(第一個(gè)箭頭之上)放置在交互開始時(shí)就存在的對象,而在整個(gè)交互完成時(shí)仍然存在的對象的生命線,要延伸超出最后一個(gè)箭頭。
如果一個(gè)對象在圖中所規(guī)定的時(shí)間段被創(chuàng)建,那么就把創(chuàng)建對象的箭頭的頭部畫在對象符號上。如果對象在圖中被銷毀,那么用一個(gè)大的“X”標(biāo)記它的析構(gòu),該標(biāo)記或者放在引起析構(gòu)的箭頭處,或者放在從被銷毀的對象最終返回的箭頭處(在自析構(gòu)的情況下)。生命線可以分裂成兩條或更多條并發(fā)的生命線,以表示條件性。這樣的每一個(gè)生命線對應(yīng)于交互中的一個(gè)條件分支。生命線可以在某個(gè)后續(xù)點(diǎn)處合并。
執(zhí)行規(guī)約表示一個(gè)對象直接或者通過從屬例程執(zhí)行一個(gè)行為的時(shí)期。它既表示了行為執(zhí)行的持續(xù)時(shí)間,也表示了調(diào)用者與被調(diào)用者之間的控制關(guān)系。
用一個(gè)窄長的矩形表示執(zhí)行規(guī)約,矩形頂端和它的開始時(shí)刻對齊,末端和它的結(jié)束時(shí)刻對齊。執(zhí)行規(guī)約符號的頂端畫在進(jìn)入的箭頭的尖端(開始該動作的那個(gè)箭頭),底端畫在返回的箭頭的尾部。當(dāng)一個(gè)對象處于執(zhí)行規(guī)約期時(shí),該對象能夠響應(yīng)或發(fā)送消息,執(zhí)行對象或活動。當(dāng)一個(gè)對象不處于執(zhí)行規(guī)約期時(shí),該對象不做什么事情,但它是存在的,等待新的消息執(zhí)行規(guī)約它。若調(diào)用一個(gè)對象的另一個(gè)操作,第二個(gè)執(zhí)行規(guī)約符號畫在第一個(gè)符號稍微靠右的位置。遞歸?3、執(zhí)行規(guī)約
消息是對象之間的通訊的規(guī)格說明,這樣的通訊用于傳輸將發(fā)生的活動所需要的信息——控制信息(如調(diào)用)和所使用的數(shù)據(jù)的規(guī)格說明。
一個(gè)消息會調(diào)用另一個(gè)對象的操作,調(diào)用本對象的操作,向另一個(gè)對象發(fā)送一個(gè)信號,創(chuàng)建或者撤消一個(gè)對象(可以自己銷毀自己),還可能向調(diào)用者返回一個(gè)結(jié)果。把消息表示為從一個(gè)對象生命線到另一個(gè)對象生命線的一個(gè)水平實(shí)線箭頭,即從源對象指向目標(biāo)對象,以觸發(fā)目標(biāo)對象中的特定操作。對于對象到自身的消息,箭頭就從同一個(gè)對象符號開始和結(jié)束。用消息(操作或信號)的名字及其參數(shù)值或者參數(shù)表達(dá)式標(biāo)示箭頭。
4、消息用如下種類的箭頭表示不同種類的通訊:
同步消息一般把它用于普通的過程調(diào)用。在外層控制恢復(fù)之前,要完成整個(gè)嵌套序列。通常把它用于普通的過程調(diào)用。同步消息返回
用它顯式地表示從過程調(diào)用的返回。在控制的過程流中,可以省略返回箭頭(暗示執(zhí)行規(guī)約結(jié)束),這是要假設(shè)每個(gè)調(diào)用在任何消息后都有一個(gè)配對的返回。若需要標(biāo)識返回值,則要顯式地把它標(biāo)示在返回的箭頭上。
對象的創(chuàng)建與銷毀:客戶機(jī):JDBC代理服務(wù)器:事務(wù)創(chuàng)建setAction(a,d,o)Setvalue(d,3.9)Setvalue(a,”pm”)已提交銷毀在過程性代碼的情況下,一個(gè)執(zhí)行規(guī)約表示在一個(gè)對象中一個(gè)過程是活動的,或者它的從屬過程(可能在其它的對象中)是活動的持續(xù)時(shí)間。換句話說,可以在一個(gè)特定的時(shí)間看到所有活動著的嵌套過程執(zhí)行規(guī)約。異步消息
用它表示異步通訊,即發(fā)送者發(fā)出消息后,立即繼續(xù)執(zhí)行中的下一步,不進(jìn)行等待。
異步消息返回若請求方發(fā)了一個(gè)異步消息,且接收方響應(yīng)它后要返回信息,則使用另一個(gè)異步消息。
注意:消息與對消息的響應(yīng)。
在多數(shù)情況下,收發(fā)消息的時(shí)間是可以忽略的。通常消息箭頭都畫成水平的。這表示發(fā)送消息所需要的持續(xù)時(shí)間是“原子的”(即,它與交互的粒度相比是短暫的,并且在傳送消息的中間不能發(fā)生任何事情)。這在很多計(jì)算機(jī)中都被假設(shè)是正確的。如果需要表示收發(fā)消息間的時(shí)間差,有三種方法:(1)可以在圖中使用約束,用于指示時(shí)間間隔??梢杂孟⒚徒?jīng)過規(guī)定的函數(shù)書寫計(jì)時(shí)表達(dá)式,如下圖的“b.receiveTime–a.sendTime<1分鐘”。(2)若要在圖中顯式地表示時(shí)間差的數(shù)值,還可以通過構(gòu)造標(biāo)記來指明,如下圖右下角所示。(3)如果需要表示發(fā)送消息是需要時(shí)間的,還可把消息箭線向下傾斜,使箭線頭部在尾部下方,表示消息需要一段時(shí)間到達(dá)。消息分支把分支畫成從一個(gè)點(diǎn)出發(fā)的多個(gè)箭頭,每個(gè)箭頭由監(jiān)護(hù)條件標(biāo)示。依據(jù)監(jiān)護(hù)條件是否互斥,這個(gè)結(jié)構(gòu)可以表達(dá)條件或者并發(fā)。消息循環(huán)標(biāo)以持續(xù)的條件:*[條件]方框圍起來的區(qū)域?yàn)橹貜?fù)的。通過使用預(yù)定的接口或消息設(shè)施(如分布式系統(tǒng)中的中間件)來實(shí)現(xiàn)和管理各軟件部件間的請求通信。例題:打電話問題:時(shí)間超過30秒的情況沒說明會話對象沒有說明計(jì)費(fèi)等情況把電話機(jī)換為打電話的人如何?s:電話c:會話:交換機(jī)a:拿起話筒b:發(fā)撥號聲邏輯連通連接s與rr:電話c:*撥號{時(shí)間少于30秒}創(chuàng)建陣鈴拿起話筒接通接通{b.receiveTime-a.sendTime<1分鐘}{c.receiveTime-c.sendTime<1秒}<5秒{30秒}例題銀行系統(tǒng)的交易驗(yàn)證:交易信用:交易檢查器:交易協(xié)調(diào)器創(chuàng)建返回有效性創(chuàng)建創(chuàng)建擔(dān)保:交易檢查器創(chuàng)建成功全部做完?全部做完?成功[]回調(diào)機(jī)制:申請對象在服務(wù)對象處事先登記所關(guān)心的事件,然后繼續(xù)從事自己的工作;當(dāng)服務(wù)對象監(jiān)控到這樣的事件發(fā)生時(shí),再通知申請對象,由申請對象進(jìn)行處理。
5、信號
信號是對象之間的異步通訊的規(guī)格說明。*
信號名 ‘(‘用逗號分隔的參數(shù)列表‘)’《signal》abca1a2a3QWmoveto()xyz《send》abc(a1,a2,a3)在類圖中,在類符號上用關(guān)鍵字<<signal>>聲明信號。把參數(shù)說明為屬性。信號沒有操作。在類的描述模板中,要指定所能接收的信號。發(fā)送者在發(fā)送信號時(shí),要實(shí)例化其參數(shù)。對于接收者來說,它收到的是一個(gè)事件。通常用信號向另一個(gè)(組)對象發(fā)送一組數(shù)據(jù)或信號量建模,也可對異常情況建模。從一個(gè)對象可以向另一個(gè)對象或?qū)ο蟮募习l(fā)送信號。例如消息廣播?!秙ignal》abca1a2a3QWmoveto()《send》abcxyz發(fā)送者在發(fā)送信號時(shí),要實(shí)例化其參數(shù)。二、順序圖中的結(jié)構(gòu)化控制
序列性的消息能很好地說明單一的線性的序列,但是我們通常需要展示條件和循環(huán)。有時(shí)候我們想要展示多個(gè)序列的并行執(zhí)行。在順序圖中用結(jié)構(gòu)化控制操作符能展示這種高層控制。
為了表示順序圖的邊界,可以把順序圖用一個(gè)封閉的矩形包圍起來,并在矩形的左上角放一個(gè)小五邊形。在這個(gè)小五邊形內(nèi)先寫上sd,再后面寫出圖的名字。對每個(gè)子順序圖加上一個(gè)矩形區(qū)域作為外框,再在其左上角放一個(gè)小五邊形,在這個(gè)小五邊形內(nèi)寫上用來表明控制操作符的類型的文字。delivercash可選執(zhí)行標(biāo)簽是opt。如果控制進(jìn)入該操作符標(biāo)識的交互區(qū)域時(shí)監(jiān)護(hù)條件成立,那么執(zhí)行該交互區(qū)域。監(jiān)護(hù)條件是一個(gè)用方括號括起來的布爾表達(dá)式,它要出現(xiàn)在交互區(qū)域內(nèi)部第一條生命線的頂端,在其中可以引用該對象的屬性。
條件執(zhí)行標(biāo)簽為alt。用水平虛線把交互區(qū)域分割成幾個(gè)分區(qū),每個(gè)分區(qū)表示一個(gè)條件分支并有一個(gè)監(jiān)護(hù)條件。如果一個(gè)分區(qū)的監(jiān)護(hù)條件為真,就執(zhí)行這個(gè)分區(qū),但最多只能執(zhí)行一個(gè)分區(qū)。如果有多于一個(gè)監(jiān)護(hù)條件為真,那么選擇哪個(gè)分區(qū)是不確定的。若沒有應(yīng)對措施,在模型中要避免這種情況。如果所有的監(jiān)護(hù)條件都不為真,那么控制流將跨過這個(gè)交互區(qū)域而繼續(xù)執(zhí)行。其中的一個(gè)分區(qū)可以用特殊的監(jiān)護(hù)條件[else],這意味著如果其他所有區(qū)域的監(jiān)護(hù)條件都為假,就執(zhí)行該分區(qū)。并行執(zhí)行標(biāo)簽是par。用水平虛線把交互區(qū)域分割為幾個(gè)分區(qū)。每個(gè)分區(qū)表示一個(gè)并發(fā)計(jì)算。當(dāng)控制進(jìn)入交互區(qū)域時(shí)并發(fā)地執(zhí)行所有的分區(qū);在并行分區(qū)都執(zhí)行完后,那么該并行操作符標(biāo)識的交互區(qū)域也就執(zhí)行完畢。每個(gè)分區(qū)內(nèi)的消息是順序執(zhí)行的。需要指出的是,并發(fā)并不總是意味著物理上的同時(shí)執(zhí)行。并發(fā)其實(shí)是說兩個(gè)動作沒有協(xié)作關(guān)系,而且可按任意次序發(fā)生。如果它們確實(shí)是獨(dú)立的動作,那么它們還可以交疊。
循環(huán)(迭代)執(zhí)行標(biāo)簽是loop。在交互區(qū)域內(nèi)的頂端給出一個(gè)監(jiān)護(hù)條件。只要在每次迭代之前監(jiān)護(hù)條件成立,那么循環(huán)主體就會重復(fù)執(zhí)行。一旦在交互區(qū)域頂部的監(jiān)護(hù)條件為假,控制就會跳出該交互區(qū)域。三、建立順序圖步驟:■按照當(dāng)前交互的意圖,如系統(tǒng)的一次執(zhí)行,或者一組對象(包括參與者實(shí)例,以下不再明確地提及參與者實(shí)例)之間的協(xié)作,詳細(xì)地審閱有關(guān)材料(如有關(guān)的用況),*設(shè)置交互的語境,其中包括可能需要的那些對象?!鐾ㄟ^識別對象在交互中扮演的角色,在順序圖的上部列出所選定的一組對象(應(yīng)該給出其類名),并為每個(gè)對象設(shè)置生命線。通常把發(fā)起交互的對象放在左邊?!鰧τ谀切┰诮换テ陂g要被創(chuàng)建和撤銷的對象,在適當(dāng)?shù)臅r(shí)刻,用消息箭線顯式地予以指明?!鰶Q定消息將怎樣或以什么樣的序列在對象之間傳遞。通過首先發(fā)出消息的對象,看它需要哪些對象為它提供操作,它向那些對象提供操作。追蹤相關(guān)的對象,進(jìn)一步做這種模擬,直到分析完與當(dāng)前語境有關(guān)的全部對象。如果一個(gè)對象的操作在某個(gè)執(zhí)行點(diǎn)上應(yīng)該向另一個(gè)對象發(fā)消息,則從這一點(diǎn)向后者畫一條帶箭頭的直線,并在其上注明消息名。用適當(dāng)?shù)募^線區(qū)別各種消息。
按需在各對象下方的生命線上,按使用該對象操作的先后次序排列各個(gè)代表操作執(zhí)行的棒形條(執(zhí)行規(guī)約)。若出于某種目的要簡化順序圖,可不畫棒型條,或者針對一個(gè)對象只用一個(gè)棒型條代表其上的所有操作的執(zhí)行。兩個(gè)對象的操作執(zhí)行如果屬于同一個(gè)控制線程,則接收者操作的執(zhí)行應(yīng)在發(fā)送者發(fā)出消息之后開始,并在發(fā)送者結(jié)束之前結(jié)束。不同控制線程之間的消息有可能在接收者的某個(gè)操作的執(zhí)行過程中到達(dá)。如果需要,也可以對對象所執(zhí)行的操作的功能以及時(shí)間或空間約束進(jìn)行描述。如果需要,可使用結(jié)構(gòu)化控制。用途幫助分析員對照檢查每個(gè)用況中描述的用戶需求,是否已經(jīng)落實(shí)到一些對象中去實(shí)現(xiàn)。提醒分析員去補(bǔ)充遺漏的對象類或操作。通過對一個(gè)特定的對象群體的動態(tài)方面建模,深刻地理解對象之間的交互。
幫助分析員發(fā)現(xiàn)哪些對象是主動對象5.2通訊圖
簡言之,通訊圖表示圍繞著對象角色以及對象角色之間的鏈所組織的交互。
與順序圖不同:1)通訊圖著重扮演不同角色的對象之間的關(guān)系。2)通訊圖不表示作為單獨(dú)維度的時(shí)間,所以交互的順序和并發(fā)進(jìn)程必須用順序數(shù)決定。順序圖表示執(zhí)行消息的顯式順序,最好用于描述實(shí)時(shí)系統(tǒng)和復(fù)雜的場景。
一、概念與表示法
通信圖是一種強(qiáng)調(diào)發(fā)送和接收消息的對象結(jié)構(gòu)組織的交互圖,展示圍繞對象以及它們之間的連接器而組織的交互。
連接器是由關(guān)聯(lián)實(shí)例化的鏈以及通過過程參數(shù)、局部變量或全局變量而產(chǎn)生的對象之間的臨時(shí)連接。通訊圖由對象(參與者)、連接器以及連接器上的消息構(gòu)成。這些概念及表示法與前述中的都完全相同。
為表示一個(gè)消息的時(shí)間順序,給消息加一個(gè)數(shù)字前綴(從1號消息開始),在控制流中,每個(gè)新的消息的順序號單調(diào)增加(如2,3等等)。為了顯示嵌套,可使用帶小數(shù)點(diǎn)的號碼(1表示第一個(gè)消息;1.1表示嵌套在消息1中的第一個(gè)消息;1.2表示嵌套在消息1中的第二個(gè)消息;等等)。
嵌套可為任意深度。要注意的是,沿同一個(gè)鏈,可以顯示多個(gè)消息(可能發(fā)自不同的方向),并且每個(gè)消息都有唯一的一個(gè)順序號。
C:Clientt:Transactionp:ODBCProxysactioncreateSetActions(a,d,o)》SetValue(d,3.4)SetValue(a,”CO”).4){transient}c:Clientt:Transactionp:ODBCProxysaction1:create2:setAction(a,d,o)2.1:setValues(d,3.4)2.2:setValues(a,”CO”)順序圖和通訊圖在語義上是等價(jià)的,它們可以從一種形式的圖轉(zhuǎn)換為另一種。destroy3:destroy二、建立通訊圖應(yīng)遵循如下策略建立通訊圖: n
設(shè)置交互的語境,不管它是一個(gè)系統(tǒng)、子系統(tǒng)、類,還是用況的腳本。 n
通過識別對象在交互中扮演的角色,設(shè)置交互的場所。將它們作為圖的頂點(diǎn)放在通訊圖中,較重要的對象放在圖的中央,然后放置鄰近的對象。 n
若對象之間可能要傳遞消息,說明對象之間的連接器。
從引起這個(gè)交互的消息開始,然后將隨后的每個(gè)消息附到適當(dāng)?shù)倪B接器上,設(shè)置順序號。用帶小數(shù)點(diǎn)的編號來顯示嵌套。如果需要展示消息的循環(huán)或分支,就是使用相應(yīng)的表示法。
如果需要說明時(shí)間或空間約束,則用時(shí)間標(biāo)記修飾每個(gè)消息,并附上合適的時(shí)間和空間約束。
像順序圖一樣,建議一個(gè)單獨(dú)的通訊圖只描述一個(gè)控制流。一般來說,可能要建立許多通訊圖,其中一些是基本的,另一些描述的是可選擇的路徑或例外情況??梢允褂冒鼇斫M織一組通訊圖,并給每個(gè)圖起一個(gè)合適的名稱,以便與包中其它圖的相區(qū)別。5.3活動圖活動圖可用于對業(yè)務(wù)過程和操作的算法建模一、概念與表示法
活動圖顯示從活動到活動的流。1、動作和活動
動作(action)是行為規(guī)約的基礎(chǔ)單元,用以描述系統(tǒng)中的活動,它是原子的和即時(shí)的。動作是原子的,是指在與狀態(tài)相關(guān)的抽象層次上,動作是不可間斷的;動作時(shí)即時(shí)的,是指動作執(zhí)行的時(shí)間是可忽略不計(jì)的。如調(diào)用另一個(gè)操作,發(fā)送一個(gè)信號,創(chuàng)建或撤銷一個(gè)對象,或者某些純計(jì)算(例如對一個(gè)表達(dá)式求值),都是一個(gè)動作。
活動(activity)是由一系列的動作構(gòu)成的(也稱為動作表達(dá)式),用于描述系統(tǒng)的一項(xiàng)行為,它由動作和其他活動組成。在活動圖中,動作和活動具有相同的圖形表示法發(fā)送郵件審批發(fā)票活動名前置條件,后置條件………活動表示法2、控制流
當(dāng)動作或活動結(jié)束時(shí),馬上進(jìn)入下一個(gè)動作或活動。一系列的動作和活動的執(zhí)行構(gòu)成了一個(gè)控制流。在圖形上,用一個(gè)箭頭表示從一個(gè)動作或活動到下一個(gè)動作或活動的轉(zhuǎn)移開幕式比賽閉幕式控制流的分支與合并分支合并活動流控制流也可以是并發(fā)的。用同步條表示并發(fā)控制流的分岔和匯合。3、對象流定購銷售訂單分岔匯合4、泳道在對業(yè)務(wù)過程建模時(shí),可以把活動或動作分成組,每組由特定的履行者來執(zhí)行。履行者可為人員、組織或其他業(yè)務(wù)實(shí)體。把每個(gè)組分別稱為一個(gè)泳道。5、活動圖活動圖是展示從動作或活動間的控制流和對象流的圖,其中的結(jié)點(diǎn)描述動作、活動或?qū)ο螅吤枋隹刂屏骰驅(qū)ο罅?。一般用它對?jì)算過程中的步驟建模,也可用它對步驟間的數(shù)值的流動建模。上述的計(jì)算過程可為業(yè)務(wù)過程,也可為操作的算法。對于活動圖中一個(gè)活動結(jié)點(diǎn),可用另一張活動圖(子活動圖)進(jìn)行詳述。順序圖強(qiáng)調(diào)對象間的控制流,活動圖強(qiáng)調(diào)的是活動間的控制流。二、建立活動圖對業(yè)務(wù)過程建模,要遵循如下的策略:設(shè)置業(yè)務(wù)過程的語境。即要考慮在特定的語境中要對哪些業(yè)務(wù)的履行者和業(yè)務(wù)實(shí)體建模。考慮為每個(gè)重要的業(yè)務(wù)的履行者建立一個(gè)泳道。建立初始狀態(tài)和終止?fàn)顟B(tài),并識別該業(yè)務(wù)過程的前置條件和后置條件。從初始狀態(tài)開始,說明隨著時(shí)間發(fā)生的動作或活動,并在活動圖中表示它們。如果涉及到重要的對象,則把它們也加入到活動圖中。如果有必要,可展示對象的屬性值和狀態(tài)。連接這些動作和活動結(jié)點(diǎn)的流。如果需要,使用分支和合并來描述條件路徑和迭代,使用分岔和匯合來描述并發(fā)的動作或活動流。針對活動建立子活動圖。可作為用況文字描述的補(bǔ)充對一個(gè)操作建模時(shí),應(yīng)遵循如下策略:收集該操作所涉及的事物,包括操作的參數(shù)、可能的返回類型、它所屬于的類以及某些鄰近的類的特征。識別操作的前置條件和后置條件以及操作所屬的類在操作執(zhí)行期間必須保持的不變式。從該操作的初始狀態(tài)開始,按照時(shí)間順序設(shè)立活動或動作,并在活動圖中將它們表示出來。如果需要,使用分支和合并來描述條件路徑和迭代。僅當(dāng)這個(gè)操作屬于一個(gè)主動類時(shí),才在必要時(shí)用分岔和匯合來描述并發(fā)的控制流。在OOA階段,僅用活動圖對關(guān)鍵的復(fù)雜操作進(jìn)行建模,用以展示關(guān)于算法的一些信息。除非想直接從模型生成代碼,即使在OOD階段并也不要求用活動圖對每個(gè)操作的算法都建立模型。5.4狀態(tài)機(jī)圖
對在不同的狀態(tài)下發(fā)揮不同作用的復(fù)雜對象,可建立狀態(tài)機(jī)圖。對象a操作1操作2操作3操作4…操作n-1操作n對象a操作1操作2操作3操作4…操作n-1操作n對象a操作1操作2操作3操作4…操作n-1操作n……狀態(tài)1狀態(tài)2狀態(tài)m
可具有狀態(tài)機(jī)圖的事物:人員、系統(tǒng)、控制器、事務(wù)、設(shè)備等。
對事物所處的狀態(tài)及其變遷建模需要考慮:事物在其生命周期中經(jīng)歷了不同的狀態(tài);在特定的時(shí)間,一個(gè)事物精確地位于一個(gè)狀態(tài),發(fā)揮特定的作用;在現(xiàn)實(shí)世界存在著引起事物的狀態(tài)發(fā)生變化的事件;事物在其狀態(tài)間按次序轉(zhuǎn)化;事物從一個(gè)狀態(tài)到另一個(gè)狀態(tài)的轉(zhuǎn)化通常是即時(shí)的。當(dāng)事件發(fā)生時(shí),事物可能需要采取一些動作。
事物的一般生命周期形式
目前主要有兩種對生命周期進(jìn)行建模的形式:■周期性生命周期 如:飛機(jī)、微波爐■出生-死亡生命周期
若一個(gè)對象具有明確的生命期階段(狀態(tài)),且需要通過狀態(tài)分析對其復(fù)雜性進(jìn)行深刻地認(rèn)識,就可為它建立一個(gè)狀態(tài)機(jī)圖。對象1…….對象n狀態(tài)機(jī)圖1狀態(tài)機(jī)圖n類狀態(tài)機(jī)圖在實(shí)際系統(tǒng)中,無法建立全系統(tǒng)的狀態(tài)機(jī)圖。什么是對象的狀態(tài)?《對象技術(shù)詞典》的定義:對象或者類的整體行為(例如響應(yīng)消息)的某些規(guī)則所能適應(yīng)的(對象或類的)狀況、情況、條件、形式或生存周期階段?!茨撤N規(guī)定,按對象的屬性值劃分等價(jià)類例1:為“設(shè)備”對象設(shè)立一個(gè)屬性,名為“狀態(tài)”屬性值:關(guān)閉、待命、運(yùn)行、故障等。在這里,“狀態(tài)”是一個(gè)專門設(shè)置的屬性,它的值反映了實(shí)際事物的狀態(tài)。例2:一個(gè)容量為1000的棧,需要區(qū)分幾種狀態(tài)*?空半滿滿壓入彈出可執(zhí)行可執(zhí)行可執(zhí)行可執(zhí)行不可執(zhí)行不可執(zhí)行服務(wù)狀態(tài)在此例中,每一種狀態(tài)是一組使對象呈現(xiàn)共同行為規(guī)則的屬性值組合。彈出<報(bào)錯(cuò)>狀態(tài)轉(zhuǎn)換示意圖空半滿滿創(chuàng)建彈出(已空)壓入壓入(未滿)彈出(未空)壓入(已滿)彈出壓入<報(bào)錯(cuò)>狀態(tài)機(jī)圖示例一、概念與表示法1、事件從一般意義上講,事件是指在時(shí)間和空間上可以定位并具有實(shí)際意義、值得注意的所發(fā)生的事情。在OO中,事件是對一個(gè)可觀察的事情的規(guī)格說明,這種事情的發(fā)生可以引發(fā)狀態(tài)的轉(zhuǎn)換。
事件可以分為多種:
1)信號事件一個(gè)對象對一個(gè)信號實(shí)例(在不引起混淆的情況下,以下簡稱信號)的接收,導(dǎo)致一個(gè)信號事件。在一個(gè)類的符號中加一個(gè)附件的信號欄,列出其能接收的信號。信號可以作為狀態(tài)機(jī)中的狀態(tài)轉(zhuǎn)換上的動作被發(fā)送,或者作為交互中的一個(gè)消息被發(fā)送。2)調(diào)用事件對操作的調(diào)用的接收(這樣的操作由接收事件的對象實(shí)現(xiàn))調(diào)用事件一般來說是同步的3)時(shí)間事件
在指定事件(經(jīng)常是當(dāng)前狀態(tài)的入口)后,經(jīng)過了一定的時(shí)間或到了指定日期/時(shí)間,導(dǎo)致一個(gè)時(shí)間事件。時(shí)間經(jīng)歷事件用后跟有計(jì)算時(shí)間量的表達(dá)式的關(guān)鍵詞“after”表示,比如”after(從狀態(tài)A退出后經(jīng)歷了10秒)”或者“after(5秒)”。如果沒指明時(shí)間起始點(diǎn),那么從進(jìn)入當(dāng)前狀態(tài)開始計(jì)時(shí)。
使用關(guān)鍵字at來指出在某個(gè)絕對時(shí)間點(diǎn)上發(fā)生的時(shí)間事件。例如,時(shí)間事件at(1Jan2005,12:00UT)指出該事件發(fā)生在格林尼治時(shí)間2005年1月1日的中午12點(diǎn)。4)改變事件(條件變?yōu)檎媸录┯貌紶柋磉_(dá)式描述的指派條件變?yōu)檎妫蛯?dǎo)致了一個(gè)改變事件。無論表達(dá)式的值何時(shí)由假變成真,事件都發(fā)生。與改變事件關(guān)聯(lián)的布爾表達(dá)式的值變成真時(shí)事件發(fā)生一次,即使之后布爾表達(dá)式的值變?yōu)榧伲a(chǎn)生的事件仍將保持,直到它被處理為止。用后有跟布爾表達(dá)式的關(guān)鍵詞“when”表示變?yōu)檎娴臈l件,例如
when(altitude<1000)
可以把其看作是連續(xù)測試條件,直到它為真。事件的格式:事件名 ‘(‘用逗號分隔的參數(shù)列表‘)’參數(shù)的格式如下:參數(shù)名 ‘:’類型表達(dá)式參數(shù)值由監(jiān)護(hù)條件和動作表達(dá)式使用.
事件出現(xiàn)的位置:狀態(tài)內(nèi),轉(zhuǎn)換上。通常事件后面還跟有一個(gè)監(jiān)護(hù)條件(布爾表達(dá)式),當(dāng)事件出現(xiàn)要觸發(fā)轉(zhuǎn)換時(shí),對它求值:——如果表達(dá)式取值為真,則觸發(fā)轉(zhuǎn)換;——如果為假,則不觸發(fā)轉(zhuǎn)換,而且如果沒有其他的轉(zhuǎn)換被此事件所觸發(fā),則該事件丟失。2、狀態(tài)
狀態(tài)是一個(gè)對象的生命期的一個(gè)階段,在該階段中該對象要滿足一些特定的條件、執(zhí)行特定的活動或等待某個(gè)(些)事件。
把狀態(tài)表示成四角均為圓角的矩形,并把狀態(tài)的名稱放在其中。
a)
名稱分欄在該分欄中放置狀態(tài)名。沒有名稱的狀態(tài)是匿名的,但同一張圖中的匿名狀態(tài)是各不相同的。b)內(nèi)部轉(zhuǎn)換分欄用該分欄給出對象在這個(gè)狀態(tài)中所執(zhí)行的內(nèi)部動作或活動的列表。各表項(xiàng)的表示法的基本格式為:事件名[‘(’用逗號分隔的參數(shù)表‘)’][監(jiān)護(hù)條件][‘/’動作表達(dá)式]
用戶可以自己對對事件進(jìn)行命名,只是entry、exit和do這三個(gè)保留字外,因?yàn)閁ML已經(jīng)為它們規(guī)定了特定含義
?內(nèi)部轉(zhuǎn)換內(nèi)部轉(zhuǎn)換分欄中的事件的發(fā)生不會導(dǎo)致狀態(tài)的改變,也就是說,即使發(fā)生了事件且執(zhí)行了相應(yīng)的動作,對象仍然處于原來的狀態(tài),故把這樣的事件觸發(fā)的轉(zhuǎn)換稱為內(nèi)部轉(zhuǎn)換。?偽狀態(tài)
初始狀態(tài)是狀態(tài)機(jī)圖的缺省開始狀態(tài),終止?fàn)顟B(tài)是狀態(tài)機(jī)圖執(zhí)行已經(jīng)畢后的結(jié)束狀態(tài)。?延遲事件延遲事件是指在當(dāng)前狀態(tài)下暫不處理,但將推遲到該對象的另一個(gè)狀態(tài)下排隊(duì)處理的事件。也就是說,在某些建模情況下,可能想要識別某些事件,但延遲對它們的響應(yīng),直到以后才執(zhí)行。用特殊的動作defer表明一個(gè)事件被延遲:
事件/defer事件1,事件2,事件3/defer事件2,事件3/defer事件1/………事件3/………事件2,事件4/defer3、動作動作是在狀態(tài)內(nèi)或在狀態(tài)轉(zhuǎn)化時(shí)所執(zhí)行的操作,是原子的和即時(shí)的。動作可為:設(shè)置或修改本對象的屬性操作;向一個(gè)對象發(fā)送信號;調(diào)用另一個(gè)對象的一個(gè)可見性為公共操作;創(chuàng)建或撤消對象;返回一個(gè)值或值集;
……
動作是原子的,是指在與狀態(tài)相關(guān)的抽象層次上,動作是不可間斷的;動作是即時(shí)的,是指動作執(zhí)行的時(shí)間是可忽略不計(jì)的。
在轉(zhuǎn)換中、在狀態(tài)的入口、在一個(gè)對象處于一個(gè)狀態(tài)的整個(gè)期間或在狀態(tài)的出口,都是執(zhí)行動作的時(shí)機(jī)。
?動作表達(dá)式是由一些動作組成的動作序列。UML的三個(gè)保留字:1)entry/進(jìn)入動作表達(dá)式
entry這個(gè)標(biāo)號標(biāo)識由相應(yīng)的動作表達(dá)式規(guī)定的動作,在進(jìn)入狀態(tài)時(shí)首先執(zhí)行該動作。它不能有參數(shù)或監(jiān)護(hù)條件。
2)exit/退出動作表達(dá)式
exit這個(gè)標(biāo)號標(biāo)識由相應(yīng)的動作表達(dá)式規(guī)定的動作,在退出狀態(tài)時(shí)最后執(zhí)行該動作。它不能有參數(shù)或監(jiān)護(hù)條件。
3)do/活動
活動是在對象處于一個(gè)狀態(tài)中的整個(gè)階段執(zhí)行的一個(gè)動作或動作的集合。如:op1(a);op2(b);op3(c)
活動不是原子的,在執(zhí)行中可以被事件打斷。動作是從不中斷的,但動作序列是會中斷的。也即,在每兩個(gè)動作之間(由分號分開),由于事件的出現(xiàn),導(dǎo)致一個(gè)離開此狀態(tài)的轉(zhuǎn)換。對象“電影院”do/放映影片
do這個(gè)標(biāo)號標(biāo)識正在進(jìn)行的活動(“do活動”)。活動是一個(gè)動作表達(dá)式,它在執(zhí)行中可以被事件中斷。
do活動在狀態(tài)的入口動作執(zhí)行后開始執(zhí)行,并且它與其他的動作或活動是并發(fā)的?!灰唤5膶ο笫窃诋?dāng)前的狀態(tài)中,就執(zhí)行這個(gè)活動,直到對象離開該狀態(tài)為止?!鬱o活動執(zhí)行完畢后對象仍處于當(dāng)前狀態(tài),這時(shí)會導(dǎo)致一個(gè)完成事件,如果存在一條外出的完成轉(zhuǎn)移,若滿足監(jiān)護(hù)條件就退出當(dāng)前狀態(tài)?!绻诨顒記]未完成之前,由于外出轉(zhuǎn)換的激發(fā)(滿足監(jiān)護(hù)條件)而導(dǎo)致了狀態(tài)的退出,就中斷活動。EnterPasswordentry/password.reset()exit/password.test()digit/handlecharacterclear/password.reset()help/displayhelpprint/deferdo/suppressecho內(nèi)部轉(zhuǎn)換延遲事件內(nèi)部活動入口和出口動作“打印機(jī)管理器”的待機(jī)恢復(fù)狀態(tài)4、狀態(tài)轉(zhuǎn)換
狀態(tài)轉(zhuǎn)換是兩個(gè)狀態(tài)之間的一種關(guān)系,表示當(dāng)一個(gè)特定事件出現(xiàn)時(shí),如果滿足一定的條件,對象就從第一個(gè)狀態(tài)(源狀態(tài))進(jìn)入第二個(gè)狀態(tài)(目標(biāo)狀態(tài)),并執(zhí)行一定的動作。轉(zhuǎn)換本身也是原子的。源狀態(tài)目標(biāo)狀態(tài)事件名[‘(’用逗號分隔的參數(shù)表‘)’][監(jiān)護(hù)條件][‘/’動作表達(dá)式]事件可能有參數(shù),這樣的參數(shù)可由轉(zhuǎn)換中的監(jiān)護(hù)條件和動作使用,也可由與源狀態(tài)和目標(biāo)狀態(tài)相關(guān)的退出和進(jìn)入動作分別使用。觸發(fā)自身轉(zhuǎn)換,要先退出當(dāng)前狀態(tài),再進(jìn)入該狀態(tài),這樣要執(zhí)行退出動作和進(jìn)入動作。觸發(fā)內(nèi)部轉(zhuǎn)換,不需要退出當(dāng)前狀態(tài)。5、狀態(tài)機(jī)圖
一個(gè)狀態(tài)機(jī)圖描述一個(gè)對象在其生命期內(nèi)響應(yīng)事件所經(jīng)歷的狀態(tài)序列,以及對這些事件所做出的反應(yīng)。
通常用狀態(tài)機(jī)圖描述類的行為,也可以用它描述其它模型實(shí)體(如用況、參與者、子系統(tǒng))的行為。
initializingActiveidleCommandafter(10秒)/selfTestattentionclearingattentionalarm(s)例題1下圖描述了一個(gè)負(fù)責(zé)監(jiān)視某些傳感器的控制器的狀態(tài)機(jī)。clearing如果事件有參數(shù),可以把參數(shù)用在動作表達(dá)式中。例題2繪制一個(gè)狀態(tài)機(jī)圖,它能分析如下格式的字符流:
‘<’標(biāo)記串‘>’字母串;如deFC<ejb-name>Account;WaitingGettingTokenGettingBodyPut(c)[c/=‘<‘]/returnfalsePut(c)[c==‘<“]Put(c)[c/=‘>’]/token.append(c);returnfalsePut(c)[c/=‘;’]/body.append(c);returnfalsePut(c)[c==‘;‘]/returntruePut(c)[c==‘>“]根據(jù)觸發(fā)事件的參數(shù)和擁有這個(gè)狀態(tài)機(jī)的對象的屬性和鏈來書寫監(jiān)護(hù)條件和動作。如果監(jiān)護(hù)條件不同,相同的事件名可以出現(xiàn)多次,當(dāng)該事件發(fā)生時(shí),根據(jù)監(jiān)護(hù)條件決定觸發(fā)那個(gè)轉(zhuǎn)換。analyzerPutreturntokenappendbodyappend空閑、門開entry/開燈烹飪完成entry/關(guān)燈entry/關(guān)功率管entry/發(fā)滴滴聲空閑、門關(guān)entry/關(guān)燈烹飪中斷entry/關(guān)功率管entry/清除計(jì)時(shí)器延長烹飪entry/計(jì)時(shí)器增1分鐘初始烹飪entry/設(shè)置定時(shí)器entry/開功率管entry/開燈開門關(guān)門開門關(guān)門按按紐開門按按紐開門按按紐定時(shí)器時(shí)間到定時(shí)器時(shí)間到例題3為簡易微波爐(只有一個(gè)按鈕)建模6、組合狀態(tài)上面講述的狀態(tài)機(jī)圖中的狀態(tài)都是簡單狀態(tài)。例如,下圖中的狀態(tài)Active是一個(gè)組合狀態(tài)。其中DialTone和Timeout等狀態(tài)均為Active的子狀態(tài)。(1)語義
組合狀態(tài)是由兩個(gè)或多個(gè)子狀態(tài)構(gòu)成的狀態(tài),其中的子狀態(tài)是順序的或并發(fā)的,而且子狀態(tài)還可以是組合狀態(tài)。新創(chuàng)建的對象,從最外層的初始偽狀態(tài)開始,執(zhí)行其最外層的缺省轉(zhuǎn)換。若對象轉(zhuǎn)換到了最外層的終結(jié)狀態(tài),則對象的生命期終止?!粋€(gè)狀態(tài)內(nèi)的各區(qū)域可以有初始偽狀態(tài)和終止?fàn)顟B(tài)。到封閉狀態(tài)的轉(zhuǎn)換表示到其初始偽狀態(tài)的轉(zhuǎn)換。到最終狀態(tài)的轉(zhuǎn)換表示封閉區(qū)域中的活動的完成。在所有并發(fā)區(qū)域中的活動的完成,表示經(jīng)由封閉狀態(tài)的活動的完成,并觸發(fā)封閉狀態(tài)上的完成事件。(2)表示法把組合狀態(tài)展開是為了表示它的內(nèi)部狀態(tài)機(jī)結(jié)構(gòu)。除了(可選的)名稱和內(nèi)部轉(zhuǎn)換分欄外,狀態(tài)可以包含容納嵌套圖的附加分欄。通過在圖形區(qū)域里顯示嵌套狀態(tài)機(jī)圖,把狀態(tài)展開,表示其不相交(順序)的子狀態(tài)。順序子狀態(tài)示意圖
并發(fā)子狀態(tài)示意圖從帶有并發(fā)組合狀態(tài)內(nèi)的任一狀態(tài)離開的轉(zhuǎn)移導(dǎo)致離開所有的其他并發(fā)區(qū)域。這種轉(zhuǎn)移通常表示有錯(cuò)誤發(fā)生或例外發(fā)生,從而迫使所有并發(fā)計(jì)算都被中斷。用虛線劃分圖形區(qū)域,每個(gè)區(qū)域都是一個(gè)并發(fā)的子狀態(tài)。每個(gè)區(qū)域有一個(gè)可選的名稱,但必須包含一張具有不相交狀態(tài)的狀態(tài)機(jī)圖。用實(shí)線把整個(gè)狀態(tài)的名稱分欄和內(nèi)部轉(zhuǎn)換分欄與并發(fā)的子狀態(tài)相分離。5.3.2建立狀態(tài)機(jī)圖對對象的狀態(tài)變遷建模,應(yīng)遵循如下策略:n
設(shè)置狀態(tài)機(jī)的語境
考慮在特定語境中哪些對象與該對象交互,包括這個(gè)對象的類的所有的一般類和通過依賴或關(guān)聯(lián)到達(dá)的所有類。這些鄰居是動作的侯選目標(biāo)或在監(jiān)護(hù)條件中包含的侯選項(xiàng)。n
建立初始狀態(tài)和終止?fàn)顟B(tài)。n
選定對象中的一組有意義的對對象狀態(tài)有影響的屬性,結(jié)合有關(guān)的事件和動作,對象可能在其中存在各段時(shí)間的條件,以決定該對象所在的穩(wěn)定狀態(tài)。n
在對象的整個(gè)生命期中,決定穩(wěn)定狀態(tài)的有意義的偏序。從初態(tài)開始到終態(tài),列出這個(gè)對象可能處于的頂層狀態(tài)n
決定這個(gè)對象可能響應(yīng)的事件??稍趯ο蟮慕涌谔幇l(fā)現(xiàn)事件,并給出一個(gè)唯一的名字。這些事件可能觸發(fā)從一個(gè)合法狀態(tài)到另一個(gè)合法狀態(tài)的轉(zhuǎn)換。n用被適當(dāng)?shù)氖录|發(fā)的轉(zhuǎn)換將這些狀態(tài)連接起來,接著向這些轉(zhuǎn)換中添加事件、監(jiān)護(hù)條件或動作。對于內(nèi)部轉(zhuǎn)換也是如此。n
識別各狀態(tài)的進(jìn)入或退出的動作n如果需要,從這個(gè)對象的高層狀態(tài)開始,然后考慮各自的可能子狀態(tài),用子狀態(tài)進(jìn)行擴(kuò)充。
n
檢查l
檢查在狀態(tài)機(jī)中提到的所有事件是否和該對象所期望的事件相匹配。類似地,檢查該對象的所期望的所有事件,是否都被狀態(tài)機(jī)所處理。l
檢查在狀態(tài)機(jī)中提到的所有動作是否被閉合對象的關(guān)系和操作所支持。l
通過狀態(tài)機(jī),跟蹤檢查事件的順序和它們的響應(yīng),尤其要努力地尋找那些未達(dá)到的狀態(tài)和導(dǎo)致狀態(tài)機(jī)不能走通的狀態(tài)。l在重新安排狀態(tài)機(jī)后,按所期望的順序再一次檢查,以確保你沒有改變該對象的語義。
5.5包圖
對一個(gè)較為復(fù)雜的系統(tǒng)建模,要使用大量的模型元素,這時(shí)就必要把這些元素分組進(jìn)行組織。這樣把在語義上接近且傾向于一起變化的模型組織在一起,不但控制模型的復(fù)雜度,有助于理解,而且也有助于按組控制元素的可見性。7.3.1概念與表示法
包是對模型元素分組的機(jī)制。使用包的最常見目的是把建模元素組織成為組,作為一個(gè)集合進(jìn)行命名和處理。包可以擁有類、接口、構(gòu)件、節(jié)點(diǎn)、用況和圖,甚至可以是其它包。擁有是一種組成關(guān)系,這意味著被擁有的元素被聲明在包中。如果包被撤消了,元素也要被撤消?!且粋€(gè)命名空間,一個(gè)元素只能被一個(gè)包所擁有。
設(shè)計(jì)良好的包,把在語義上接近并傾向于一起變化的元素組織在一起。因此結(jié)構(gòu)良好的包是松耦合、高內(nèi)聚的,而且對其內(nèi)容的訪問具有嚴(yán)密的控制。
包的層次性因?yàn)榘羞€可以有包,這樣包之間可以有一個(gè)層次,且在組織結(jié)構(gòu)上是一棵嚴(yán)格的樹。在實(shí)際使用中,最好要避免過深地嵌套包,一般兩、三層即可。對過多的嵌套,要用“引入依賴”來組織包。
類名類名······類名······包名包名包名對包中元素的命名一個(gè)包形成了一個(gè)命名空間,這意味著在一個(gè)包的語境中同一種元素的名字必須是唯一的。例如,同一個(gè)包不能擁有兩個(gè)名為Queue的類,但在P1包中可以有一個(gè)名為Queue的類,而在P2包中又有另一個(gè)(不同的)名為Queue的類。實(shí)際上,類P1::Queue和類P2::Queue是不同的類,這可以由各自的路徑名區(qū)別開來。如果一個(gè)包位于另一個(gè)包中,外層的包可作為里層包的前綴。例如,在包Vision中有一個(gè)名為Camera的類,而包Vision又在包Sensor中。類Camera的全名為Sensor::Vision::camera。在一個(gè)包中不同種類的元素可以有相同的名字。這樣,在同一個(gè)包中,對一個(gè)類命名為Timer,對一個(gè)構(gòu)件也可以命名為Timer。為了不造成混亂,最好對一個(gè)包中所有元素也都唯一地命名。
如果包的內(nèi)容沒有被顯示在大矩形中,那么可以把該包的名字放在大矩形中。如果包的內(nèi)容被顯示在大矩形中,那么可以把該包的名字放在左上角的小矩形中。包中元素的可見性一個(gè)包中的元素在包外的可見性,通過在元素名字前加上一個(gè)可見性符號來指示。模型元素的可見性可為+(公共的)、-(私有的)、#(受保護(hù)的)或~(包范圍的),它們的含義為:+:標(biāo)有“+”號的模型元素對所有的引入包以及它們的后代是可見的。包的各公共部分一同構(gòu)成包的接口。-:標(biāo)有“-”號的模型元素只對包內(nèi)的元素是可見的。#:標(biāo)有“#”號的模型元素只對那些與包
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024智慧城市交通信號控制系統(tǒng)優(yōu)化合同
- 2025年度橙子包裝設(shè)計(jì)與定制生產(chǎn)合同2篇
- 2025年度環(huán)保設(shè)備銷售與服務(wù)合同4篇
- 2024版人身損害賠償協(xié)議
- 二零二四年外墻清洗專業(yè)團(tuán)隊(duì)服務(wù)合同樣本3篇
- 2024-2025學(xué)年高中地理第一章環(huán)境與環(huán)境問題第一節(jié)我們周圍的環(huán)境課時(shí)分層作業(yè)含解析新人教版選修6
- 二零二五版城市綜合體土方運(yùn)輸與臨時(shí)堆場租賃合同3篇
- 二零二五年度餐飲業(yè)人力資源派遣合同范本3篇
- 2025年特色小鎮(zhèn)物業(yè)經(jīng)營權(quán)及配套設(shè)施合作合同3篇
- 二零二五版科技公司股份交易與稅收籌劃合同3篇
- 2024年09月2024興業(yè)銀行總行崗測評筆試歷年參考題庫附帶答案詳解
- 山東省煙臺市招遠(yuǎn)市2024-2025學(xué)年九年級上學(xué)期期末考試英語(筆試)試題(含答案)
- 2025年安徽銅陵市公安局第二批輔警招聘158人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 駱駝祥子讀書筆記一至二十四章
- 急診科輸液的規(guī)律護(hù)理
- 商會年會策劃方案范例(3篇)
- 2022年公務(wù)員多省聯(lián)考《申論》真題(安徽C卷)及答案解析
- 【高考語文】2024年全國高考新課標(biāo)I卷-語文試題評講
- 大型活動保安培訓(xùn)
- 中心食堂(蔬菜類、豆制品、畜肉、禽肉類、水產(chǎn)類) 投標(biāo)方案(技術(shù)方案)
- 信息系統(tǒng)運(yùn)維服務(wù)類合同6篇
評論
0/150
提交評論