軟件工程第15章_第1頁(yè)
軟件工程第15章_第2頁(yè)
軟件工程第15章_第3頁(yè)
軟件工程第15章_第4頁(yè)
軟件工程第15章_第5頁(yè)
已閱讀5頁(yè),還剩192頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第15章統(tǒng)一建模語(yǔ)言UML概述15.1靜態(tài)建模機(jī)制15.2動(dòng)態(tài)建模機(jī)制15.3小結(jié)15.6使用和擴(kuò)展UML15.5描述物理架構(gòu)的機(jī)制15.4面向?qū)ο蠓治雠c設(shè)計(jì)方法的發(fā)展在20世紀(jì)80年代末到90年代中出現(xiàn)了一個(gè)高潮,統(tǒng)一建模語(yǔ)言UML就是這個(gè)高潮的產(chǎn)物。

UML是由面向?qū)ο蠓椒I(lǐng)域的三位著名專家GradyBooch,JamesRumbaugh和IvarJacobson提出的,不僅統(tǒng)一了他們?nèi)说谋硎痉椒ǎ胰谌肓吮姸鄡?yōu)秀的軟件方法和思想,從而把面向?qū)ο蠓椒ㄌ岣叩揭粋€(gè)嶄新的高度,標(biāo)志著面向?qū)ο蠼7椒ㄟM(jìn)入了第三代。

UML已得到許多世界知名公司的使用和支持,并于1997年11月17日被OMG組織采納,成為面向?qū)ο蠼5臉?biāo)準(zhǔn)語(yǔ)言。目前,OMG已經(jīng)把UML作為公共可得到的規(guī)格說(shuō)明提交給國(guó)際標(biāo)準(zhǔn)化組織進(jìn)行國(guó)際標(biāo)準(zhǔn)化,這一進(jìn)程在近期完成后UML將最終成為信息技術(shù)的正式國(guó)際標(biāo)準(zhǔn)。

四年來(lái),UML已經(jīng)迅速成長(zhǎng)為一個(gè)事實(shí)上的工業(yè)標(biāo)準(zhǔn)。不論在計(jì)算機(jī)學(xué)術(shù)界、軟件產(chǎn)業(yè)界還是在商業(yè)界,UML已經(jīng)逐漸成為人們?yōu)楦鞣N系統(tǒng)建模、描述系統(tǒng)體系結(jié)構(gòu)、商業(yè)體系結(jié)構(gòu)和商業(yè)過(guò)程時(shí)使用的統(tǒng)一工具,而且在實(shí)踐過(guò)程中人們還在不斷擴(kuò)展它的應(yīng)用領(lǐng)域。15.1概述

15.1.1UML的產(chǎn)生和發(fā)展15.1.2UML的結(jié)構(gòu)

UML是一種標(biāo)準(zhǔn)的圖形化(即可視化)建模語(yǔ)言,它由圖和元模型組成。圖是UML的語(yǔ)法,而元模型給出圖的含義,是UML的語(yǔ)義。

1.UML的語(yǔ)義

UML的語(yǔ)義是定義在一個(gè)四層(四個(gè)抽象級(jí)別)建模概念框架中的,這四層分別是:

(1)元元模型(meta_metamodel)層

由UML最基本的元素“事物(thing)”組成,代表要定義的所有事物。

(2)元模型(metamodel)層由UML基本元素組成,包括面向?qū)ο蠛兔嫦驑?gòu)件的概念。這一層的每個(gè)概念都是元元模型中“事物”概念的實(shí)例(通過(guò)版類化)。

(3)模型(model)層由UML模型組成,這一層的每個(gè)概念都是元模型層中概念的實(shí)例(通過(guò)版類化)。這一層的模型通常稱為類模型或類型模型。

(4)用戶模型(usermodel)層由UML模型的例子組成,這一層中的每個(gè)概念都是模型層的一個(gè)實(shí)例(通過(guò)分類),也是元模型層模型的一個(gè)實(shí)例(通過(guò)版類化)。這一層的模型通常稱為對(duì)象模型或?qū)嵗P汀?/p>

2.UML的表示法

UML由視圖(view)、圖(diagram)、模型元素(modelelement)和通用機(jī)制(generalmechanism)等幾個(gè)部分組成。

(1)視圖為了完整地描述一個(gè)系統(tǒng),往往需要描述該系統(tǒng)的許多方面。用視圖可以表示被建模系統(tǒng)的各個(gè)方面,也就是說(shuō),從不同目的出發(fā)可以為系統(tǒng)建立多個(gè)模型,這些模型都描述同一個(gè)系統(tǒng),只是描述的角度不同,它們之間具有一致性。

(2)圖圖是用來(lái)表達(dá)一個(gè)視圖的內(nèi)容的,通常,一個(gè)視圖由多張圖組成。UML語(yǔ)言共定義了9種不同的圖,把它們有機(jī)地結(jié)合起來(lái)就可以描述系統(tǒng)的所有視圖。

(3)模型元素可以在圖中使用的概念(例如,用例、類、對(duì)象、消息和關(guān)系),統(tǒng)稱為模型元素。模型元素在圖中用相應(yīng)的視圖元素(圖形符號(hào))表示。一個(gè)模型元素可以用在多個(gè)不同的圖中,不管怎樣使用,它總是具有相同的含義和相同的符號(hào)表示。

(4)通用機(jī)制

UML語(yǔ)言利用通用機(jī)制為圖附加一些額外的信息,比如,可以在“筆記”中書寫注釋,或用“標(biāo)簽值”說(shuō)明模型元素的性質(zhì)等。此外,它還提供擴(kuò)展機(jī)制(例如,版類、標(biāo)簽值、約束),使UML能夠適應(yīng)一種特殊方法或滿足某些特殊用戶的需要。

15.1.3UML的圖

1.用例圖(use-casediagram)

用例是對(duì)系統(tǒng)提供的功能(即系統(tǒng)的具體用法)的描述。用例圖從用戶的角度描述系統(tǒng)功能,并指出各個(gè)功能的操作者。用例圖定義了系統(tǒng)的功能需求。

2.靜態(tài)圖(staticdiagram)

這類圖描述系統(tǒng)的靜態(tài)結(jié)構(gòu),屬于這類圖的有類圖(classdiagram)和對(duì)象圖(objectdiagram)。類圖不僅定義系統(tǒng)中的類,表示類與類之間的關(guān)系(例如,關(guān)聯(lián)、依賴、泛化和細(xì)化等關(guān)系),也表示類的內(nèi)部結(jié)構(gòu)(類的屬性和操作)。類圖描述的是一種靜態(tài)關(guān)系,在系統(tǒng)的整個(gè)生命期內(nèi)都是有效的。

對(duì)象圖是類圖的實(shí)例,它使用幾乎與類圖完全相同的圖示符號(hào)。兩者之間的差別在于,對(duì)象圖表示的是類的多個(gè)對(duì)象實(shí)例,而不是實(shí)際的類。由于對(duì)象有生命周期,因此對(duì)象圖只能在系統(tǒng)的某個(gè)時(shí)間段內(nèi)存在。一般說(shuō)來(lái),對(duì)象圖沒(méi)有類圖重要,它主要用來(lái)幫助對(duì)類圖的理解,也可用在協(xié)作圖中,表示一組對(duì)象之間的動(dòng)態(tài)協(xié)作關(guān)系。

3.行為圖(behaviordiagram)

這類圖描述系統(tǒng)的動(dòng)態(tài)行為和組成系統(tǒng)的對(duì)象間的交互關(guān)系,包括狀態(tài)圖(statediagram)和活動(dòng)圖(activitydiagram)兩種圖形。狀態(tài)圖描述類的對(duì)象可能具有的所有狀態(tài),以及引起狀態(tài)變化的事件,狀態(tài)變化稱作狀態(tài)轉(zhuǎn)換。通常,狀態(tài)圖是對(duì)類圖的補(bǔ)充。實(shí)際使用時(shí),并不需要為每個(gè)類都畫狀態(tài)圖,僅需要為那些有多個(gè)狀態(tài),且其行為在不同狀態(tài)有所不同的類畫狀態(tài)圖。

活動(dòng)圖描述為滿足用例要求而進(jìn)行的動(dòng)作以及動(dòng)作間的關(guān)系?;顒?dòng)圖是狀態(tài)圖的一個(gè)變種,它是另一種描述交互的方法。

4.交互圖(interactivediagram)

這類圖描述對(duì)象間的交互關(guān)系,包括順序圖(sequencediagram)和協(xié)作圖(collaborationdiagram)兩種圖形。順序圖顯示若干個(gè)對(duì)象間的動(dòng)態(tài)協(xié)作關(guān)系,它強(qiáng)調(diào)對(duì)象之間發(fā)送消息的先后次序,描述對(duì)象之間的交互過(guò)程。

協(xié)作圖與順序圖類似,也描述對(duì)象間的動(dòng)態(tài)協(xié)作關(guān)系。除了顯示對(duì)象間發(fā)送的消息之外,協(xié)作圖還顯示對(duì)象及它們之間的關(guān)系(稱為上下文相關(guān))。

由于順序圖和協(xié)作圖都描述對(duì)象間的交互關(guān)系,所以建模者可以選擇其中一種表示對(duì)象間的協(xié)作關(guān)系:如果需要強(qiáng)調(diào)時(shí)間和順序,最好選用順序圖;如果需要強(qiáng)調(diào)上下文相關(guān),最好選擇協(xié)作圖。

5.實(shí)現(xiàn)圖(implementationdiagram)

這類圖提供關(guān)于系統(tǒng)實(shí)現(xiàn)方面的信息,構(gòu)件圖(componentdiagram)和配置圖(deploymentdiagram)屬于這類圖。構(gòu)件圖描述代碼構(gòu)件的物理結(jié)構(gòu)及各個(gè)構(gòu)件之間的依賴關(guān)系。構(gòu)件可能是源代碼、二進(jìn)制文件或可執(zhí)行文件。使用構(gòu)件圖有助于分析和理解構(gòu)件之間的相互影響。

配置圖定義系統(tǒng)中軟件和硬件的物理體系結(jié)構(gòu)。通常,配置圖中顯示實(shí)際的計(jì)算機(jī)和設(shè)備(用節(jié)點(diǎn)表示),以及各個(gè)節(jié)點(diǎn)之間的連接關(guān)系,也可以顯示連接的類型及構(gòu)件之間的依賴關(guān)系。在節(jié)點(diǎn)內(nèi)部顯示可執(zhí)行的構(gòu)件和對(duì)象,以清晰地表示出哪個(gè)軟件單元運(yùn)行在哪個(gè)節(jié)點(diǎn)上。

15.1.4UML的應(yīng)用領(lǐng)域

UML是一種建模語(yǔ)言,是一種標(biāo)準(zhǔn)的表示方法,而不是一種完整的方法學(xué)。因此,人們可以用各種方法使用UML,無(wú)論采用何種方法,它們的基礎(chǔ)都是UML的圖,這就是UML的最終用途——為不同領(lǐng)域的人提供統(tǒng)一的交流方法。

UML適用于系統(tǒng)開發(fā)的全過(guò)程,它的應(yīng)用貫穿于從需求分析到系統(tǒng)建成后測(cè)試的各個(gè)階段。

·需求分析:可以用用例來(lái)捕獲用戶的需求。通過(guò)用例建模,可以描述對(duì)系統(tǒng)感興趣的外部角色及其對(duì)系統(tǒng)的功能要求(用例)。

·分析:分析階段主要關(guān)心問(wèn)題域中的基本概念(例如,抽象、類和對(duì)象等)和機(jī)制,需要識(shí)別這些類以及它們相互間的關(guān)系,可以用UML的邏輯視圖和動(dòng)態(tài)視圖來(lái)描述。類圖描述系統(tǒng)的靜態(tài)結(jié)構(gòu),協(xié)作圖、順序圖、活動(dòng)圖和狀態(tài)圖描述系統(tǒng)的動(dòng)態(tài)行為。在這個(gè)階段只為問(wèn)題域的類建模,而不定義軟件系統(tǒng)的解決方案細(xì)節(jié)(例如,處理用戶接口、數(shù)據(jù)庫(kù)、通信和并行性等問(wèn)題的類)。

·設(shè)計(jì):把分析階段的結(jié)果擴(kuò)展成技術(shù)解決方案,加入新的類來(lái)定義軟件系統(tǒng)的技術(shù)方案細(xì)節(jié)。設(shè)計(jì)階段用和分析階段類似的方式使用UML。

·構(gòu)造(編碼):這個(gè)階段的任務(wù)是把來(lái)自設(shè)計(jì)階段的類轉(zhuǎn)換成某種面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的代碼。

·測(cè)試:對(duì)系統(tǒng)的測(cè)試通常分為單元測(cè)試、集成測(cè)試、系統(tǒng)測(cè)試和驗(yàn)收測(cè)試等幾個(gè)不同的步驟。UML模型可作為測(cè)試階段的依據(jù),不同測(cè)試小組使用不同的UML圖作為他們工作的依據(jù):?jiǎn)卧獪y(cè)試使用類圖和類規(guī)格說(shuō)明;集成測(cè)試使用構(gòu)件圖和協(xié)作圖;系統(tǒng)測(cè)試使用用例圖來(lái)驗(yàn)證系統(tǒng)的行為;驗(yàn)收測(cè)試由用戶進(jìn)行,用與系統(tǒng)測(cè)試類似的方法,驗(yàn)證系統(tǒng)是否滿足在分析階段確定的所有需求。

總之,統(tǒng)一建模語(yǔ)言UML適用于以面向?qū)ο蠓椒▉?lái)描述任何類型的系統(tǒng),而且適用于系統(tǒng)開發(fā)的全過(guò)程,從需求規(guī)格描述直到系統(tǒng)建成后的測(cè)試和維護(hù)階段。15.2靜態(tài)建模機(jī)制任何建模語(yǔ)言都以靜態(tài)建模機(jī)制為基礎(chǔ),UML也不例外。UML的靜態(tài)建模機(jī)制包括用例圖、類圖、對(duì)象圖和包等。

15.2.1用例圖

1.用例模型

用例模型描述的是外部執(zhí)行者(actor)所理解的系統(tǒng)功能。用例模型用于需求分析階段,它的建立是系統(tǒng)開發(fā)者和用戶反復(fù)討論的結(jié)果,描述了開發(fā)者和用戶對(duì)需求規(guī)格達(dá)成的共識(shí)。首先,它描述了待開發(fā)系統(tǒng)的功能需求;其次,它把系統(tǒng)看作黑盒子,從外部執(zhí)行者的角度來(lái)理解系統(tǒng);第三,它驅(qū)動(dòng)了需求分析之后各階段的開發(fā)工作,不僅在開發(fā)過(guò)程中保證了系統(tǒng)所有功能的實(shí)現(xiàn),而且被用于驗(yàn)證和檢測(cè)所開發(fā)的系統(tǒng),從而影響到開發(fā)工作的各個(gè)階段和UML的各個(gè)模型。

在UML中,一個(gè)用例模型由若干個(gè)用例圖來(lái)描述,用例圖的主要元素是用例和執(zhí)行者。

2.用例一個(gè)用例實(shí)質(zhì)上是用戶與計(jì)算機(jī)系統(tǒng)之間的一次典型的交互作用,它代表的是系統(tǒng)的一個(gè)完整的功能。在UML中把用例定義成系統(tǒng)執(zhí)行的一系列動(dòng)作,動(dòng)作的結(jié)果能被外部執(zhí)行者察覺(jué)到。

在UML用例圖中,用例表示為一個(gè)橢圓。圖15.1是自動(dòng)售貨機(jī)系統(tǒng)的用例圖,其中“售貨”、“供貨”和“取貨款”都是典型的用例。概括地說(shuō),用例有以下特點(diǎn)。

·用例代表某些用戶可見(jiàn)的功能,實(shí)現(xiàn)一個(gè)具體的用戶目標(biāo)。

·用例由執(zhí)行者激活,并提供確切的值給執(zhí)行者。

·用例可大可小,但它必須是對(duì)一個(gè)具體的用戶目標(biāo)實(shí)現(xiàn)的完整描述。圖15.1自動(dòng)售貨機(jī)系統(tǒng)用例圖

3.執(zhí)行者執(zhí)行者是與系統(tǒng)交互的人或物,它代表外部實(shí)體,例如,用戶、硬件設(shè)備或與本系統(tǒng)交互的另一個(gè)軟件系統(tǒng)。使用用例并與系統(tǒng)交互的任何人或物都是執(zhí)行者。

實(shí)踐表明,執(zhí)行者對(duì)確定用例是非常有用的。面對(duì)一個(gè)大型、復(fù)雜的系統(tǒng),要列出用例清單往往很困難,這時(shí)可以先列出執(zhí)行者清單,再針對(duì)每個(gè)執(zhí)行者列出它的用例。這樣做可以使問(wèn)題變得容易很多。

4.用例之間的關(guān)系用例之間可以有擴(kuò)展、使用和組合三種關(guān)系。擴(kuò)展和使用是繼承關(guān)系(即泛化關(guān)系)的兩種不同形式。組合則是把相關(guān)的用例打成包(參見(jiàn)15.2.2節(jié)),當(dāng)作一個(gè)整體看待。

(1)擴(kuò)展關(guān)系向一個(gè)用例中加入一些新的動(dòng)作后構(gòu)成了另一個(gè)用例,這兩個(gè)用例之間的關(guān)系就是擴(kuò)展關(guān)系,后者通過(guò)繼承前者的一些行為得來(lái),通常把后者稱為擴(kuò)展用例。

(2)使用關(guān)系當(dāng)一個(gè)用例使用另一個(gè)用例時(shí),這兩個(gè)用例之間就構(gòu)成了使用關(guān)系。圖15.2含擴(kuò)展和使用關(guān)系的用例圖

5.建立用例模型幾乎在任何情況下都需要使用用例,通過(guò)用例可以獲取用戶需求,規(guī)劃和控制項(xiàng)目。獲取用例是需求分析階段的主要工作之一,而且是首先要做的工作。大部分用例將在項(xiàng)目的需求分析階段產(chǎn)生,并且隨著開發(fā)工作的深入還會(huì)發(fā)現(xiàn)更多用例,這些新發(fā)現(xiàn)的用例都應(yīng)及時(shí)補(bǔ)充進(jìn)已有的用例集中。用例集中的每個(gè)用例都是對(duì)系統(tǒng)的一個(gè)潛在的需求。

(1)發(fā)現(xiàn)執(zhí)行者為獲取用例首先要找出系統(tǒng)的執(zhí)行者,可以通過(guò)請(qǐng)系統(tǒng)的用戶回答一些問(wèn)題的辦法來(lái)發(fā)現(xiàn)執(zhí)行者。

(2)獲取用例事實(shí)上,從識(shí)別執(zhí)行者起獲取用例的過(guò)程就已經(jīng)開始了。一旦識(shí)別出了執(zhí)行者,就可以對(duì)每個(gè)執(zhí)行者提出問(wèn)題以獲取用例。

15.2.2類圖和對(duì)象圖

1.類圖類圖描述類和類與類之間的靜態(tài)關(guān)系,它是從靜態(tài)角度表示系統(tǒng)的,因此類圖屬于一種靜態(tài)模型。類圖是構(gòu)建其他圖的基礎(chǔ),沒(méi)有類圖就沒(méi)有狀態(tài)圖、協(xié)作圖等其他圖,也就無(wú)法表示系統(tǒng)其他方面的特性。

(1)定義類

(2)類的屬性

UML描述屬性的語(yǔ)法格式為:可見(jiàn)性屬性名:類型名=初值{性質(zhì)串}

其中,屬性名和類型名必須有,其他部分根據(jù)需要可有可無(wú)。圖15.3類的圖形符號(hào)屬性的可見(jiàn)性(即可訪問(wèn)性)通常分為三種:公有的(public)、私有的(private)和保護(hù)的(protected),分別用加號(hào)(+)、減號(hào)(-)和井號(hào)(#)表示。如果在屬性名前面沒(méi)有標(biāo)注任何符號(hào),則表示該屬性的可見(jiàn)性尚未定義。注意,這里沒(méi)有缺省的可見(jiàn)性。

屬性名和類型名之間用冒號(hào)(:)分隔。類型名表示該屬性的數(shù)據(jù)類型,它可以是基本數(shù)據(jù)類型,如整數(shù)、實(shí)數(shù)、布爾型等,也可以是用戶自定義的類型,一般說(shuō)來(lái),可用的類型由所涉及的程序設(shè)計(jì)語(yǔ)言決定。屬性的缺省值用初值表示,類型名和初值之間用等號(hào)隔開。

最后是用花括號(hào)括起來(lái)的性質(zhì)串,列出該屬性所有可能的取值。枚舉類型的屬性經(jīng)常使用性質(zhì)串,串中每個(gè)枚舉值之間用逗號(hào)分隔。

當(dāng)然,也可以用性質(zhì)串說(shuō)明該屬性的其他信息,比如,約束說(shuō)明{只讀}表明該屬性是只讀屬性。例如,“發(fā)貨單”類的屬性“管理員”,在UML類圖中像下面那樣描述:

-管理員:String=“未定”

(3)類的操作

UML描述操作的語(yǔ)法格式為:可見(jiàn)性操作名(參數(shù)表):返回值類型{性質(zhì)串}其中,可見(jiàn)性和操作名是不可缺少的。

操作的可見(jiàn)性通常分為公有(用加號(hào)表示)和私有(用減號(hào)表示)兩種,其含義與屬性可見(jiàn)性的含義相同。

參數(shù)表由若干個(gè)參數(shù)(用逗號(hào)隔開)構(gòu)成。參數(shù)的語(yǔ)法格式為:參數(shù)名:參數(shù)類型名=缺省值

2.關(guān)系如前所述,類圖由類和它們之間的關(guān)系組成。定義了類之后,就可以定義類之間的各種關(guān)系了。類與類之間通常有關(guān)聯(lián)、泛化(繼承)、依賴和細(xì)化等四種關(guān)系。

(1)關(guān)聯(lián)關(guān)系①普通關(guān)聯(lián)普通關(guān)聯(lián)是最常見(jiàn)的關(guān)聯(lián)關(guān)系,只要在類與類之間存在連接關(guān)系就可以用普通關(guān)聯(lián)表示。普通關(guān)聯(lián)的圖示符號(hào)是連接兩個(gè)類之間的直線,如圖15.4所示。

如果關(guān)聯(lián)是單向的,則稱為導(dǎo)航關(guān)聯(lián),其符號(hào)是用實(shí)線箭頭連接兩個(gè)類。在類圖中還可以表示關(guān)聯(lián)中的數(shù)量關(guān)系,即參與關(guān)聯(lián)的對(duì)象的個(gè)數(shù)。在UML中用重?cái)?shù)(類似于第6章中的階)說(shuō)明數(shù)量或數(shù)量范圍,例如,

0··1表示0到1個(gè)對(duì)象

0··*或*表示0到多個(gè)對(duì)象

1··15表示1到15個(gè)對(duì)象

3表示3個(gè)對(duì)象

如果圖中未明確標(biāo)出關(guān)聯(lián)的重?cái)?shù),則缺省重?cái)?shù)是1。圖15.4普通關(guān)聯(lián)之例圖15.5導(dǎo)航關(guān)聯(lián)之例②關(guān)聯(lián)的角色在任何關(guān)聯(lián)中都會(huì)涉及到參與此關(guān)聯(lián)的對(duì)象所扮演的角色(即起的作用),在某些情況下顯式標(biāo)明角色名有助于別人理解類圖。

如果沒(méi)有顯式標(biāo)出角色名,則意味著用類名作為角色名。③限定關(guān)聯(lián)④關(guān)聯(lián)類

為了說(shuō)明關(guān)聯(lián)的性質(zhì)可能需要一些附加信息??梢砸胍粋€(gè)關(guān)聯(lián)類來(lái)記錄這些信息。關(guān)聯(lián)中的每個(gè)連接與關(guān)聯(lián)類的一個(gè)對(duì)象相聯(lián)系。關(guān)聯(lián)類通過(guò)一條虛線與關(guān)聯(lián)連接。圖15.6關(guān)聯(lián)的角色圖15.7關(guān)聯(lián)類示例⑤聚集聚集也稱為聚合,是關(guān)聯(lián)的特例。聚集表示類與類之間的關(guān)系是整體與部分的關(guān)系。

如果在聚集關(guān)系中處于部分方的對(duì)象可同時(shí)參與多個(gè)處于整體方對(duì)象的構(gòu)成,則該聚集稱為共享聚集。

如果部分類完全隸屬于整體類,部分與整體共存,整體不存在了部分也會(huì)隨之消失(或失去存在階值了),則該聚集稱為復(fù)合聚集(簡(jiǎn)稱為組成)。圖15.8共享聚集示例

·具體元素應(yīng)與通用元素完全一致,通用元素具有的屬性、操作和關(guān)聯(lián),具體元素也都隱含地具有。

·具體元素還應(yīng)包含通用元素所沒(méi)有的額外信息。

·允許使用通用元素實(shí)例的地方,也應(yīng)能夠使用具體元素的實(shí)例。在UML中,用一端為空心三角形的連線表示泛化關(guān)系,三角形的頂角緊挨著通用元素。

注意,泛化針對(duì)類型而不針對(duì)實(shí)例,一個(gè)類可以繼承另一個(gè)類,但一個(gè)對(duì)象不能繼承另一個(gè)對(duì)象。

泛化可進(jìn)一步劃分成普通泛化和受限泛化。①普通泛化普通泛化的概念與第6章中講過(guò)的繼承概念基本相同,此處不再過(guò)多解釋。

②受限泛化可以給泛化關(guān)系附加約束條件,以進(jìn)一步說(shuō)明該泛化關(guān)系的使用方法或擴(kuò)充方法,這樣的泛化關(guān)系稱為受限泛化。預(yù)定義的約束有4種:多重、不相交、完全和不完全。這些約束都是語(yǔ)義約束。圖15.9復(fù)合聚集示例圖15.10抽象類示例圖15.11復(fù)雜類圖示例圖15.12多重繼承示例

(3)依賴和細(xì)化①依賴關(guān)系依賴關(guān)系描述兩個(gè)模型元素(類、用例等)之間的語(yǔ)義連接關(guān)系:其中一個(gè)模型元素是獨(dú)立的,另一個(gè)模型元素不是獨(dú)立的,它依賴于獨(dú)立的模型元素,如果獨(dú)立的模型元素改變了,將影響依賴于它的模型元素。圖15.13友元依賴關(guān)系示例②細(xì)化關(guān)系當(dāng)對(duì)同一事物在不同抽象層次上描述時(shí),這些描述之間具有細(xì)化關(guān)系。細(xì)化是UML中的術(shù)語(yǔ),表示對(duì)事物更詳細(xì)一層的描述。

假設(shè)兩個(gè)元素A和B描述同一個(gè)事物,它們的區(qū)別是抽象層次不同,如果B是在A的基礎(chǔ)上的更詳細(xì)的描述,則稱B細(xì)化了A,或稱A細(xì)化成了B。

細(xì)化的圖示符號(hào)為由元素B指向元素A的、一端為空心三角的虛線(不是實(shí)線),如圖15.14所示。細(xì)化主要用于模型之間的合作,表示各開發(fā)階段不同抽象層次的模型的相關(guān)性,常用于跟蹤模型的演變。圖15.14細(xì)化關(guān)系的圖示

3.對(duì)象圖對(duì)象是類的實(shí)例,對(duì)象之間的連接是類之間關(guān)聯(lián)的實(shí)例,因此,對(duì)象圖可以看作是類圖的實(shí)例,能幫助人理解一個(gè)比較復(fù)雜的類圖。

在UML中,對(duì)象圖與類圖具有幾乎完全相同的表示形式,主要差別是對(duì)象的名字下面要加一條下劃線。對(duì)象名有下列三種表示格式:第一種格式形如:對(duì)象名:類名即對(duì)象名在前,類名在后,中間用冒號(hào)連接。

第二種格式形如::類名這種格式用于尚未給對(duì)象命名的情況,注意,類名前的冒號(hào)不能省略。

第三種格式形如:對(duì)象名這種格式不帶類名(即省略類名)。圖15.15對(duì)象圖示例

4.包包(package)是一種組合機(jī)制。把各種各樣的模型元素通過(guò)內(nèi)在的語(yǔ)義關(guān)系連在一起,形成一個(gè)高內(nèi)聚、低耦合的整體就叫做包。包通常用于對(duì)模型的組織管理,因此有時(shí)又把包稱為子系統(tǒng)。

(1)包的內(nèi)容構(gòu)成包的模型元素稱為包的內(nèi)容,包的內(nèi)容可以是一個(gè)類圖也可以是另一個(gè)包圖。包與包之間不能共用一個(gè)相同的模型元素。

(2)包的依賴和繼承包與包之間允許建立依賴、泛化和細(xì)化等關(guān)系。圖15.16包圖示例15.3動(dòng)態(tài)建模機(jī)制系統(tǒng)中的對(duì)象在執(zhí)行期間的不同時(shí)間點(diǎn)如何通信以及通信的結(jié)果如何,就是系統(tǒng)的動(dòng)態(tài)行為,也就是說(shuō),對(duì)象通過(guò)通信相互協(xié)作的方式以及系統(tǒng)中的對(duì)象在系統(tǒng)生命期中改變狀態(tài)的方式,是系統(tǒng)的動(dòng)態(tài)行為。

15.3.1消息在UML的所有動(dòng)態(tài)圖(狀態(tài)圖、順序圖、協(xié)作圖和活動(dòng)圖)中,消息都表示為連接發(fā)送者和接收者的一根箭頭線,箭頭的形狀表示消息的類型,如圖15.17所示。圖15.17消息的類型

UML定義了三種消息。

·簡(jiǎn)單消息:表示簡(jiǎn)單的控制流,它只是表示控制從一個(gè)對(duì)象傳給另一個(gè)對(duì)象,而沒(méi)有描述通信的任何細(xì)節(jié)。

·同步消息:表示嵌套的控制流,操作的調(diào)用是一種典型的同步消息。調(diào)用者發(fā)出消息后必須等待消息返回,只有當(dāng)處理消息的操作執(zhí)行完畢后,調(diào)用者才可以繼續(xù)執(zhí)行自己的操作。

·異步消息:表示異步控制流,發(fā)送者發(fā)出消息后不用等待消息處理完就可以繼續(xù)執(zhí)行自己的操作。異步消息主要用于描述實(shí)時(shí)系統(tǒng)中的并發(fā)行為。

可以把一個(gè)簡(jiǎn)單消息和一個(gè)同步消息合并成一個(gè)消息(見(jiàn)圖15.17),這樣的消息意味著操作調(diào)用一旦完成就立即返回。

15.3.2狀態(tài)圖狀態(tài)圖描述一個(gè)特定對(duì)象的所有可能的狀態(tài)以及引起狀態(tài)轉(zhuǎn)換的事件。大多數(shù)面向?qū)ο蠹夹g(shù)都用狀態(tài)圖表示單個(gè)對(duì)象在其生命期中的行為。一個(gè)狀態(tài)圖包括一系列狀態(tài)、事件以及狀態(tài)之間的轉(zhuǎn)移。

1.狀態(tài)所有對(duì)象都具有狀態(tài),狀態(tài)是對(duì)象執(zhí)行了一系列活動(dòng)的結(jié)果。當(dāng)某個(gè)事件發(fā)生后,對(duì)象的狀態(tài)將發(fā)生變化。在狀態(tài)圖中定義的狀態(tài)可能有:初態(tài)(初始狀態(tài))、終態(tài)(最終狀態(tài))、中間狀態(tài)和復(fù)合狀態(tài)。

UML中表示初態(tài)和終態(tài)的符號(hào)與第6章所用的符號(hào)相同。在一張狀態(tài)圖中只能有一個(gè)初態(tài),而終態(tài)則可以有多個(gè)。中間狀態(tài)用圓角矩形表示,其可能包含三個(gè)部分,如圖15.18所示。第一部分為狀態(tài)的名稱;第二部分為狀態(tài)變量的名字和值,這部分是可選的;第三部分是活動(dòng)表,這部分也是可選的。在活動(dòng)表中經(jīng)常使用下述三種標(biāo)準(zhǔn)事件:entry(進(jìn)入)、exit(退出)和do(做)。

entry事件指定進(jìn)入該狀態(tài)的動(dòng)作,exit事件指定退出該狀態(tài)的動(dòng)作,而do事件則指定在該狀態(tài)下的動(dòng)作,這些標(biāo)準(zhǔn)事件一般不做它用?;顒?dòng)部分的語(yǔ)法如下:事件名(參數(shù)表)/動(dòng)作表達(dá)式其中,“事件名”可以是任何事件的名稱,包括上述三種標(biāo)準(zhǔn)事件;需要時(shí)可為事件指定參數(shù)表,其語(yǔ)法格式與類的操作的參數(shù)表語(yǔ)法格式相似(見(jiàn)15.2.2節(jié));動(dòng)作表達(dá)式指定應(yīng)做的動(dòng)作。圖15.18狀態(tài)的三個(gè)組成部分

2.狀態(tài)轉(zhuǎn)換狀態(tài)圖中兩個(gè)狀態(tài)之間帶箭頭的連線稱為狀態(tài)轉(zhuǎn)換。狀態(tài)的變遷通常是由事件觸發(fā)的,在這種情況下應(yīng)在表示狀態(tài)轉(zhuǎn)換的箭頭線上標(biāo)出觸發(fā)轉(zhuǎn)換的事件表達(dá)式;如果在箭頭線上未標(biāo)明事件,則表示在源狀態(tài)的內(nèi)部活動(dòng)執(zhí)行完之后自動(dòng)觸發(fā)轉(zhuǎn)換。

事件表達(dá)式的語(yǔ)法如下:事件說(shuō)明〔守衛(wèi)條件〕/動(dòng)作表達(dá)式∧發(fā)送子句其中,事件說(shuō)明的語(yǔ)法為:事件名(參數(shù)表)。

守衛(wèi)條件是一個(gè)布爾表達(dá)式。如果同時(shí)使用守衛(wèi)條件和事件說(shuō)明,則當(dāng)且僅當(dāng)事件發(fā)生且布爾表達(dá)式成立時(shí),狀態(tài)轉(zhuǎn)換才發(fā)生。如果只有守衛(wèi)條件沒(méi)有事件說(shuō)明,則只要守衛(wèi)條件為真狀態(tài)轉(zhuǎn)換就發(fā)生。動(dòng)作表達(dá)式是一個(gè)過(guò)程表達(dá)式,當(dāng)狀態(tài)轉(zhuǎn)換開始時(shí)執(zhí)行該表達(dá)式。發(fā)送子句是動(dòng)作的特例,它被用來(lái)在狀態(tài)轉(zhuǎn)換期間發(fā)送消息。圖15.19電梯的狀態(tài)圖

15.3.3順序圖順序圖描述對(duì)象之間的動(dòng)態(tài)交互關(guān)系,著重表現(xiàn)對(duì)象間消息傳遞的時(shí)間順序。順序圖有兩個(gè)坐標(biāo)軸:縱坐標(biāo)軸表示時(shí)間,橫坐標(biāo)軸表示不同的對(duì)象。

順序圖中的對(duì)象用一個(gè)矩形框表示,框內(nèi)標(biāo)有對(duì)象名(對(duì)象名的表示格式與對(duì)象圖中相同)。從表示對(duì)象的矩形框向下的垂直虛線是對(duì)象的“生命線”,用于表示在某段時(shí)間內(nèi)該對(duì)象是存在的。對(duì)象間的通信用對(duì)象生命線之間的水平消息線來(lái)表示,消息箭頭的形狀表明消息的類型(同步、異步或簡(jiǎn)單)。當(dāng)收到消息時(shí),接收對(duì)象立即開始執(zhí)行活動(dòng),即對(duì)象被激活了。激活用對(duì)象生命線上的細(xì)長(zhǎng)矩形框表示。消息通常用消息名和參數(shù)表來(lái)標(biāo)識(shí)。消息還可以帶有條件表達(dá)式,用以表示分支或決定是否發(fā)送消息。如果用條件表達(dá)式表示分支,則會(huì)有若干個(gè)互斥的箭頭,也就是說(shuō),在某一時(shí)刻僅可發(fā)送分支中的一個(gè)消息。圖15.20順序圖之例

15.3.4協(xié)作圖協(xié)作圖用于描述相互協(xié)作的對(duì)象間的交互關(guān)系和鏈接關(guān)系(鏈接是關(guān)聯(lián)的實(shí)例)。雖然順序圖和協(xié)作圖都描述對(duì)象間的交互關(guān)系,但它們的側(cè)重點(diǎn)不同:順序圖著重表現(xiàn)交互的時(shí)間順序,協(xié)作圖則著重表現(xiàn)交互對(duì)象的靜態(tài)鏈接關(guān)系。

協(xié)作圖中對(duì)象的圖示與順序圖中一樣。如果一個(gè)對(duì)象在消息交互中被創(chuàng)建,則在對(duì)象名之后標(biāo)以{new},類似地,如果一個(gè)對(duì)象在交互期間被刪除,則在對(duì)象名之后標(biāo)以{destroy}。對(duì)象間的鏈接關(guān)系類似于類圖中的關(guān)聯(lián)(但沒(méi)有重?cái)?shù)標(biāo)志)。通過(guò)在對(duì)象間的鏈接上標(biāo)注帶有消息標(biāo)簽的消息,來(lái)表示對(duì)象間的消息傳遞。協(xié)作圖從初始化整個(gè)交互過(guò)程的消息開始。書寫消息標(biāo)簽的語(yǔ)法規(guī)則如下:前綴〔守衛(wèi)條件〕序列表達(dá)式返回值:=消息說(shuō)明

1.前綴前綴的語(yǔ)法為:序列號(hào),…/。

前綴是用于同步線程或路徑的表達(dá)式,意思是在發(fā)送當(dāng)前消息之前應(yīng)該把指定序列號(hào)的消息處理完。若有多個(gè)序列號(hào)則用逗號(hào)隔開。最后用斜線標(biāo)志前綴的結(jié)束。消息標(biāo)簽中可以沒(méi)有前綴。

2.守衛(wèi)條件守衛(wèi)條件的語(yǔ)法與狀態(tài)圖中的相同。

3.序列表達(dá)式常用的序列表達(dá)式的語(yǔ)法如下:序列號(hào)recurrence:

其中,序列號(hào)用于指定消息發(fā)送的順序。在協(xié)作圖中沒(méi)有時(shí)間軸,因此把消息按順序編號(hào):消息1總是消息序列的開始消息,消息1.1是處理消息1的過(guò)程中的第1條嵌套消息,消息1.2是第2條嵌套消息,依此類推。

recurrence的語(yǔ)法為:*〔循環(huán)子句〕或〔條件子句〕

循環(huán)子句用于指定循環(huán)的條件,而條件子句通常用于表示分支條件。序列表達(dá)式用冒號(hào)標(biāo)志結(jié)束。在序列表達(dá)式中必須有序列號(hào),而recurrence部分是可選的。

4.消息說(shuō)明消息說(shuō)明由消息名和參數(shù)表組成,其語(yǔ)法與狀態(tài)圖中事件說(shuō)明的語(yǔ)法相同。返回值表示操作調(diào)用(即消息)的結(jié)果。

協(xié)作圖和順序圖的區(qū)別在于,協(xié)作圖顯示真正的對(duì)象及其鏈接,在許多情況下這有利于理解對(duì)象的交互;而時(shí)間順序在順序圖中更容易看出來(lái),從上往下看就可以了。當(dāng)要決定選用哪種圖時(shí),一般的原則是,當(dāng)對(duì)象及其鏈接有利于理解交互時(shí)選擇協(xié)作圖,當(dāng)只需了解時(shí)間順序時(shí)選擇順序圖。圖15.21電梯的協(xié)作圖

15.3.5活動(dòng)圖活動(dòng)圖描述動(dòng)作及動(dòng)作之間的關(guān)系?;顒?dòng)圖是另一種描述交互的方式,它描述采取何種動(dòng)作,動(dòng)作的結(jié)果是什么(動(dòng)作狀態(tài)改變),何時(shí)發(fā)生(動(dòng)作序列),以及在何處發(fā)生(泳道)。圖15.22活動(dòng)圖示例15.4描述物理架構(gòu)的機(jī)制系統(tǒng)架構(gòu)(或稱為體系結(jié)構(gòu))是對(duì)構(gòu)成系統(tǒng)的各個(gè)部分的框架性描述。在UML中,架構(gòu)的定義是:

架構(gòu)是系統(tǒng)的組織結(jié)構(gòu)??梢赃f歸地把架構(gòu)分解成:通過(guò)接口交互的部分,連接各個(gè)部分的關(guān)系,組裝各個(gè)部分的約束。

15.4.1邏輯架構(gòu)和物理架構(gòu)系統(tǒng)架構(gòu)分為邏輯架構(gòu)和物理架構(gòu)兩大類。

邏輯架構(gòu)完整地描述系統(tǒng)的功能,把功能分配到系統(tǒng)的各個(gè)部分,詳細(xì)說(shuō)明它們是如何工作的。在UML中,用于描述邏輯架構(gòu)的圖有:用例圖、類圖、對(duì)象圖、狀態(tài)圖、活動(dòng)圖、協(xié)作圖和順序圖。

物理架構(gòu)詳細(xì)地描述系統(tǒng)的軟件和硬件,描述軟、硬件的分解。物理架構(gòu)關(guān)心的是實(shí)現(xiàn),因此可以用實(shí)現(xiàn)圖建模,其中,構(gòu)件圖顯示代碼本身的靜態(tài)結(jié)構(gòu),配置圖顯示系統(tǒng)運(yùn)行時(shí)的結(jié)構(gòu)。

15.4.2構(gòu)件圖構(gòu)件圖描述軟件構(gòu)件及構(gòu)件之間的依賴關(guān)系,顯示代碼的靜態(tài)結(jié)構(gòu)。構(gòu)件是邏輯架構(gòu)中定義的概念和功能(例如,類、對(duì)象及它們之間的關(guān)系)在物理架構(gòu)中的實(shí)現(xiàn)。典型情況下,構(gòu)件是開發(fā)環(huán)境中的實(shí)現(xiàn)文件。軟件構(gòu)件可以是下述的任何一種構(gòu)件。

·源構(gòu)件:源構(gòu)件僅在編譯時(shí)才有意義。典型情況下,它是實(shí)現(xiàn)一個(gè)或多個(gè)類的源代碼文件。

·二進(jìn)制構(gòu)件:典型情況下,二進(jìn)制構(gòu)件是對(duì)象代碼,它是源構(gòu)件的編譯結(jié)果。它可以是一個(gè)對(duì)象代碼文件,一個(gè)靜態(tài)庫(kù)文件或一個(gè)動(dòng)態(tài)庫(kù)文件。二進(jìn)制構(gòu)件僅在鏈接時(shí)有意義,如果二進(jìn)制構(gòu)件是動(dòng)態(tài)庫(kù)文件,則在運(yùn)行時(shí)有意義(動(dòng)態(tài)庫(kù)只在運(yùn)行時(shí)由可執(zhí)行的構(gòu)件裝入)。

·可執(zhí)行構(gòu)件:可執(zhí)行構(gòu)件是一個(gè)可執(zhí)行的程序文件,它是鏈接所有二進(jìn)制構(gòu)件所得到的結(jié)果。一個(gè)可執(zhí)行構(gòu)件代表在處理器(計(jì)算機(jī))上運(yùn)行的可執(zhí)行單元。

構(gòu)件是類型,但是僅僅可執(zhí)行構(gòu)件才可能有實(shí)例(當(dāng)它們代表的程序在處理器上執(zhí)行時(shí))。構(gòu)件圖只把構(gòu)件顯示成類型,為顯示構(gòu)件的實(shí)例必須使用配置圖。

在UML中,構(gòu)件的圖示符號(hào)是左邊帶有一個(gè)橢圓和兩個(gè)小矩形的大長(zhǎng)方形。構(gòu)件間的依賴關(guān)系用一條帶箭頭的虛線表示。可以為一個(gè)構(gòu)件定義其他構(gòu)件可見(jiàn)的接口,其圖示符號(hào)是從代表構(gòu)件的大矩形邊框畫出的一條線,線的另一端為一個(gè)小空心圓,接口名寫在空心圓附近。圖15.23是構(gòu)件圖的例子。圖15.23構(gòu)件圖示例

15.4.3配置圖配置圖描述處理器、硬件設(shè)備和軟件構(gòu)件在運(yùn)行時(shí)的架構(gòu),它顯示系統(tǒng)硬件的物理拓?fù)浣Y(jié)構(gòu)及在此結(jié)構(gòu)上執(zhí)行的軟件。使用配置圖可以顯示硬件節(jié)點(diǎn)的拓?fù)浣Y(jié)構(gòu)和通信路徑、節(jié)點(diǎn)上運(yùn)行的軟件構(gòu)件、軟件構(gòu)件包含的邏輯單元(對(duì)象、類)等。配置圖常用于幫助人理解分布式系統(tǒng)。

1.節(jié)點(diǎn)和連接節(jié)點(diǎn)(node)代表一個(gè)物理設(shè)備及在其上運(yùn)行的軟件系統(tǒng)。

節(jié)點(diǎn)間的連線表示系統(tǒng)之間進(jìn)行交互的通信線路,在UML中稱為連接。通信類型用版類表示,寫在表示連接的線旁,以指定所用的通信協(xié)議或網(wǎng)絡(luò)類型。

2.構(gòu)件和接口在配置圖中,構(gòu)件代表可執(zhí)行的物理代碼模塊(可執(zhí)行構(gòu)件的實(shí)例),在邏輯上它可以與類圖中的包或類對(duì)應(yīng)。因此,配置圖顯示運(yùn)行時(shí)各個(gè)包或類在節(jié)點(diǎn)中的分布情況。

在面向?qū)ο蠓椒ㄖ?,并不是類和?gòu)件等元素的所有屬性和操作都對(duì)外可見(jiàn),它們對(duì)外提供的可見(jiàn)操作和屬性稱為接口。接口用一端是小圓圈的直線來(lái)表示。

3.對(duì)象在一個(gè)面向?qū)ο蟮能浖到y(tǒng)中運(yùn)行著許多個(gè)對(duì)象。由于可以把構(gòu)件看作是與包或類對(duì)應(yīng)的物理代碼模塊,因此,構(gòu)件中應(yīng)該包含一些運(yùn)行的對(duì)象。配置圖中的對(duì)象與對(duì)象圖中的對(duì)象表示方法相同。圖15.24配置圖示例15.5使用和擴(kuò)展UML

15.5.1使用UML的準(zhǔn)則

1.不要試圖使用所有的圖形和符號(hào)應(yīng)該根據(jù)項(xiàng)目的特點(diǎn),選用最適用的圖形和符號(hào)。一般來(lái)說(shuō),應(yīng)該優(yōu)先選用簡(jiǎn)單的圖形和符號(hào),例如,用例、類、關(guān)聯(lián)、屬性和繼承等概念是最常用的。

2.不要為每個(gè)事物都畫一個(gè)模型應(yīng)該把精力集中于關(guān)鍵的領(lǐng)域。最好只畫幾張關(guān)鍵的圖,經(jīng)常使用并不斷更新、修改這幾張圖。

3.應(yīng)該分層次地畫模型圖根據(jù)項(xiàng)目進(jìn)展的不同階段,用正確的觀點(diǎn)畫模型圖。如果處于分析階段,應(yīng)該畫概念層模型圖;當(dāng)開始著手進(jìn)行軟件設(shè)計(jì)時(shí),應(yīng)該畫說(shuō)明層模型圖;當(dāng)考察某個(gè)特定的實(shí)現(xiàn)方案時(shí),則應(yīng)畫實(shí)現(xiàn)層模型圖。

使用UML的最大危險(xiǎn)是過(guò)早地陷入實(shí)現(xiàn)細(xì)節(jié)。為了避免這一危險(xiǎn),應(yīng)該把重點(diǎn)放在概念層和說(shuō)明層。

4.模型應(yīng)該具有協(xié)調(diào)性模型必須在每個(gè)抽象層次內(nèi)和不同的抽象層次之間協(xié)調(diào)。

5.模型

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論