實(shí)用軟件工程教程 教學(xué)課件 作者 陳雄峰第7章7.1節(jié) 面向?qū)ο蠓治雠c設(shè)計(jì)_第1頁
實(shí)用軟件工程教程 教學(xué)課件 作者 陳雄峰第7章7.1節(jié) 面向?qū)ο蠓治雠c設(shè)計(jì)_第2頁
實(shí)用軟件工程教程 教學(xué)課件 作者 陳雄峰第7章7.1節(jié) 面向?qū)ο蠓治雠c設(shè)計(jì)_第3頁
實(shí)用軟件工程教程 教學(xué)課件 作者 陳雄峰第7章7.1節(jié) 面向?qū)ο蠓治雠c設(shè)計(jì)_第4頁
實(shí)用軟件工程教程 教學(xué)課件 作者 陳雄峰第7章7.1節(jié) 面向?qū)ο蠓治雠c設(shè)計(jì)_第5頁
已閱讀5頁,還剩193頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第7章面向?qū)ο蠓治雠c設(shè)計(jì)教學(xué)要點(diǎn):本章介紹面向?qū)ο蠓治雠c設(shè)計(jì)相關(guān)概念和方法,其中最主要的是如何使用系統(tǒng)思維分析與綜合,以UML為工具建立軟件系統(tǒng)的邏輯模型,包括用況模型、靜態(tài)模型和動(dòng)態(tài)模型等。要熟練掌握UML的各種視圖和圖,特別是如何畫用況圖、類&對(duì)象圖、狀態(tài)圖、順序圖和包圖等。重點(diǎn)掌握:面向?qū)ο蠓椒ㄋ枷胍c(diǎn);UML的各種視圖和圖的作用;用況圖、類&對(duì)象圖、狀態(tài)圖、順序圖和包圖的畫法。7.1面向?qū)ο蠓椒ǖ母攀?/p>

結(jié)構(gòu)化分析方法(傳統(tǒng)建模方法)與面向?qū)ο蠓椒ū容^:計(jì)算機(jī)世界現(xiàn)實(shí)世界影射計(jì)算機(jī)世界現(xiàn)實(shí)世界結(jié)構(gòu)化開發(fā)方法結(jié)構(gòu)化分析結(jié)構(gòu)化設(shè)計(jì)結(jié)構(gòu)化編程OOAOODOOP面向?qū)ο箝_發(fā)方法對(duì)象、實(shí)體與類對(duì)象實(shí)體類抽象數(shù)據(jù)類計(jì)算機(jī)世界現(xiàn)實(shí)世界計(jì)算機(jī)邏輯的實(shí)現(xiàn)影射抽象實(shí)例化抽象概念世界傳統(tǒng)方法和面向?qū)ο蠓椒ǖ谋容^傳統(tǒng)方法系統(tǒng)是過程的集合過程與數(shù)據(jù)實(shí)體交互過程接受輸入并產(chǎn)生輸出面向?qū)ο蠓椒ㄏ到y(tǒng)是交互對(duì)象的集合對(duì)象與人或其它對(duì)象交互對(duì)象發(fā)送與響應(yīng)消息

傳統(tǒng)系統(tǒng)分析:面向功能

,把系統(tǒng)看成一組功能。OOA:把問題當(dāng)作一組相互作用的實(shí)體,并確定實(shí)體間關(guān)系。傳統(tǒng)方法數(shù)據(jù)與過程是分離的過程1輸入輸出過程2過程3數(shù)據(jù)實(shí)體屬于該對(duì)象的數(shù)據(jù)對(duì)象處理數(shù)據(jù)的方法消息消息對(duì)象把數(shù)據(jù)和處理數(shù)據(jù)的方法封狀成一個(gè)單元開發(fā)方法的組合分析設(shè)計(jì)編程結(jié)構(gòu)化結(jié)構(gòu)化面向?qū)ο蠼Y(jié)構(gòu)化面向?qū)ο竺嫦驅(qū)ο竺嫦驅(qū)ο蠼Y(jié)構(gòu)化第三代或第四代語言面向?qū)ο竺嫦驅(qū)ο蟮谌虻谒拇Z言面向?qū)ο竺嫦驅(qū)ο髠鹘y(tǒng)編程與面向?qū)ο蟮幕旌厦嫦驅(qū)ο竺嫦驅(qū)ο竺嫦驅(qū)ο鬄槭裁磳?duì)面向?qū)ο蠓椒ǜ信d趣?面向?qū)ο蠓椒ǖ闹饕獌?yōu)點(diǎn):自然性追求軟件系統(tǒng)對(duì)現(xiàn)實(shí)系統(tǒng)的直接模擬,盡量實(shí)現(xiàn)將現(xiàn)實(shí)世界中的事物直接映射到軟件系統(tǒng)的解空間中。軟件復(fù)用:可復(fù)用性(可重用性)reusebility

面向?qū)ο蠹夹g(shù)允許復(fù)用的不僅僅是代碼,通過面向?qū)ο蠹夹g(shù),我們可以復(fù)用需求、分析、設(shè)計(jì)、測(cè)試計(jì)劃、用戶界面以及體系結(jié)構(gòu)等等,事實(shí)上,軟件工程生存期中的每個(gè)部分都可以復(fù)用。可擴(kuò)展性可管理性7.1.1面向?qū)ο蟮母拍蠲嫦驅(qū)ο蠓椒ㄊ且环N運(yùn)用對(duì)象、類、繼承、封裝、聚合、消息傳遞、多態(tài)性等概念來構(gòu)造系統(tǒng)的軟件開發(fā)方法。面向?qū)ο?對(duì)象+類+繼承+消息通信面向?qū)ο蟮闹饕卣鳎悍庋b

(Encapsulation)

繼承(Inheritance)

多態(tài)性(Polymorphism)1.對(duì)象(object)現(xiàn)實(shí)世界中某個(gè)具體的物理實(shí)體或概念在計(jì)算機(jī)邏輯中的映射和體現(xiàn)。

對(duì)象具有的含義:在現(xiàn)實(shí)世界中:是客觀世界中的一個(gè)實(shí)體在面向?qū)ο蟪绦蛑校罕磉_(dá)成計(jì)算機(jī)可理解、可操縱、具有一定屬性和行為的對(duì)象在計(jì)算機(jī)世界中:是一個(gè)可標(biāo)識(shí)的存儲(chǔ)區(qū)域

屬性(attribute)通常是一些數(shù)據(jù),有時(shí)它也可以是另一個(gè)對(duì)象。每個(gè)對(duì)象都有它自己的屬性值,表示該對(duì)象的狀態(tài)。對(duì)象中的屬性只能通過該對(duì)象所提供的操作來存取或修改。操作(operation)(也稱行為、方法或服務(wù))規(guī)定了對(duì)象的行為,表示對(duì)象所能提供的服務(wù)。2.類(class)具有共同屬性和行為的對(duì)象的抽象類與對(duì)象的關(guān)系類是對(duì)象的抽象對(duì)象是類的實(shí)例類對(duì)象一個(gè)類中的每個(gè)對(duì)象都是這個(gè)類的一個(gè)實(shí)例(instance)。類是創(chuàng)建對(duì)象的模板,從同一個(gè)類實(shí)例化的每個(gè)對(duì)象都具有相同的結(jié)構(gòu)和行為。例子:運(yùn)動(dòng)會(huì)軟件系統(tǒng)對(duì)象包括如王某、趙某、2號(hào)籃球和5號(hào)籃球場(chǎng)等等具體的人、運(yùn)動(dòng)器械和場(chǎng)地;類包括裁判員、運(yùn)動(dòng)員、標(biāo)槍和場(chǎng)地等等不同類別的人或運(yùn)動(dòng)器械或場(chǎng)地的名稱。運(yùn)動(dòng)會(huì)是由如王某、趙某、2號(hào)籃球和5號(hào)籃球場(chǎng)等所有參加運(yùn)動(dòng)會(huì)的具體的人、運(yùn)動(dòng)器械和場(chǎng)地組成的,他們的交互活動(dòng)才能使得運(yùn)動(dòng)會(huì)運(yùn)行起來,對(duì)應(yīng)于軟件系統(tǒng)是對(duì)象的集合;籃球裁判員、運(yùn)動(dòng)員、籃球和籃球場(chǎng)等等只是某一類對(duì)象的統(tǒng)稱(抽象),只是一種人腦認(rèn)識(shí)對(duì)象的概念和名稱而已,并不能讓系統(tǒng)運(yùn)行起來,但是往往是通過類的形式給對(duì)象賦予職責(zé),如是籃球裁判員就有要看是否犯規(guī)、給出得幾分的手勢(shì)等職責(zé),對(duì)應(yīng)于設(shè)計(jì)和編程時(shí)的類定義。要真正開始某個(gè)項(xiàng)目的比賽時(shí),如籃球比賽,就要具體指派某類中的某個(gè)人、運(yùn)動(dòng)器械和場(chǎng)地去完成一定的職責(zé),如指派王某擔(dān)任籃球裁判員,他自然就有看是否犯規(guī)、給出得幾分的手勢(shì)等的職責(zé),同時(shí)決定使用2號(hào)籃球,在5號(hào)籃球場(chǎng)上比賽,加上趙某等若干名具體的籃球運(yùn)動(dòng)員,協(xié)作完成這一項(xiàng)的比賽,對(duì)應(yīng)于要實(shí)現(xiàn)某個(gè)軟件功能時(shí),要先以類為模板創(chuàng)建對(duì)象,每個(gè)對(duì)象自然就有該類所定義的結(jié)構(gòu)和行為,然后由對(duì)象之間通信來完成這一的軟件功能。3.封裝封裝是軟件開發(fā)方法的重要原則,有兩個(gè)涵義:把對(duì)象的全部屬性和全部服務(wù)結(jié)合在一起,形成一個(gè)不可分割的獨(dú)立單位(對(duì)象)。盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)(信息隱蔽)。4.繼承(inheritance)繼承是父類和子類之間共享數(shù)據(jù)和方法的機(jī)制。繼承具有傳遞性。繼承包括單繼承和多重繼承。

子類繼承部分增加部分父類共性部分繼承性作用使軟件系統(tǒng)具有開放性;更好地進(jìn)行抽象與分類;增強(qiáng)代碼的重用率。交通工具飛行器汽車船轎車貨車

一般-特殊關(guān)系5.多態(tài)性(polymorphism)不同的對(duì)象收到同一消息可產(chǎn)生完全不同的結(jié)果,這一現(xiàn)象叫做多態(tài)性。多態(tài)的效果用戶發(fā)送一個(gè)通用的消息,而實(shí)現(xiàn)的細(xì)節(jié)則由接收對(duì)象自行決定。多態(tài)性的作用增強(qiáng)了操作的透明性、可理解性和可擴(kuò)展性。增強(qiáng)了軟件的靈活性和重用性。6.消息(message)消息

對(duì)象之間相互請(qǐng)求或相互協(xié)作的途徑,是要求某個(gè)對(duì)象執(zhí)行某個(gè)功能操作的規(guī)格說明。消息內(nèi)容

通常包含接收方及請(qǐng)求接收方完成的功能信息。

發(fā)送方

發(fā)出消息,請(qǐng)求接收方響應(yīng)。

接收方

收到消息后,經(jīng)過解釋,激活方法,予以響應(yīng)。7.動(dòng)態(tài)綁定(dynamicbinding)動(dòng)態(tài)綁定是指在程序運(yùn)行時(shí)才將消息所請(qǐng)求的操作與實(shí)現(xiàn)該操作的方法連接起來。傳統(tǒng)的程序設(shè)計(jì)語言的過程調(diào)用與目標(biāo)代碼的連接(即調(diào)用哪個(gè)過程)放在程序運(yùn)行前(即編譯時(shí))進(jìn)行(稱為靜態(tài)綁定)。而動(dòng)態(tài)綁定則是把這種連接推遲到運(yùn)行時(shí)才進(jìn)行。動(dòng)態(tài)綁定是一種在運(yùn)行時(shí)確定被執(zhí)行代碼的技術(shù)。在一般與特殊關(guān)系中,子類是父類的一個(gè)特例,所以父類對(duì)象可以出現(xiàn)的地方,也允許其子類對(duì)象出現(xiàn)。因此在運(yùn)行過程中,當(dāng)一個(gè)對(duì)象發(fā)送消息請(qǐng)求服務(wù)時(shí),要根據(jù)接收對(duì)象的具體情況將請(qǐng)求的操作與實(shí)現(xiàn)的方法進(jìn)行連接,即動(dòng)態(tài)綁定。思考題軟件開發(fā)中為什么要使用面向?qū)ο蠓椒ǎ棵嫦驅(qū)ο蠓治龇椒ㄅc結(jié)構(gòu)化分析方法有哪些相似之處?有何區(qū)別?面向?qū)ο蠓椒ㄊ菍?duì)過去的一個(gè)完全突破,還是“換湯不換藥”?

7.1.2面向?qū)ο蠓椒▽W(xué)概述面向?qū)ο蠓治龇椒ù_實(shí)不同于結(jié)構(gòu)化分析方法嗎?

Fichman,R.GandC.F.Kemerer,在“Object-orientedConventionalAnalysisandDesignMethodologies”中闡述:我們的結(jié)論是面向?qū)ο蠓治龇椒ū憩F(xiàn)了相對(duì)面向過程的方法學(xué)(如結(jié)構(gòu)化分析)的根本性變化,而且相對(duì)面向數(shù)據(jù)的方法學(xué)僅僅是增量性的變化。面向過程的方法學(xué)在建模過程中的關(guān)注點(diǎn)不是對(duì)象的內(nèi)在性質(zhì),從而導(dǎo)致了和面向?qū)ο蟮娜齻€(gè)基本原理相正交的問題域模型。面向?qū)ο蠓椒ㄊ且粋€(gè)有全新概念的開發(fā)模式,其特點(diǎn)是:

(1)方法是對(duì)軟件開發(fā)過程所有階段進(jìn)行綜合考慮而得到的;(2)從生存期的一個(gè)階段到下一個(gè)階段所使用的方法與技術(shù)具有高度的連續(xù)性;(3)將OOA、OOD、OOP集成到生存期的相應(yīng)階段;

面向?qū)ο蠓治龇椒ㄊ沟密浖こ處熌軌蛲ㄟ^對(duì)象、屬性和操作(作為主要的建模成分)的表示來對(duì)問題建模。建立分析模型5個(gè)基本原則:(1)建模信息域;(2)描述模塊功能;(3)表示模型行為;(4)分解以模型顯示更多細(xì)節(jié);(5)早期模型表示問題的本質(zhì),而后期模型提供實(shí)現(xiàn)細(xì)節(jié)。

OOA的意圖是定義所有和被求解的問題相關(guān)的類(及同類關(guān)聯(lián)的關(guān)系和行為),為了達(dá)到這個(gè)目標(biāo),必須完成以下任務(wù):(1)必須在客戶和軟件工程師之間溝通了解基本的用戶需求;(2)必須標(biāo)識(shí)類(定義屬性和方法);(3)必須刻劃類層次;(4)表示對(duì)象對(duì)象關(guān)系(對(duì)象連接);(5)必須建模對(duì)象行為;(6)任務(wù)(1)到(5)遞進(jìn)地反復(fù)使用,直至完成建模.1.流行的幾種面向?qū)ο蠓椒?Rumbaugh

方法(簡(jiǎn)稱OMT,ObjectModelingTechnology,對(duì)象模型技術(shù))

Coad-Yourdon方法Booch方法Jacobson

方法(簡(jiǎn)稱OOSE)由Rumbaugh

、Booch

、Jacobson提出的統(tǒng)一建模語言

(UnifyModeingLanguage簡(jiǎn)稱UML)(1)Rumbaugh方法(簡(jiǎn)稱OMT)

Rumbaugh的OOA過程概述:開發(fā)對(duì)問題的陳述建造對(duì)象模型開發(fā)動(dòng)態(tài)模型構(gòu)造系統(tǒng)的功能模型對(duì)象模型技術(shù)(OMT)產(chǎn)生需求結(jié)構(gòu)及對(duì)象設(shè)計(jì)建立模型需求陳述(問題描述)對(duì)象模型、動(dòng)態(tài)模型、功能模型詳細(xì)的對(duì)象模型詳細(xì)的動(dòng)態(tài)模型詳細(xì)的功能模型分析階段設(shè)計(jì)階段OMT支持整個(gè)軟件生命周期

1.分析階段理解應(yīng)用問題,建立對(duì)象模型、動(dòng)態(tài)模型和功能模型,說明對(duì)象關(guān)聯(lián)、控制流及數(shù)據(jù)變換。

2.設(shè)計(jì)階段確定系統(tǒng)框架,考慮并發(fā)任務(wù)、通訊機(jī)制和數(shù)據(jù)存儲(chǔ)策略。

對(duì)象設(shè)計(jì),從實(shí)現(xiàn)的角度細(xì)化分析對(duì)象模型、動(dòng)態(tài)模型和功能模型3.系統(tǒng)實(shí)現(xiàn)4、測(cè)試與維護(hù)三個(gè)基本模型

對(duì)象模型:描述靜態(tài)結(jié)構(gòu),定義做事情的實(shí)體功能模型:描述處理(數(shù)據(jù)變換),指明系統(tǒng)應(yīng)“做什么”動(dòng)態(tài)模型:描述交互過程,規(guī)定什么時(shí)候做

對(duì)象模型動(dòng)態(tài)模型功能模型三個(gè)模型分別從不同角度分析系統(tǒng)OMT方法的特點(diǎn)開發(fā)重點(diǎn)在分析階段強(qiáng)調(diào)數(shù)據(jù)結(jié)構(gòu)而不是功能形式化描述能力強(qiáng)開發(fā)步驟的銜接良好

重復(fù)性的開發(fā)過程(2)Coad-Yourdon方法

Coad-Yourdon方法的OOA過程:使用“尋找什么”標(biāo)準(zhǔn)來標(biāo)識(shí)對(duì)象定義一般/特殊結(jié)構(gòu)定義整體/部分結(jié)構(gòu)標(biāo)識(shí)主題(子系統(tǒng)構(gòu)件的表示)定義屬性定義服務(wù)

Yourdon的OOA方法

以類與對(duì)象圖及對(duì)象狀態(tài)圖為輔助工具,建立問題域的五層模型.

OOA模型被劃分為五個(gè)層次(五個(gè)視圖)與OMT的對(duì)象模型結(jié)合使用OOA的五個(gè)層次

類的邊界Class&objectlayer(類及對(duì)象層)Attributelayer(屬性層)Servicelayer(服務(wù)層)Structurelayer(結(jié)構(gòu)層)Subjectlayer(主題層)實(shí)例的邊界實(shí)例連接消息連接主題服務(wù)屬性分析階段由五個(gè)活動(dòng)組成:(1)標(biāo)識(shí)類及對(duì)象(2)標(biāo)識(shí)結(jié)構(gòu)(3)標(biāo)識(shí)主題(4)定義屬性及實(shí)例連接(5)定義服務(wù)及消息連接

五個(gè)步驟對(duì)應(yīng)五個(gè)層次,常根據(jù)需要交叉進(jìn)行。(3)Booch方法

Booch的OOA宏觀開發(fā)過程概述:標(biāo)識(shí)類和對(duì)象標(biāo)識(shí)類和對(duì)象的語義標(biāo)識(shí)類和對(duì)象間的關(guān)系進(jìn)行精化

不同面向?qū)ο蠓治龇椒ǖ南嗨撇襟E:1)使用基本需求作為指南選擇類和對(duì)象;2)為對(duì)象標(biāo)識(shí)屬性和操作;3)定義組織類的結(jié)構(gòu)和層次;4)建造對(duì)象-關(guān)系模型的;5)建造對(duì)象-行為模型。(4)統(tǒng)一的OOA方法由Rumbaugh

、Booch

、Jacobson

提出的統(tǒng)一建模語言

(UnifyModeingLanguage簡(jiǎn)稱UML)

UML是一種定義良好,易于表達(dá),功能強(qiáng)大且普遍實(shí)用的建模語言。,將在下一節(jié)將對(duì)UNL做具體介紹。。

使用UUML分析與設(shè)計(jì)建模:

需求陳述用況建模(功能建模)靜態(tài)建模(對(duì)象建模,結(jié)合五個(gè)層次)動(dòng)態(tài)建模

物理體系結(jié)構(gòu)建模

添加操作反復(fù)建模分析結(jié)果用UML描述。2.面向?qū)ο蠓椒ǖ拈_發(fā)過程

面向?qū)ο蠓椒ǜ倪M(jìn)了在生存期各個(gè)階段間的界面,因?yàn)樯嫫诟鱾€(gè)階段開發(fā)出來的“部件”都是類,在面向?qū)ο笊嫫诘母鱾€(gè)階段對(duì)各個(gè)類的信息進(jìn)行細(xì)化,類成為分析、設(shè)計(jì)和實(shí)現(xiàn)的基本單元。(1)開發(fā)過程1)分析階段

A.領(lǐng)域分析:?jiǎn)栴}所在領(lǐng)域的更大范圍。

B.應(yīng)用分析:集中于當(dāng)前問題。2)高層設(shè)計(jì):系統(tǒng)設(shè)計(jì),表示系統(tǒng)的類的界面。3)類的開發(fā)4)實(shí)例的建立:通過實(shí)例實(shí)現(xiàn)具體的功能。5)組裝測(cè)試6)維護(hù)

(2)類的生存期模型類的規(guī)格說明從廢棄型開發(fā)既存類的復(fù)用漸增式的實(shí)現(xiàn)漸增式的測(cè)試求精和維護(hù)

測(cè)試用例和測(cè)試的開發(fā)實(shí)現(xiàn)從既存類演變類的設(shè)計(jì)與實(shí)現(xiàn)類的規(guī)格說明指導(dǎo)對(duì)存放現(xiàn)存類的軟件庫進(jìn)行查找?,F(xiàn)存類提供當(dāng)前應(yīng)用所需功能。三種可能利用現(xiàn)存類的方向:

現(xiàn)存類的復(fù)用

從現(xiàn)存類進(jìn)行演變

從廢棄類進(jìn)行開發(fā)

概述7.1.3..1.UML概述1.UML的歷史

軟件工程領(lǐng)域在1995年至1997年取得了前所未有的進(jìn)展,其成果超過軟件工程領(lǐng)域過去15年來的成就總和。其中最重要的、具有劃時(shí)代重大意義的成果之一就是統(tǒng)一建模語言—UML(UnifiedModelingLanguage)的出現(xiàn)。在世界范圍內(nèi),至少在近10年內(nèi),UML將是面向?qū)ο蠹夹g(shù)領(lǐng)域內(nèi)占主導(dǎo)地位的標(biāo)準(zhǔn)建模語言。7.1.3統(tǒng)一建模語言(UML)9.1.1UML的形成從二十世紀(jì)八十年代初期起,眾多的方法學(xué)家都在探索進(jìn)行分析和設(shè)計(jì)的不同方法。并開始在一些關(guān)鍵性的項(xiàng)目中使用,如:Booch,OMT,Shlaer/Mellor,Odell/Martin,RDD,OBA和Objectory等。九十年代中,出現(xiàn)了第二代面向?qū)ο蠓椒?,著名的有Booch’94,OMT的沿續(xù)以及Fusion等。此時(shí),面向?qū)ο蠓椒ㄒ呀?jīng)成為軟件分析和設(shè)計(jì)方法的主流。1994年10月JimRumbaugh和GradyBooch共同合作把他們的OMT和Booch方法統(tǒng)一起來,到1995年成為“統(tǒng)一方法”(UnifiedMethod)版本0.8。隨后,IvarJacobson加入,并采用他的用例(Usercase)思想,到1996年,成為“統(tǒng)一建模語言”版本0.9。1997年1月,UML版本1.0被提交給OMG組織,作為軟件建模語言標(biāo)準(zhǔn)的候選。其后的半年多時(shí)間里,一些重要的軟件開發(fā)商和系統(tǒng)集成商都成為“UML伙伴”,如IBM,Mircrosoft,HP等.1997年11月7日被正式采納作為業(yè)界標(biāo)準(zhǔn)。UML的歷史圖9-1-1-1<documents>UML2.0<documents>UML1.2<documents>UML1.1<documents>UML1.0<documents>UML0.9<documents>UnifiedMethod0.8<documents>UML1.3<documents>UML1.41995文檔版類1996精華相關(guān)1997年1月最初提交給

OMG1997年9月最后提交給OMG19981999

2000年(計(jì)劃的較小修訂)

2001年計(jì)劃的重要修訂文字上的修改沒有顯著的技術(shù)變化9.1UML概述

UML是軟件界第一個(gè)統(tǒng)一的建模語言,它是一種標(biāo)準(zhǔn)的表示。是第三代用來為面向?qū)ο箝_發(fā)系統(tǒng)的產(chǎn)品進(jìn)行說明,可視化和編制文本的方法,它為不同領(lǐng)域的用戶提供了統(tǒng)一的交流標(biāo)準(zhǔn)—UML圖。

UML的價(jià)值在于它體現(xiàn)了世界上面向?qū)ο蠓椒▽?shí)踐的最好經(jīng)驗(yàn),對(duì)任何使用它的方法要求:支持用例驅(qū)動(dòng)(use-casedriven),以架構(gòu)為中心(architecture-centric)以及遞增(incremental)和迭代(iterative)地開發(fā)。

(1)UML統(tǒng)一了Booch、OMT和OOSE等方法中的基本概念。

(2)UML還吸取了面向?qū)ο蠹夹g(shù)領(lǐng)域中其他流派的長處。匯入了面向?qū)ο箢I(lǐng)域中很多人的思想。UML符號(hào)表示考慮了各種方法的圖形表示,刪掉了大量易引起混亂的、多余的和極少使用的符號(hào),也添加了一些新符號(hào)。

(3)UML在演變過程中還提出了一些新的概念。在UML標(biāo)準(zhǔn)中新加了模板(Stereotypes)、職責(zé)(Responsibilities)、擴(kuò)展機(jī)制(Extensibilitymechanisms)、線程(Threads)、過程(Processes)、分布式(Distribution)、并發(fā)(Concurrency)、模式(Patterns)、合作(Collaborations)、活動(dòng)圖(Activitydiagram)等新概念,并清晰地區(qū)分類型(Ty

pe)、類(Class)和實(shí)例(Instance)、細(xì)化(Refinement)、接口(Interfaces)和組件(Components)等概念。UML的主要特點(diǎn)9.1.3UML的特點(diǎn)2.UML的主要內(nèi)容與構(gòu)成

UML定義的主要內(nèi)容包括UML語義和UML表示法兩個(gè)部分。(1)UML語義描述基于UML的精確元模型定義。元模型為UML的所有元素在語法和語義上提供了簡(jiǎn)單、一致、通用的定義性說明,使開發(fā)者能在語義上取得一致,消除了因人而異的表達(dá)方法所造成的影響。此外UML還支持對(duì)元模型的擴(kuò)展定義。(2)UML表示法定義UML符號(hào)的表示法,為開發(fā)者或開發(fā)工具使用這些圖形符號(hào)和文本語法為系統(tǒng)建模提供了標(biāo)準(zhǔn)。這些圖形符號(hào)和文字所表達(dá)的是應(yīng)用級(jí)的模型,在語義上它是UML元模型的實(shí)例。9.1.2UML的主要內(nèi)容9.1.2UML的主要內(nèi)容UML是一種標(biāo)準(zhǔn)化的圖形建模語言,它是面向?qū)ο蠓治雠c設(shè)計(jì)的一種標(biāo)準(zhǔn)表示。主要由:視圖(views),圖(Diagrams),模型元素(Modelelements)通用機(jī)制(generalmechanism)等幾個(gè)部分構(gòu)成。

視圖用來表示被建模系統(tǒng)的各個(gè)方面(從不同的目的出發(fā)建立,為系統(tǒng)建立多個(gè)模型,這些模型都反映同一個(gè)系統(tǒng),且具有一致性)。視圖由多個(gè)圖(Diagrams)構(gòu)成,它不是一個(gè)圖片Graph),而是在某一個(gè)抽象層上,對(duì)系統(tǒng)的抽象表示。如果要為系統(tǒng)建立一個(gè)完整的模型圖,只需定義一定數(shù)量的視圖,每個(gè)視圖表示系統(tǒng)的一個(gè)特殊的方面就可以了。另外,視圖還把建模語言和系統(tǒng)開發(fā)時(shí)選擇的方法或過程連接起來。

后面介紹(1)視圖(views)9.1.2UML的主要內(nèi)容圖由各種圖片(模型元素符號(hào))構(gòu)成,用來描述一個(gè)視圖的內(nèi)容。UML語言定義了9種不同的圖的類型,把它們有機(jī)的結(jié)合起來就可以描述系統(tǒng)的所有視圖.(2)圖(Diagrams)9.1.2UML的主要內(nèi)容可在圖中使用的概念統(tǒng)稱為模型元素。模型元素代表面向?qū)ο笾械念?,?duì)象,關(guān)系和消息等概念,是構(gòu)成圖的最基本的常用的概念。模型元素用語義,元素的正式定義或確定的語句所代表的準(zhǔn)確含義來定義一個(gè)模型元素可以用在多個(gè)不同的圖中,它總是具有相同的含義和相同的符號(hào)表示。(3)模型元素(Modelelements)

模型元素在圖中用其相應(yīng)的的元素(符號(hào))表示, 模型元素與模型元素之間的連接關(guān)系也是模型元素,常見的關(guān)系有關(guān)聯(lián)(association),通用化(generalization),依賴(dependency)和聚合(aggregation)。除了上述的模型元素外,模型元素還包括消息,動(dòng)作和版類(stereotype)。9.1.2UML的主要內(nèi)容模型元素(續(xù))模型元素是UML構(gòu)造系統(tǒng)各種模型的元素,是UML構(gòu)建模型的基本單位.分為以下兩類:1)基元素是已由UML定義的模型元素。如:類、結(jié)點(diǎn)、構(gòu)件、注釋、關(guān)聯(lián)、依賴和泛化等。2)構(gòu)造型元素在基元素的基礎(chǔ)上構(gòu)造的新的模型元素。是由基元素增加了新的定義而構(gòu)成的,如擴(kuò)展基元素的語義(不能擴(kuò)展語法結(jié)構(gòu))。也允許用戶自定義。目前UML提供了40多個(gè)預(yù)定義的構(gòu)造型元素。如《使用》、《擴(kuò)展》。模型元素與通用機(jī)制模型元素指模型中的實(shí)體以及實(shí)體間相互連接的關(guān)系部分模型元素注解類屬性操作對(duì)象:類屬性操作狀態(tài)用況結(jié)點(diǎn)供應(yīng)接口包依賴關(guān)聯(lián)泛化主動(dòng)類屬性操作請(qǐng)求接口構(gòu)件實(shí)現(xiàn)視圖與圖主題域視圖(view)圖(diagram)結(jié)構(gòu)化(靜態(tài)的)靜態(tài)視圖類圖(class)設(shè)計(jì)視圖內(nèi)部結(jié)構(gòu)(internalstructure)協(xié)作圖(collaboration)構(gòu)件圖(component)用況視圖用況圖(usecase)動(dòng)態(tài)的狀態(tài)機(jī)視圖狀態(tài)機(jī)圖(statemachine)活動(dòng)視圖活動(dòng)圖(activity)交互視圖順序圖(sequence)通信圖(communication)物理的部署視圖部署圖(deployment)模型管理模型管理視圖包圖(package)標(biāo)準(zhǔn)建模語言UML的重要內(nèi)容可以由下列五類視圖(共9種圖)來定義:用例視圖

從用戶角度描述系統(tǒng)功能,并指出各功能的操作者,包括用例圖。靜態(tài)視圖(Staticdiagram),表示系統(tǒng)的靜態(tài)結(jié)構(gòu)。包括類圖、對(duì)象圖、包圖。行為視圖(Behaviordiagram),描述系統(tǒng)的動(dòng)態(tài)模型和組成對(duì)象間的交互關(guān)系。包括狀態(tài)圖。交互視圖(Interactivediagram),描述對(duì)象間的交互關(guān)系。包括時(shí)序圖、協(xié)作圖。實(shí)現(xiàn)視圖(Implementationdiagram)用于描述系統(tǒng)的物理實(shí)現(xiàn)。包括構(gòu)件圖、配置圖。

9.1.2UML的主要內(nèi)容另一種分類說法7.1.3.2視圖1.靜態(tài)視圖靜態(tài)視圖對(duì)應(yīng)用領(lǐng)域中的概念以及與系統(tǒng)實(shí)現(xiàn)有關(guān)的內(nèi)部概念建模,主要由類以及類之間的相互關(guān)系組成,在靜態(tài)視圖中不描述依賴于時(shí)間的系統(tǒng)行為。靜態(tài)視圖用類圖來展示。2.設(shè)計(jì)視圖設(shè)計(jì)視圖對(duì)應(yīng)用自身的設(shè)計(jì)結(jié)構(gòu)建模,例如,將設(shè)計(jì)結(jié)構(gòu)擴(kuò)展成:結(jié)構(gòu)化類元,為實(shí)現(xiàn)功能所需的協(xié)作和良定義接口的構(gòu)件的組裝。設(shè)計(jì)視圖由內(nèi)部結(jié)構(gòu)圖、協(xié)作圖和構(gòu)件圖實(shí)現(xiàn)。3.用況視圖用況視圖對(duì)被稱為執(zhí)行者的外部代理(他與特定視點(diǎn)的主題交互)所感受到的主題(如系統(tǒng))功能建模。用況視圖的意圖是列出系統(tǒng)中的用況和執(zhí)行者,并顯示哪個(gè)執(zhí)行者參與了哪個(gè)用況的執(zhí)行。用況的行為用動(dòng)態(tài)視圖,特別是交互視圖來表示。用況視圖用用況圖來展示。4.狀態(tài)機(jī)視圖狀態(tài)機(jī)視圖對(duì)一個(gè)類的對(duì)象的可能生命歷程建模。一個(gè)狀態(tài)機(jī)包括用遷移連接的狀態(tài),每個(gè)狀態(tài)對(duì)一個(gè)對(duì)象在其生命期中滿足某種條件的一個(gè)時(shí)間段建模。當(dāng)一個(gè)事件發(fā)生時(shí),它會(huì)導(dǎo)致觸發(fā)對(duì)象的一個(gè)狀態(tài)向另一個(gè)新狀態(tài)的遷移,附加在遷移上的動(dòng)作或活動(dòng)也同時(shí)被執(zhí)行。狀態(tài)機(jī)視圖用狀態(tài)機(jī)圖來展示。5.活動(dòng)視圖活動(dòng)展示了包含在執(zhí)行計(jì)算或工作流中的計(jì)算活動(dòng)的控制流。一個(gè)動(dòng)作是一個(gè)基本的計(jì)算步,一個(gè)活動(dòng)結(jié)點(diǎn)是一組動(dòng)作或子活動(dòng),一個(gè)活動(dòng)可描述順序的和并發(fā)的計(jì)算?;顒?dòng)視圖用活動(dòng)圖來展示。6.交互視圖交互視圖描述系統(tǒng)各部分中消息交換的順序。交互視圖提供了系統(tǒng)中行為的整體視圖,也就是說,它展示了多個(gè)對(duì)象間交叉的控制流。交互視圖用順序圖和通信圖來展示。7.部署視圖部署視圖描述了運(yùn)行時(shí)結(jié)點(diǎn)上制品的分布。制品是一個(gè)物理實(shí)現(xiàn)單元,如一個(gè)文件,它也可以表示一或多個(gè)構(gòu)件的實(shí)現(xiàn)(一種表現(xiàn)形式)。結(jié)點(diǎn)是運(yùn)行時(shí)表示計(jì)算資源的物理對(duì)象,如,計(jì)算機(jī)、設(shè)備或內(nèi)存。部署視圖允許對(duì)分配的結(jié)果和資源分配進(jìn)行評(píng)估。部署視圖用部署圖來展示。8.模型管理視圖模型管理視圖對(duì)模型自身的組織建模。一個(gè)模型由一組保存模型元素(如類、狀態(tài)機(jī)、用況)的包組成。包還可以包含其它的包,因此,一個(gè)模型從一個(gè)間接包含所有模型內(nèi)容的根包(rootpackage)開始。包是操縱模型內(nèi)容的單元,還是訪問控制和配置控制的單元。每個(gè)模型元素可以被一個(gè)包或另一個(gè)元素?fù)碛?。模型管理信息通常展示在包圖中,它是類圖的變種。9.剖面(profile)UML是用一個(gè)元模型(metamodel)定義的,元模型是指描述建模語言自身的模型。通常元模型的改變是復(fù)雜的,也是危險(xiǎn)的。剖面機(jī)制允許在不修改基礎(chǔ)元模型的前提下對(duì)UML作有限的變化。UML包含三個(gè)主要的可擴(kuò)展結(jié)構(gòu):約束(constraints)、版型(stereotypes)和標(biāo)簽值(taggedvalues)。約束是以自然語言或特定形式語言的正文表示的語義條件或限制,約束寫在花括號(hào)中({}),如{value≥0},{or}。版型是在基于現(xiàn)有各類模型元素的外形中定義模型元素的新類型,它本質(zhì)上是一種新元類(metaclass)。版型可以擴(kuò)展語義,但不能擴(kuò)展原元模型類的結(jié)構(gòu)。用《

》標(biāo)記版型,如《signal》。標(biāo)簽值是貼在任何模型元素上的被命名的信息片。下圖給出了版型和標(biāo)簽值的應(yīng)用實(shí)例。7.1.3.3圖

1.用況圖用況圖展示了各類外部執(zhí)行者與系統(tǒng)所提供的用況之間的連接。一個(gè)用況是系統(tǒng)所提供的一個(gè)功能(也可以說是系統(tǒng)提供的某一特定用法)的描述。執(zhí)行者是指那些可能使用這些用況的人或外部系統(tǒng)。執(zhí)行者與用況的連接表示該執(zhí)行者使用了那個(gè)用況。用況圖給出了用戶所感受到的系統(tǒng)行為,但不描述系統(tǒng)如何實(shí)現(xiàn)該功能。用況通常用普通正文描述,也可以用活動(dòng)圖來描述。圖9-3-1-1用例2用例A用例執(zhí)行者用例1用例3用例B《擴(kuò)展》《包含》(a)(b)(c)用況圖的元素:執(zhí)行者在用例圖中是用類似人的圖形來表示;用況用橢圓形表示;系統(tǒng)用方框表示;用況之間的關(guān)系用線段連接,如下表。用況之間的關(guān)系關(guān)系說明記號(hào)關(guān)聯(lián)執(zhí)行者與他所參與的一個(gè)用況之間的通信路徑擴(kuò)展擴(kuò)展的用況到基本用況的一種關(guān)系,它指出擴(kuò)展的用況所定義的行為如何插入到基本用況所定義的行為中。擴(kuò)展的用況通過模塊化方式增量地修改基本用況《extend》關(guān)系說明記號(hào)包含從基本用況到另一個(gè)用況(稱為包含用況,inclusionusecase)的一種關(guān)系,它指出包含用況定義的行為被包含在基本用況所定義的行為中?;居脹r能看到包含用況,并依賴于執(zhí)行包含用況后的結(jié)果,但兩者相互間不能訪問其它屬性用況泛化一個(gè)一般用況與一個(gè)更特殊的用況之間的關(guān)系,特殊用況可繼承一般用況的特征《include》用況圖電話訂購系統(tǒng)用況圖電話訂購系統(tǒng)客戶銷售人員派送人員管理人員建立信用處理訂單付款供應(yīng)商信息訂購商品信用卡付款現(xiàn)金付款制作訂單訂購請(qǐng)求《包含》包含》《包含》《擴(kuò)展》檢查訂單狀態(tài)圖9-3-2-1風(fēng)險(xiǎn)分析設(shè)置邊界進(jìn)行交易交易估價(jià)更新帳目《包含》貿(mào)易經(jīng)理營銷人員越界判斷評(píng)價(jià)記帳系統(tǒng)銷售人員金融貿(mào)易系統(tǒng)的用例圖圖9-3-2-2供貨買飲料取貨款客戶供貨人收銀員自動(dòng)售貨系統(tǒng)自動(dòng)售貨系統(tǒng)2.類圖與對(duì)象圖

類圖展示了系統(tǒng)中類的靜態(tài)結(jié)構(gòu),即類與類之間的相互聯(lián)系。類之間有多種聯(lián)系方式,如關(guān)聯(lián)(相互連接)、依賴(一個(gè)類依賴或使用另一個(gè)類)、泛化(一個(gè)類是另一個(gè)類的特殊情況)等。可以把若干個(gè)相關(guān)的類包裝在一起作為一個(gè)單元(包),相當(dāng)于一個(gè)子系統(tǒng)。一個(gè)系統(tǒng)可以有多張類圖。

對(duì)象圖是類圖的實(shí)例,它展示了系統(tǒng)執(zhí)行在某一時(shí)間點(diǎn)上的一個(gè)可能的快照。對(duì)象圖使用與類圖相同的符號(hào),只是在對(duì)象名下面加上下劃線,且通常給屬性賦予具體的值,同時(shí)它還顯示了對(duì)象間的所有實(shí)例鏈接(link)關(guān)系。類與對(duì)象用三層長方形表示;第一層為類/對(duì)象名;第二層為屬性,用來描述該類的對(duì)象所具有的特征;第三層為操作,規(guī)定了對(duì)象的行為,即表示對(duì)象所能提供的服務(wù)。類的名字屬性操作對(duì)象圖屬性表示

小汽車注冊(cè)號(hào):String日期:Cardata速度:Integer方向:Direction類圖屬性的類型示例9.4.1類圖丁一:作家姓名=丁一年齡=30丁一辦公室中的PC:

計(jì)算機(jī)名稱=Dell466內(nèi)存=64丁一家里的PC:

計(jì)算機(jī)名稱=長城PIIMMX內(nèi)存=64類圖示例9.4.1類圖(1)UML對(duì)屬性的描述

UML中,描述一個(gè)屬性的語法如下:visibilityopt/optattribute-name:typeopt

multiplicityopt

=initial-valueopt

{property-string}opt

其中帶下標(biāo)opt或

opt的部分表示該部分是任選的。

visibility(可見性):表示該屬性在哪個(gè)范圍內(nèi)可見(即可使用),見下表。符號(hào)種類語義+Public(公共的)任何能看到這個(gè)類的類都能看到該屬性#Protected(受保護(hù)的)這個(gè)類或者它的任何子孫類都能看到該屬性Private(私有的)只有這個(gè)類自身能看到該屬性Package(包的)在同一個(gè)包中的任何類能看到該屬性可見性attribute-name:表示屬性名。type(類型):用來指明屬性名的類型。multiplicity(重?cái)?shù)):用來指出該屬性可能的值的個(gè)數(shù)以及它們的排列次序和唯一性。值的個(gè)數(shù)寫在方括號(hào)([])中,其形式是:[minimum..maximum]。maximum可以是“*”,表示“無限”。當(dāng)值的個(gè)數(shù)是單一值(如值的個(gè)數(shù)是3)時(shí),可寫成[3..3]或簡(jiǎn)寫成[3]。典型的寫法有:[0..1],[1](表示[1..1]),[*](表示[0..*]),[1..*],[1..3]。當(dāng)重?cái)?shù)缺省時(shí),隱含表示重?cái)?shù)為1。當(dāng)一個(gè)屬性有多個(gè)值時(shí),可在值的個(gè)數(shù)后面指明值元素的排列次序和唯一性,排列次序和唯一性寫在花括號(hào)({})中,可使用的關(guān)鍵字如下表所示,其默認(rèn)值是set,即無序且值元素唯一。關(guān)鍵字排列次序和唯一性set無序,值元素唯一bag無序,值元素不唯一orderedset有序,值元素唯一list(orsequence)有序,值元素不唯一initial-value(初值):在創(chuàng)建一個(gè)類的實(shí)例對(duì)象時(shí),應(yīng)對(duì)其屬性賦值,如果類中對(duì)某屬性定義了初值,那么該初值可作為創(chuàng)建對(duì)象時(shí)該屬性的默認(rèn)值。property-string(特征字符串):用來明確地指明該屬性可能的候選值,如{紅,黃,綠}指出該屬性可枚舉的值只能是紅、黃、綠。屬性還可以定義為類屬性(classattribute,C++或Java中稱為靜態(tài)屬性—staticattibute),表示被這個(gè)類的所有實(shí)例對(duì)象共享該屬性的值。類屬性是這個(gè)類的名字空間中的全局變量。類屬性用下劃線來指明。maxCount:Integer=0jobID:Integercreate(){jobID=maxCount++}schedule()Job類屬性實(shí)例屬性類操作實(shí)例操作“發(fā)票”類的屬性

Invoice+amount:Real+date:Date=Currentdate+customer:String+line:record[1..5]{set}-administrator:String=“unspecified”-maxCount:Integer=0-numberofinvoices:Integer+status:Status=unpaid{unpaid,paid}(2)UML對(duì)操作的描述

UML中描述一個(gè)操作的語法如下:visibilityoptoperating-name(parameter-list):return-typeopt

{property-string}opt

操作可見性的含義與屬性中的含義相同。

參數(shù)表是用逗號(hào)分隔的形式參數(shù)序列,描述一個(gè)參數(shù)的語法如下:directionoptparameter-name:typemultiplicityopt

=default-valueopt

其中:direction(方向):用來指明參數(shù)信息流的方向。方向的取值關(guān)鍵字語義in傳遞值的輸入?yún)?shù),該參數(shù)的改變對(duì)調(diào)用者是無效的out輸出參數(shù),沒有輸入值,其最終值對(duì)調(diào)用者是有效的inout一個(gè)可以修改的輸入?yún)?shù),其最終值對(duì)調(diào)用者是有效的return調(diào)用的返回值,該值對(duì)調(diào)用者是有效的,語義上與out參數(shù)沒有不同,但在一串表達(dá)式中使用時(shí)return是有效的type和multiplicity的含義與屬性中的含義相同,default–value(默認(rèn)值)是在操作的調(diào)用者未提供參數(shù)時(shí),用它作為該參數(shù)的值。類也可以定義類操作(classoperation)。通常操作是在該類的對(duì)象實(shí)例上被調(diào)用的,而類操作可以在沒有對(duì)象實(shí)例的情況下被調(diào)用,但此時(shí)只允許訪問類屬性。FigureSize:SizePos:Position+draw()+resize(percentX:Integer=25,percentY:Integer=25)+returnPos():Position(3)

類之間的關(guān)系關(guān)系功能符號(hào)關(guān)聯(lián)類實(shí)例間連接的描述依賴二個(gè)模型元素之間的一種關(guān)系泛化更特殊描述與更一般描述之間的一種關(guān)系,用于繼承和多態(tài)性類型聲明實(shí)現(xiàn)規(guī)約(specification)與它的實(shí)現(xiàn)之間的關(guān)系1)

關(guān)聯(lián)關(guān)聯(lián)描述了系統(tǒng)中對(duì)象之間或其它實(shí)例之間的連接。關(guān)聯(lián)的種類主要有二元關(guān)聯(lián),多元關(guān)聯(lián),受限關(guān)聯(lián),聚集(aggregation)和組合(composition)。A.二元關(guān)聯(lián)二元關(guān)聯(lián)表示為在兩個(gè)類之間用一條直線連接,直線上可寫上關(guān)聯(lián)名。有首都國家城市工作于公司員工雇傭關(guān)聯(lián)通常是雙向的關(guān)聯(lián)的兩端可加上重?cái)?shù)(multiplicity),表示該類有多少個(gè)對(duì)象可與對(duì)方的一個(gè)對(duì)象關(guān)聯(lián)駕駛?cè)宿I車駕駛員公車工作于公司員工雇傭*1工作于公司員工雇傭**關(guān)聯(lián)的兩端還可加上角色名(role)允許一個(gè)類與自身關(guān)聯(lián)*雇傭*工作于工人1..*老板0..1管理公司員工雇傭關(guān)聯(lián)的鏈公司A張三公司B李四公司A王五公司C張三鏈?zhǔn)顷P(guān)聯(lián)的實(shí)例一個(gè)類的對(duì)象在不同的關(guān)聯(lián)中扮演不同的角色保險(xiǎn)公司人保險(xiǎn)合同保險(xiǎn)單0..11表示為表達(dá)0..*1有涉及婚姻丈夫妻子0..*1..*涉及有保險(xiǎn)客戶B.多元關(guān)聯(lián)三個(gè)或三個(gè)以上的類之間可以互相關(guān)聯(lián)項(xiàng)目程序語言程序員CAD程序:項(xiàng)目C:語言記賬系統(tǒng):項(xiàng)目COBOL:語言張三:

開發(fā)人員三重關(guān)聯(lián)對(duì)象圖C.受限關(guān)聯(lián)(qualifiedassociation):受限關(guān)聯(lián)用于一對(duì)多或多對(duì)多的關(guān)聯(lián)。限定符(qualifier)用來區(qū)分關(guān)聯(lián)“多”端的對(duì)象集合,它指明了在關(guān)聯(lián)“多”端的某個(gè)特殊對(duì)象

目錄文件0..*{ordered}有序關(guān)聯(lián)目錄文件文件名受限關(guān)聯(lián)D.聚集和組合

聚集(aggregation)是表示整體一部分關(guān)系的一種關(guān)聯(lián),它的“部分”對(duì)象可以是任意“整體”對(duì)象的一部分。聚集成員**組個(gè)人組合(composition):組合是一種更強(qiáng)形式的關(guān)聯(lián),代表整體的組合對(duì)象有管理它的部分對(duì)象的特有責(zé)任,如部分對(duì)象的分配和解除分配。組合關(guān)聯(lián)具有強(qiáng)的物主身份,即“整體”對(duì)象擁有“部分”對(duì)象,“部分”對(duì)象生存在“整體”對(duì)象中。*窗口正文對(duì)話框按鈕菜單***E.關(guān)聯(lián)類:UML中可以把關(guān)聯(lián)定義成類,該關(guān)聯(lián)的每個(gè)鏈都是這個(gè)類的實(shí)例。關(guān)聯(lián)類用戶工作站授權(quán)優(yōu)先級(jí)特權(quán)開始一個(gè)時(shí)間片*授權(quán)*F.導(dǎo)航性(navigability)導(dǎo)航*選課*學(xué)生課程(a)*選課*學(xué)生課程(c)*選課*學(xué)生課程(b)導(dǎo)航性符號(hào)明確的含義隱含的含義未指明雙向可導(dǎo)航右邊可導(dǎo)航左邊未指明只有右邊可導(dǎo)航只有右邊可導(dǎo)航只有右邊可導(dǎo)航右邊未指明左邊不可導(dǎo)航只有右邊可導(dǎo)航雙向可導(dǎo)航雙向可導(dǎo)航雙向不可導(dǎo)航雙向不可導(dǎo)航

2)泛化

泛化指出類間的“一般—特殊關(guān)系”(is-a)一般類定義了它的特殊類的公共屬性和操作對(duì)一般類擴(kuò)展一些屬性和/或操作后,可以特化(specialize)成特殊類一般類是特殊類的父類,特殊類是一般類的子類特殊類可以繼承一般類的屬性和操作子類可以定義自己的屬性和操作,也可重新定義父類中的操作,但重新定義的操作必須與父類具有相同的操作特征(signature)

顯示計(jì)算面積四邊形泛化和繼承

顯示六邊形

顯示三角形

多邊形顯示邊數(shù)頂角座標(biāo)

長寬矩形計(jì)算面積泛化是一種分類學(xué)關(guān)系,一個(gè)一般類可以從不同的維或方面將其特化(specialization)成不同的特殊類集合,用一個(gè)類元(用作分類符)來表示一個(gè)維或方面,由一個(gè)類元特化而成的特殊類組成一個(gè)泛化集(generalizationset)。在泛化集中可對(duì)其元素應(yīng)用約束,在UML中提供以下約束,見下表。泛化集的約束符號(hào)含義disjoint(不相交)該類元在泛化集中是互斥的overlapping(交迭)該類元在泛化集中不是互斥的complete(完全的)該類元在泛化集中完全覆蓋特化的維incomplete(不完全的)該類元在泛化集中不完全覆蓋特化的維泛化集的約束醫(yī)生人男人工人女人教師{overlapping,incomplete}{disjoint,complete}:職業(yè):職業(yè):職業(yè):性別:性別3)實(shí)現(xiàn)

實(shí)現(xiàn)關(guān)系將一個(gè)模型元素(如類)連接到另一個(gè)模型元素(如接口),后者(如接口)是行為的規(guī)約(specification),而不是結(jié)構(gòu),前者(如類)必須至少支持(通過繼承或直接聲明)后者的所有操作。可以認(rèn)為前者是后者的實(shí)現(xiàn)。

泛化和實(shí)現(xiàn)都可以將一般描述與具體描述聯(lián)系起來。其區(qū)別是,泛化是同一語義層上的元素之間的連接,通常在同一模型內(nèi);而實(shí)現(xiàn)是不同語義層中的元素之間的連接,它通常建立在不同的模型內(nèi),如設(shè)計(jì)類到分析類是一種實(shí)現(xiàn)關(guān)系。實(shí)現(xiàn)關(guān)系《interface》choiceBlocksetDefault(choice:Choice)getChoice():ChoiceRadioButtonArraysetDefault(choice:Button)getChoice():ButtonPopUpMenusetDefault(choice:String)getChoice():StringButtonChoiceString1..*1..*1..*choicechoicechoice4)依賴

依賴指出兩個(gè)或多個(gè)模型元素之間語義上的關(guān)系。它表示被依賴元素的變化會(huì)要求或指示依賴元素的改變。依賴關(guān)系用一個(gè)虛線箭頭表示,箭頭上可附加含關(guān)鍵字的版型,關(guān)鍵字用來指明依賴的種類。在UML2.0中的依賴種類如下:Access(訪問),bind(綁定),

call(調(diào)用),create(創(chuàng)建),derive(派生),instantiate(實(shí)例化),permit(允許),

realize(實(shí)現(xiàn)),refine(精化),send(發(fā)送),substitute(替換),

trace(追蹤依賴),use(使用)SchedulingEngine依賴關(guān)系BoxOffice《use》5)約束和派生(constraint&derivation)

約束是用自然語言或特定的形式語言正文表示的語義條件或限制,它用“{正文字符串}”形式表示。約束可以附加到任何模型元素上,如前面有關(guān)泛化的約束有:不相交、交迭、完全的、不完全的。***保險(xiǎn)公司人公司保險(xiǎn)合同{xor}***保險(xiǎn)公司人公司保險(xiǎn)合同目錄文件

0..*{ordered}1..*成員11黨派領(lǐng)袖1{subset}政治家黨派關(guān)聯(lián)的約束關(guān)系{self.employer=self.boss.employer}0..1工人*老板0..1公司員工*雇員雇主

Cost-priceSales-price/profitArticle{profit=Sales-price-Cost-price}

Invoice+amount:Real+date:Date=Currentdate+customer:String+specification:String-administrator:String=“unspecified”-numberofinvoices:Integer+status:Status=unpaid{unpaid,paid}關(guān)聯(lián)也可以被派生或約束1*{person.employer=person.department.employer}*1employeremployerdepartmentworksForDepartment/worksForCompany1*公司部門人6)模板(Templates)

模板是一個(gè)參數(shù)化的模型元素,使用它時(shí)參數(shù)必須在建模時(shí)綁定到實(shí)際值。模板的同義詞是參數(shù)化元素。模板類不是一個(gè)直接可用的類,因?yàn)樗形唇壎ǖ膮?shù),必須將它的參數(shù)綁定到實(shí)際值,以生成實(shí)際的類。《bind》<T→color,n→50>Arrayelement:T[n]T,n:integerExpression=2Arrayelement:T[n]T,n:integerExpression=2Array<T→Car,n→100>colorArray模板(a)(c)(b)一個(gè)模板類可以是一個(gè)一般類的子類,這意味著由綁定該模板而形成的所有類都是給定類(一般類)的子類。作為子類的模板在使用模板生成實(shí)際類時(shí),還可在綁定的類中附加特征(feature)。TopTenListArrayelement:T[n]T,n:integerExpression=2show:Datehost:person

對(duì)綁定的類添加屬性

《bind》<T→Joke,n→10>3。

狀態(tài)機(jī)圖狀態(tài)機(jī)圖通常是對(duì)類描述的補(bǔ)充,它說明該類的對(duì)象所有可能的狀態(tài)以及哪些事件將導(dǎo)致狀態(tài)的改變。一個(gè)事件可以是另一個(gè)對(duì)象向它發(fā)送的一條消息,或者是滿足了某些條件。狀態(tài)的改變稱為遷移(transition)。一個(gè)狀態(tài)遷移還可以有與之相關(guān)的動(dòng)作,該動(dòng)作指出狀態(tài)遷移時(shí)應(yīng)做什么。并不是所有的類都要畫狀態(tài)機(jī)圖,有些類有一些意義明確的狀態(tài),并且其行為受不同的狀態(tài)所影響和改變,這些類才需要畫狀態(tài)機(jī)圖。狀態(tài)機(jī)圖描述了對(duì)象的動(dòng)態(tài)行為,是一種對(duì)象生存周期的模型。

(1)畫狀態(tài)機(jī)圖的步驟1)列出對(duì)象具有的所有狀態(tài)狀態(tài)分為起始狀態(tài)、結(jié)束狀態(tài)和中間狀態(tài)。一張狀態(tài)機(jī)圖可以有一個(gè)起始狀態(tài)和若干個(gè)(可以為0)結(jié)束狀態(tài)。2)標(biāo)識(shí)導(dǎo)致狀態(tài)轉(zhuǎn)換的事件當(dāng)一個(gè)對(duì)象接收到某個(gè)事件時(shí),會(huì)導(dǎo)致從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài),稱為狀態(tài)遷移(transition)。3)為狀態(tài)和遷移定義狀態(tài)變量和動(dòng)作在狀態(tài)遷移和/或處于某個(gè)狀態(tài)中時(shí)都可能需要執(zhí)行一些相應(yīng)的動(dòng)作,綜合這些動(dòng)作,使得對(duì)象完成相應(yīng)的功能。狀態(tài)名狀態(tài)變量活動(dòng)狀態(tài)遷移起始狀態(tài)結(jié)束狀態(tài)狀態(tài)機(jī)圖的基本符號(hào)電梯升降的狀態(tài)機(jī)圖Movingupdo/movingtofloorMovingdowndo/movingtofloorIdletimer=0do/increasetimerarrivedarrivedgodown(floor)MovingtoFirstfloorgoup(floor)[timer=time-out]arrivedgoup(floor)Onfirstfloor(2)狀態(tài)一個(gè)狀態(tài)由狀態(tài)名、狀態(tài)變量和活動(dòng)三部分組成。狀態(tài)變量是狀態(tài)機(jī)圖所顯示的類的屬性,也可以是臨時(shí)變量?;顒?dòng)部分列出了處于該狀態(tài)時(shí)要執(zhí)行的事件和動(dòng)作。有三個(gè)標(biāo)準(zhǔn)事件:entry,exit和do。Entry和exit事件用于指明進(jìn)入和退出該狀態(tài)時(shí)的特定動(dòng)作。do事件用于指明在該狀態(tài)中時(shí)執(zhí)行的動(dòng)作?;顒?dòng)區(qū)中事件的語法如下:

event-nameopt

(argumentlist)opt[guard-condition]opt

/activity-expressionopt

其中,事件名可以是包括三個(gè)標(biāo)準(zhǔn)事件(entry,exit,do)在內(nèi)的任何事件,參數(shù)表表示該事件所需的參數(shù),警戒條件是一布爾表達(dá)式,動(dòng)作表達(dá)式是該事件將被執(zhí)行的動(dòng)作。loginlogintime=currenttimeentry/type“l(fā)ogin”do/getuse_namedo/getpasswordhelp/displayhelpexit/login(use_name,password)login狀態(tài)自動(dòng)售貨機(jī)狀態(tài)機(jī)圖idleCollectingmoneyCoinsin(amount)/addtobalancetestandcomputeDo:testitemandcomputechangeDo:dispenseitemDo:makechangeSelect(item)[change<0][itemempty]Coinsin(amount)/SetbalanceCancel/refundCoins[change>0][change=0](3)狀態(tài)遷移1)

狀態(tài)遷移引起狀態(tài)遷移的原因通常有兩種:當(dāng)標(biāo)在遷移箭頭上的事件出現(xiàn)時(shí)會(huì)引起狀態(tài)的遷移。此時(shí),首先執(zhí)行引起遷移的事件中的動(dòng)作,然后遷移到新的狀態(tài),執(zhí)行新狀態(tài)中的內(nèi)部動(dòng)作(包括entry、exit、do以及用戶定義的動(dòng)作)。在執(zhí)行do或用戶定義的動(dòng)作時(shí),可以被外部的事件(將導(dǎo)致該狀態(tài)的遷移)中斷,但entry動(dòng)作和exit動(dòng)作是不能被中斷的,并且它們總是要執(zhí)行完的。當(dāng)狀態(tài)機(jī)圖中相應(yīng)的遷移上未指明事件時(shí),表示當(dāng)位于遷移箭頭源頭的狀態(tài)中的內(nèi)部動(dòng)作(包括entry、exit、do以及用戶定義的動(dòng)作)全部執(zhí)行完后,該狀態(tài)遷移被自動(dòng)觸發(fā)。自動(dòng)售貨機(jī)狀態(tài)機(jī)圖idleCollectingmoneyCoinsin(amount)/addtobalancetestandcomputeDo:testitemandcomputechangeDo:dispenseitemDo:makechangeSelect(item)[change<0][itemempty]Coinsin(amount)/SetbalanceCancel/refundCoins[change>0][change=0]狀態(tài)遷移的語法如下:

event-nameopt

(parameter-list)opt

[guard-condition]opt

/effect-listopt其中:事件名及其參數(shù)表指出觸發(fā)遷移的事件,參數(shù)表的語法與“操作”中定義語法相同。警戒條件是一個(gè)布爾表達(dá)式。如果狀態(tài)遷移中既有事件特征又有警戒條件,則表示僅當(dāng)這個(gè)事件發(fā)生并且警戒條件為真時(shí)才觸發(fā)相應(yīng)的狀態(tài)遷移;如果狀態(tài)遷移上只有警戒條件,則表示當(dāng)該條件變?yōu)檎鏁r(shí),觸發(fā)狀態(tài)遷移。effect-list是當(dāng)該遷移觸發(fā)時(shí)執(zhí)行的過程表達(dá)式,即動(dòng)作表達(dá)式。表達(dá)式中可引用相應(yīng)對(duì)象中的屬性、操作,或者事件特征中的參數(shù)。動(dòng)作可以包括調(diào)用、發(fā)送和其它種類的動(dòng)作。一個(gè)狀態(tài)遷移上可以有多個(gè)用′/′符號(hào)分隔動(dòng)作表達(dá)式,它們按從左到右的次序依次執(zhí)行。不允許有嵌套的或遞歸的動(dòng)作表達(dá)式。[timer=time-out]^self.godown(firstfloor)電梯升降的狀態(tài)機(jī)圖Movingupdo/movingtofloorMovingdowndo/movingtofloorIdletimer=0do/increasetimerarrivedarrivedgodown(floor)goup(floor)goup(floor)Onfirstfloor(4)事件事件是指已發(fā)生并可能引發(fā)某種活動(dòng)的一件事類數(shù)字手表類及其狀態(tài)機(jī)圖inc/hours:=hours+1Digital_Watchmode_button()inc()do/displayminutesSetminutesdo/displayhoursSethoursdo/displaycurrenttimeDisplaymode_buttonmode_buttoninc/minutes:=minutes+1mode_button狀態(tài)機(jī)圖事件的種類事件類型描述調(diào)用事件callevent收到一條被一個(gè)對(duì)象外部同步調(diào)用的請(qǐng)求改變事件changeevent布爾表達(dá)式值的改變信號(hào)事件signalevent收到供對(duì)象間異步通信用的一個(gè)外部的、被命名的信號(hào)(實(shí)體)時(shí)間事件timeevent到達(dá)一個(gè)絕對(duì)時(shí)間或經(jīng)過一段相對(duì)的時(shí)間量IdleinputSenddo/send(input)tocorrespondingclassThesignalcouldbeanobjectofthefollowingclasses:Keyboard,LeftMouseButton,RightMouseButton,VoiceRecognition《signal》input{abstract}device:Devicetime:Time《signal》Keyboardcharacter:Charup:Booleandown:Boolean《signal》VoiceRecognitioncommando:string《signal》Mouse{abstract}up:Booleandown:BooleanxPos:intyPos:int《signal》RightMouseButton《signal》LeftMouseButton信號(hào)類層次(5)狀態(tài)機(jī)圖之間發(fā)送的消息狀態(tài)機(jī)圖之間可通過動(dòng)作(如在發(fā)送子句中指明接收者)或圖間的虛線箭頭向其他狀態(tài)機(jī)圖發(fā)送消息。當(dāng)采用虛線箭頭時(shí),狀態(tài)機(jī)圖必須畫在矩形框中。在圖間的消息箭頭有兩種畫法:從表示源對(duì)象的狀態(tài)機(jī)圖中的狀態(tài)遷移上畫虛線箭頭到表示目標(biāo)對(duì)象的狀態(tài)機(jī)圖的邊框上;在兩個(gè)狀態(tài)機(jī)圖的邊框間畫虛線箭頭,表示源對(duì)象在其執(zhí)行期間的某時(shí)刻發(fā)送該消息。在狀態(tài)機(jī)圖之間發(fā)送消息時(shí),在目標(biāo)對(duì)象的狀態(tài)機(jī)圖中應(yīng)畫有一個(gè)捕獲這個(gè)消息的相應(yīng)的遷移。On()Off()RemoteControlPlay()Stop()OffOnOn()Off()Play()Stop()OffOn/StopOn/PlayOff()/Stop()CDPlayerOn()Off()Stop()Play()狀態(tài)機(jī)圖之間的消息發(fā)送(6)組合狀態(tài)一個(gè)簡(jiǎn)單狀態(tài)沒有子結(jié)構(gòu),一個(gè)組合狀態(tài)被分解成區(qū)域,每個(gè)區(qū)域中包含一或多個(gè)直接子狀態(tài)。下面給出了UML中的主要狀態(tài)種類簡(jiǎn)單狀態(tài):一個(gè)設(shè)有子結(jié)構(gòu)的狀態(tài)正交狀態(tài)(并發(fā)):一個(gè)被分成多個(gè)區(qū)域的狀態(tài),當(dāng)該狀態(tài)活躍時(shí),每個(gè)區(qū)域中的一個(gè)直接子狀態(tài)并發(fā)地活躍

SS非正交狀態(tài)(非并發(fā)):一個(gè)包含一或多個(gè)直接子狀態(tài)的組合狀態(tài),當(dāng)該組合狀態(tài)活躍時(shí),在同一時(shí)刻組合狀態(tài)中只有一個(gè)子狀態(tài)是活躍的初始狀態(tài):當(dāng)嵌套狀態(tài)被調(diào)用時(shí),表示開始狀態(tài)的偽狀態(tài)終結(jié)狀態(tài):一個(gè)特定的狀態(tài),它的激活表示嵌套狀態(tài)已完成了活動(dòng)。S●●終止:一個(gè)特定的狀態(tài),它的激活將終止擁有該狀態(tài)機(jī)的對(duì)象的執(zhí)行

選擇:一個(gè)偽狀態(tài),它實(shí)現(xiàn)單個(gè)運(yùn)行到完成(run-to-completion)遷移中的動(dòng)態(tài)分枝歷史狀態(tài):一個(gè)偽狀態(tài),它的激活將還原到組合狀態(tài)中先前活躍的狀態(tài)入口點(diǎn):一個(gè)狀態(tài)機(jī)中外部可見的偽狀態(tài),它標(biāo)識(shí)作為目標(biāo)的內(nèi)部狀態(tài)出口點(diǎn):一個(gè)狀態(tài)機(jī)中外部可見的偽狀態(tài),它標(biāo)識(shí)作為源的內(nèi)部狀態(tài)HaTbU1)非正交狀態(tài)非正交狀態(tài)(非并發(fā)):一個(gè)包含一或多個(gè)直接子狀態(tài)的組合狀態(tài),當(dāng)該組合狀態(tài)活躍時(shí),在同一時(shí)刻組合狀態(tài)中只有一個(gè)子狀態(tài)是活躍的。一個(gè)狀態(tài)可以有嵌套的子狀態(tài),一個(gè)非正交的組合狀態(tài)可以擁有一或多個(gè)直接子狀態(tài),當(dāng)該組合狀態(tài)活躍時(shí),該組合狀態(tài)在同一時(shí)刻中只有一個(gè)子狀態(tài)是活躍的。例如,汽車中的變速器有中間狀態(tài)、前進(jìn)狀態(tài)和倒退狀態(tài),前進(jìn)狀態(tài)又有三個(gè)排擋子狀態(tài):第一、第二、第三,在任一時(shí)刻,這三個(gè)子狀態(tài)同時(shí)只有一個(gè)是活動(dòng)的,所以前進(jìn)狀態(tài)是“非正交”組合狀態(tài)。非正交(嵌套)狀態(tài)ForwardStopdownshiftupshiftdownshiftupshiftFirstSecondThirdpushNpushRpushNpushFNeutralReverseTransmission2)正交狀態(tài)三局二勝比賽的正交狀態(tài)PlayingrubberAVulnerabilityAwinAwinAwinsrubberNotvulnerablevulnerableBVulnerabilityBwinBwinBwinsrubberNotvulnerablevulnerable如果某些對(duì)象是另一些對(duì)象的聚集對(duì)象,則這些代表“部分”對(duì)象的狀態(tài)圖通常是并發(fā)的,它們都是聚集對(duì)象的并發(fā)子狀態(tài)。例如“汽車”對(duì)象是“點(diǎn)火”、“變速器”、“剎車”、“油門”等對(duì)象的聚集對(duì)象。transmissionignitionacceleratorcarbrakeCarturnkeytostart[TransmissioninNeutral]releasekeyturnkeyoffOffStartingOnIgnitionAcceleratordepressacceleratorReleaseacceleratoronoffBrakedepressbrakereleasebrakeonoffTransmissionForwardStopdownshiftupshiftdownshiftupshiftFirstSecondThirdpushNpushRpushNpushFNeutralReverse[汽車]---正交狀態(tài)(7)復(fù)雜遷移可以用復(fù)雜遷移表示并發(fā)的狀態(tài)遷移。一個(gè)復(fù)雜遷移可以有多個(gè)源狀態(tài)或目標(biāo)狀態(tài),它們可以把控制分解為并行運(yùn)行的并發(fā)線程,或?qū)⒍鄠€(gè)并發(fā)線程合并成單個(gè)線程。一個(gè)復(fù)雜遷移用一個(gè)短而粗的垂直條(bar)表示,可以從一個(gè)或多個(gè)狀態(tài)(稱為源狀態(tài))用實(shí)線箭頭指向bar,bar還可以用一個(gè)或多個(gè)實(shí)線箭頭指向其它狀態(tài)(稱為目標(biāo)狀態(tài))。遷移的警戒條件可寫在bar的旁邊。只有當(dāng)對(duì)象處于所有的源狀態(tài)中,并且遷移的警戒條件為真時(shí),遷移才被觸發(fā),意味著并發(fā)執(zhí)行的開始或結(jié)束。因此,bar實(shí)際上在并發(fā)活動(dòng)中起同步的作用。cashtakenandcardtakenreadySettingupReadytoresetEmittingdo:dispensecashdo:ejectcard復(fù)雜遷移(8)歷史指示器

歷史指示器用來記憶內(nèi)部的狀態(tài),用里面標(biāo)有H字母的圓圈表示。歷史指示器作用于標(biāo)有它的狀態(tài)區(qū)域,如果指向歷史指示器的遷移被觸發(fā),對(duì)象就會(huì)恢復(fù)到該狀態(tài)區(qū)域先前活躍的狀態(tài)。它使得對(duì)象能在活動(dòng)被中斷或需要逆行時(shí)回到先前活躍的那個(gè)狀態(tài)。歷史指示器可以有幾個(gè)進(jìn)入它的狀態(tài)遷移,但沒有離開它的狀態(tài)遷移。Restart()^Self.Restart()歷史指示器Create()[alternative=stop][alternative=stop][alternative=tryagain]Outofmemory()[alternative=continue]DiskError()HDiskerrorentry/fixdiskdo/showquestiondialogdo/AskalternativeMemorylowentry/showquestiondialogdo/askalternativeOSrunningRestartOSstartinstallshieldInstallentry/askinstallingquestionsdo/installsoftwareInstallsoftware4.活動(dòng)圖

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論