《軟件工程-理論、方法與實(shí)踐》課件第3章_第1頁
《軟件工程-理論、方法與實(shí)踐》課件第3章_第2頁
《軟件工程-理論、方法與實(shí)踐》課件第3章_第3頁
《軟件工程-理論、方法與實(shí)踐》課件第3章_第4頁
《軟件工程-理論、方法與實(shí)踐》課件第3章_第5頁
已閱讀5頁,還剩110頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章面向?qū)ο笙到y(tǒng)建模3.1面向?qū)ο蠡靖拍?.2統(tǒng)一建模語言UML3.34?+?1視圖3.4軟件系統(tǒng)模型3.5面向?qū)ο笙到y(tǒng)模型3.6軟件建模工具RationalRose本章小結(jié)習(xí)題

3.1面向?qū)ο蠡靖拍?/p>

3.1.1對象

對象(Object)是系統(tǒng)中用來描述客觀事物的一個實(shí)體,是構(gòu)成系統(tǒng)的一個基本單位。一個對象由一組屬性和對這組屬性進(jìn)行操作的一組方法(服務(wù))組成。

屬性和服務(wù)是構(gòu)成對象的兩個基本要素。屬性是用來描述對象靜態(tài)特征的一個數(shù)據(jù)項(xiàng)。服務(wù)是用來描述對象動態(tài)特征(行為)的一個操作序列。人們在開發(fā)一個軟件系統(tǒng)時,會在一定的范圍(也稱問題域)內(nèi)考慮和認(rèn)識與目標(biāo)系統(tǒng)有關(guān)的實(shí)體和事物,并用系統(tǒng)中的對象抽象地表示這些事物。在系統(tǒng)中,對象只描述客觀事物本質(zhì)的、與系統(tǒng)目標(biāo)有關(guān)的特征,而不考慮那些非本質(zhì)的、與系統(tǒng)目標(biāo)無關(guān)的特征。同時,對象是屬性和服務(wù)的結(jié)合體,對象的屬性值只能由這個對象的服務(wù)來讀取和修改。3.1.2類

類(Class)是具有相同屬性和服務(wù)的一組對象的集合,它為屬于該類的全部對象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和服務(wù)兩個主要部分。

類表示了一組相似的對象,是創(chuàng)建對象的有效模板,用它可以產(chǎn)生多個對象。類所代表的是一個抽象的概念或事物,在客觀世界中實(shí)際存在的是類的實(shí)例,即對象。以學(xué)校教學(xué)管理系統(tǒng)為例,“學(xué)生”是一個類,其屬性有姓名、性別、學(xué)號等,可以定義“選課”、“成績查詢”等操作。一個具體的學(xué)生“王雷”是一個對象,也是學(xué)生類的實(shí)例。3.1.3封裝

封裝(Encapsulation)是把對象的屬性和服務(wù)結(jié)合成一個獨(dú)立的系統(tǒng)單位,并盡可能隱藏對象的內(nèi)部細(xì)節(jié)。

封裝是面向?qū)ο蠓椒ǖ囊粋€重要原則,系統(tǒng)中把對象看成是屬性和服務(wù)的結(jié)合體,使對象能夠集中而完整地描述一個具體事物。封裝的信息隱蔽作用反映了事物的相對獨(dú)立性,如果從外部觀察對象,只需要了解對象所呈現(xiàn)的外部行為(即做什么),而不必關(guān)心它的內(nèi)部細(xì)節(jié)(即如何做)。與封裝密切相關(guān)的概念是可見性,它是指對象的屬性和服務(wù)允許對象外部存取和引用的程度。

在軟件領(lǐng)域中,封裝要求對象以外的部分不能隨意存取對象的內(nèi)部數(shù)據(jù)(屬性),從而有效地避免了外部錯誤對它的影響,使軟件的錯誤能夠局部化,大大降低了查錯和排錯的難度。另外,當(dāng)對象內(nèi)部需要修改時,由于它只通過少量的服務(wù)接口對外提供服務(wù),便大大減少了內(nèi)部修改對外部的影響,即減少了修改引起的“波動效應(yīng)”。封裝也有副作用,如果強(qiáng)調(diào)嚴(yán)格的封裝,則對象的任何屬性都不允許外部直接存取,因此就要增加許多沒有其他意義、只負(fù)責(zé)讀或?qū)懙姆?wù),從而給編程工作增加了負(fù)擔(dān),也增加了運(yùn)行開銷。為了避免這一點(diǎn),往往會采取一些比較靈活的做法,即允許對象有不同程度的可見性。3.1.4繼承

繼承(Inheritance)是指兩個類之間具有的一種關(guān)系,子類可以自動擁有父類的全部屬性和服務(wù)。

繼承簡化了人們對現(xiàn)實(shí)世界的認(rèn)識和描述,在定義子類時不必重復(fù)定義那些已在父類中定義過的屬性和服務(wù),只要說明它是某個父類的子類,并定義自己特有的屬性和服務(wù)即可。例如:考慮輪船和客輪兩個類,輪船具有噸位、時速、吃水線等屬性和行使、停泊等服務(wù),客輪具有輪船的全部屬性和服務(wù),又有自己的特殊屬性(如載客量)和服務(wù)(供餐),因此客輪是輪船的子類,輪船是客輪的父類。一個類可以是多個父類的子類,它從多個父類中繼承屬性與服務(wù),稱為多繼承(MultipleInheritance)。例如客輪既是一種輪船又是一種客運(yùn)工具,它可以繼承輪船和客運(yùn)工具這兩個類的屬性和服務(wù)。

與父類/子類等價的其他術(shù)語有一般類/特殊類、超類/子類、基類/派生類等。

繼承對軟件復(fù)用是十分有益的。如果將面向?qū)ο蠓椒ㄩ_發(fā)的類作為可復(fù)用的組件,那么在開發(fā)新系統(tǒng)時可以直接復(fù)用這個類,也可以將其作為父類通過繼承實(shí)現(xiàn)復(fù)用,從而大大擴(kuò)展了復(fù)用的范圍。3.1.5消息

消息(Message)是對象發(fā)出的服務(wù)請求,一般包括提供服務(wù)的對象標(biāo)識、服務(wù)標(biāo)識、輸入信息和應(yīng)答信息等。

面向?qū)ο蠹夹g(shù)的封裝機(jī)制使對象各自獨(dú)立,各司其職,消息機(jī)制則為它們提供了交互途徑,使對象之間能夠相互協(xié)作,實(shí)現(xiàn)系統(tǒng)的目標(biāo)。面向?qū)ο笙到y(tǒng)的消息通常表現(xiàn)為對象之間的方法調(diào)用,

例如:

//Callamethodassociatedwithabuffer

//objectthatreturnsthenextvalueinthebuffer

v=circularBuffer.Get();在基于服務(wù)(Service-Based)的系統(tǒng)中,消息是采用XML描述的一段文本信息。例如:

<env:Envelopexmlns:env=“/2001/06/soap-envelope”>

<env:Header>

<abc:Extension1xmlns:abc=“/stuff”

env:mustUnderstand=“1”/>

<abc:Extension2xmlns:def=“/ext”

env:mustUnderstand=“1”/>

</env:Header>

<env:Body>

</env:Body>3.1.6關(guān)聯(lián)

關(guān)聯(lián)是對象屬性之間的靜態(tài)關(guān)系,它通過對象的屬性來表現(xiàn)對象之間的依賴關(guān)系。

在面向?qū)ο蟮男g(shù)語中,對象之間的實(shí)例連接被稱為鏈接(Link),而存在實(shí)例連接的對象類之間的聯(lián)系稱為“關(guān)聯(lián)”(Association)。例如,“教師”與“學(xué)生”是兩個獨(dú)立的類,它們之間存在“教學(xué)”關(guān)系,這種聯(lián)系是通過類中的“教學(xué)課程”、“時間”、“地點(diǎn)”等屬性建立起來的。關(guān)聯(lián)存在多重性,用以描述一個關(guān)聯(lián)的實(shí)例中有多少個相互連接的對象。關(guān)聯(lián)的多重性是一個取值范圍的表達(dá)式或者一個具體值,可以精確地表示多重性為1、0或1.(0..1)、多個(0..*)、一個或多個(1..*),如果需要還可以標(biāo)明精確的數(shù)值。3.1.7聚合和組合

聚合是一種特殊形式的關(guān)聯(lián)。聚合表示類之間整體與部分的關(guān)系。在對系統(tǒng)進(jìn)行分析與設(shè)計時,需求描述中的“包含”、“組成”、“分為……部分”等詞常常意味著存在聚合關(guān)系。

組合表示的也是類之間的整體與部分的關(guān)系,但組合關(guān)系中的整體與部分具有同樣的生存期。也就是說,組合是一種特殊形式的聚合。3.1.8多態(tài)性

多態(tài)性(Polymorphism)是指在父類中定義的屬性或服務(wù)被子類繼承后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。

在具有繼承關(guān)系的一個類層次結(jié)構(gòu)中,不同層次的類可以共享一個操作,但卻有各自不同的實(shí)現(xiàn)。當(dāng)一個對象接收到一個請求時,它根據(jù)其所屬的類,動態(tài)地選用在該類中定義的操作。多態(tài)性機(jī)制不但為軟件的結(jié)構(gòu)設(shè)計提供了靈活性,還減少了信息冗余,明顯提高了軟件的可復(fù)用性和可擴(kuò)充性。多態(tài)性的實(shí)現(xiàn)需要OOPL提供相應(yīng)的支持,與多態(tài)性實(shí)現(xiàn)有關(guān)的語言功能包括:重載(Overload)、動態(tài)綁定(DynamicBinding)、類屬(Generic)。

3.2統(tǒng)一建模語言UML

3.2.1UML的特點(diǎn)及組成

UML的主要特點(diǎn)可歸納為以下幾點(diǎn):

(1)統(tǒng)一的標(biāo)準(zhǔn)。UML已被OMG接受為標(biāo)準(zhǔn)的建模語言,越來越多的開發(fā)人員開始使用UML進(jìn)行開發(fā),越來越多的開發(fā)廠商開始支持UML。

(2)面向?qū)ο?。UML是支持面向?qū)ο筌浖_發(fā)的建模語言。

(3)獨(dú)立于過程。UML不依賴于特定的軟件開發(fā)過程,這也是UML能被眾多軟件開發(fā)人員接受的一個原因。

(4)概念明確,建模表示法簡潔,圖形結(jié)構(gòu)清晰,容易掌握和使用。圖3.1是UML的構(gòu)成圖,UML中有三類主要元素:基本構(gòu)造塊(BasicBuildingBlock)、語義規(guī)則(Rule)和公共機(jī)制(CommonMechanism)。圖3.1UML的構(gòu)成

UML主要包括三個基本構(gòu)造塊,即事物(Things)、關(guān)系(Relationships)和圖(Diagrams);五個方面的語義規(guī)則,即命名(Name)、范圍(Scope)、可見性(Visibility)、完整性(Integrity)和可執(zhí)行性(Execution);四種公共機(jī)制,即說明(Specification)、修飾(Adornment)、通用劃分(CommonDivision)和擴(kuò)展機(jī)制(ExtensibilityMechanism),其中擴(kuò)展機(jī)制包括版型、標(biāo)記值和約束三種類型。3.2.2UML事物

1.結(jié)構(gòu)事物(Structuralthings)

結(jié)構(gòu)事物是模型中的靜態(tài)部分,用以呈現(xiàn)概念或?qū)嶓w表現(xiàn)元素,是軟件建模中最常見的元素,共有以下七種:

(1)類(Class)。類是指具有相同屬性、方法、關(guān)系和語義對象集合;圖3.2所示為類的UML符號。圖3.2類的UML符號屬性定義格式如下:

[可見性]屬性名[:類型][=缺省值]

操作定義格式如下:

[可見性]操作名[(參數(shù)列表)][:返回值類型]關(guān)于屬性和操作的可見性一般有三種情況:

●?public+:公有的(缺省值),對于一個給定的類,任何一個帶有可見性的外部類都可以使用該特征;

●?protected#:受保護(hù)的,類的任何子類都可以使用該特征;

●?private–:私有的,只有類本身可以使用該特征。

(2)接口(Interface)。接口是指類或組件所提供的服務(wù)

(操作),描述了類或組件對外可見行為。圖3.3為接口的兩種UML符號,左邊的為接口的簡化表示,右邊的為接口完整

表示,定義了一個接口(類)ActionListener,它具有兩個方法actionPerformed()和test()。圖3.4展示了兩種符號的使用情況,且表明接口MouseMotionListener由類EventHandler來實(shí)現(xiàn)。圖中的虛線空心箭頭表示兩者之間的實(shí)現(xiàn)關(guān)系。圖3.3接口的UML符號圖3.4接口兩種符號的使用

(3)協(xié)作(Collaboration)。協(xié)作定義了事物間的交互操作。在前面的討論中,我們知道面向?qū)ο蟮南到y(tǒng)是由類的協(xié)作來完成相應(yīng)的行為,在UML中,協(xié)作可以用來描述這些類的協(xié)作,包括和其他事物及元素的協(xié)作。UML中協(xié)作用虛線構(gòu)成的橢圓表示,見圖3.5。圖3.5部分結(jié)構(gòu)事物符號

(4)用例(UseCase)。用例定義了一個系統(tǒng)或系統(tǒng)的部分行為,是對一組動作序列的描述,為參與者產(chǎn)生一個可觀察的執(zhí)行結(jié)果,如報表打印用例。用例的UML符號見圖3.5。

(5)活動類(ActiveClass)。活動類的對象有一個或多個進(jìn)程或線程。活動類和類很相像,只是其對象所代表的元素的行為和其他元素是同時存在的。在UML中活動類的表示法和類相同,只是邊框用粗線條。

(6)組件(Component)。組件是物理的、可替換的部分,包含接口集合,例如COM、JavaBEANS等。組件的UML符號見圖3.5。

(7)節(jié)點(diǎn)(Node)。節(jié)點(diǎn)是系統(tǒng)在運(yùn)行時存在的物理元素,代表一個可計算資源,通常占用一些內(nèi)存,具有處理能力,如一個Web服務(wù)器。節(jié)點(diǎn)的UML符號見圖3.5。

2.行為事物(Behavioralthings)

行為事物是指UML模型中動態(tài)部分,代表語句里的“動詞”,表示模型中隨著時空不斷變化的部分,包括兩類:

(1)交互(Ineraction):交互是一組對象在特定上下文中,為達(dá)到特定目的而進(jìn)行的一系列消息交換,如一個方法調(diào)用Move()。交互的UML符號見圖3.6。

(2)狀態(tài)機(jī)(StateMachine):狀態(tài)機(jī)由一系列對象狀態(tài)組成。狀態(tài)機(jī)的UML符號見圖3.6。圖3.6行為事物

3.分組事物(Groupingthings)

分組事物用于對模型進(jìn)行分解描述。目前只有一種分組事物,即包(package)。結(jié)構(gòu)事物、行為事物甚至分組事物都有可能被放在一個包中,以利于模型的簡化和理解。在系統(tǒng)模型中,包常被用于表示子系統(tǒng)和描述軟件體系結(jié)構(gòu),如通信控制子系統(tǒng)包。包純粹是一種邏輯概念,只存在于開發(fā)階段,而組件是物理概念,在系統(tǒng)運(yùn)行時也存在。分組事物的UML符號見圖3.7。圖3.7分組事物

4.注釋事物(Annotationalthings)

注釋事物是UML模型解釋部分。注釋事物的UML符號如圖3.8所示。圖3.8注釋事物3.2.3UML關(guān)系

UML的關(guān)系用于對事物之間的關(guān)系建模,關(guān)系分為四種類型:關(guān)聯(lián)(Association)、泛化(Generalization)、依賴(Dependency)和實(shí)現(xiàn)(Realization),其模型符號表示如圖3.9所示,其中聚合是一種特殊的關(guān)聯(lián)。圖3.9UML的關(guān)系依賴是一種使用關(guān)系,它說明一個事物的變化會影響另一個使用它的事物,依賴關(guān)系不只是限于類之間。圖3.9中支付類payment依賴于訂單類order。類的依賴可能由如下幾種原因引起:

●一個類向另一個類發(fā)送消息。

●一個類是另一個類的數(shù)據(jù)成員。

●一個類是另一個類的某個操作參數(shù)。3.2.4UML圖

UML圖由事物及事物間的關(guān)系構(gòu)成,共有九類圖,可用于不同過程階段、不同角度的系統(tǒng)建模和過程建模。這九類圖分別是用例圖、類圖、包圖、組件圖、部署圖(實(shí)施圖)、狀態(tài)圖、順序圖、協(xié)作圖和活動圖。

1.用例圖

用例圖是從系統(tǒng)參與者(actor)的角度所理解的系統(tǒng)功能以及參與者與用例(Usecase)間的交互。用例圖用于定義階段的需求建模。在UML中,用例模型由若干個用例圖來描述,用例圖的主要元素是用例和參與者及它們之間的關(guān)系,如圖3.10所示。圖3.10用例圖

(1)用例。從本質(zhì)上講,一個用例是用戶與計算機(jī)之間的一次典型交互作用。在UML中,用例被定義成系統(tǒng)執(zhí)行的一系列動作,動作執(zhí)行的結(jié)果能被參與者感受到。概括地說,用例有以下特點(diǎn):

●用例捕獲某些用戶可見的需求,實(shí)現(xiàn)一個具體的用戶目標(biāo),如注冊用例Register。

●用例由參與者激活,并提供確切的值給參與者,如參與者Student提供注冊請求激活用例Register,并將注冊結(jié)果返回給參與者Student。

●用例可大可小,但必須是對一個具體的用戶目標(biāo)實(shí)現(xiàn)的完整描述。

(2)參與者。參與者是指用戶在系統(tǒng)中所扮演的角色。參與者在用例圖中是用類似人的圖形來表示,但參與者未必是人。例如,參與者也可以是一個外部系統(tǒng),該外部系統(tǒng)可能需要從當(dāng)前系統(tǒng)中獲取信息,與當(dāng)前系統(tǒng)進(jìn)行交互。

(3)用例之間的關(guān)系。用例之間有擴(kuò)展、使用、組合三種關(guān)系,擴(kuò)展和使用是繼承關(guān)系的另一種體現(xiàn)形式。組合則是把相關(guān)的用例打成包,當(dāng)作一個整體看待。

圖3.11為自動售貨機(jī)系統(tǒng)的用例圖。圖3.11自動售貨系統(tǒng)的用例圖

2.類圖

類圖通常包含以下四項(xiàng)內(nèi)容:類、接口、關(guān)系和協(xié)作。類圖可以包含注釋的約束,如圖3.12所示,其中類的關(guān)系如下:

(1)?BankCustomer和ATM類間為關(guān)聯(lián)關(guān)系。

(2)?BankCustomer和Account是組合關(guān)系,它們具有同樣的生命周期。

(3)?Acount對象中包含0或多個Transaction對象。

(4)?CurrentAccount和SavingsAccount類繼承Account類。圖3.12ATM類圖

3.包圖

構(gòu)成包的模型元素稱為包的內(nèi)容,包的內(nèi)容可以是一個類圖也可以是另一個包圖。包與包之間不能共用一個相同的模型元素。例如在圖3.13中,“系統(tǒng)內(nèi)部”包由“保險單”包和“客戶”包組成,我們把“保險單”包和“客戶”包稱為“系統(tǒng)內(nèi)部”包的內(nèi)容。圖3.13包圖

包與包之間允許建立依賴、泛化等關(guān)系。例如,在圖3.13中“保險單填寫界面”包依賴于“保險單”包,整個“系統(tǒng)內(nèi)部”包依賴于“數(shù)據(jù)庫界面”包??梢允褂美^承關(guān)系中“一般”和“特殊”的概念來說明通用包和專用包之間的關(guān)系。例如,“Oracle界面”包和“Sybase界面”包繼承“數(shù)據(jù)庫界面”包。在圖3.13中,通過“數(shù)據(jù)庫界面”包,“系統(tǒng)內(nèi)部”包既可以使用Oracle的界面也可以使用Sybase的界面。這是因?yàn)楹皖惖睦^承關(guān)系類似,專用包必須與通用包的界面一致。通用包可標(biāo)記為{abstract},表示該包只是定義了一個界面,具體實(shí)現(xiàn)由專用包完成。

4.組件圖

可執(zhí)行組件是一個可執(zhí)行的程序文件,是鏈接所有二進(jìn)制組件所得到的結(jié)果。一個可執(zhí)行組件代表在處理器上運(yùn)行的可執(zhí)行單元。

在UML中,組件的圖示符號是左邊帶有一個橢圓和兩個小長條形的大長方形。組件間的依賴關(guān)系用一條帶箭頭的虛線表示。圖3.14是組件圖的例子。圖3.14組件圖

5.部署圖

(1)節(jié)點(diǎn)和連接。節(jié)點(diǎn)(node)是存在于運(yùn)行時的代表計算資源的物理元素,節(jié)點(diǎn)一般都具有一些內(nèi)存,而且常常具有處理能力。

節(jié)點(diǎn)可以代表一個物理設(shè)備以及運(yùn)行在其上的軟件系統(tǒng),例如,一臺UNIX主機(jī)、一個PC終端、一臺打印機(jī)、一臺通信設(shè)備等。在圖3.15中,“客戶端PC”和“保險后臺服務(wù)器”就是兩個節(jié)點(diǎn)。在UML中,節(jié)點(diǎn)用一個立方體來表示。圖3.15部署圖

(2)組件和接口。在部署圖中,組件代表可執(zhí)行的物理代碼模塊(可執(zhí)行組件的實(shí)例),在邏輯上它可以與類圖中的包或類對應(yīng)。因此,部署圖描述的是運(yùn)行時各個包或類在節(jié)點(diǎn)的分布情況。如圖3.15所示,“保險后臺服務(wù)器”節(jié)點(diǎn)中包含“保險系統(tǒng)”、“保險對象數(shù)據(jù)庫”和“保險系統(tǒng)配置”三個組件。

在面向?qū)ο蠓椒ㄖ?,并不是類和組件等元素的所有屬性和操作都對外可見,它們對外提供的可見操作和屬性稱為接口。接口用一端是小圓圈的直線來表示。在圖3.15中,“保險系統(tǒng)”組件提供了一個名字叫“配置”的接口。部署圖中還顯示了組件之間的依賴關(guān)系:“保險系統(tǒng)配置”組件通過這個接口依賴于“保險系統(tǒng)”組件。

(3)對象。在一個面向?qū)ο蟮能浖到y(tǒng)中運(yùn)行著許多對象。由于可以把組件看作是與包或類對應(yīng)的物理代碼模塊,因此,組件中應(yīng)該包含一些運(yùn)行的對象。部署圖中的對象與對象圖中的對象表示方法相同。在圖3.15中,“保險系統(tǒng)配置”組件包含“配置保險策略”和“配置用戶”兩個對象。

6.狀態(tài)圖

狀態(tài)圖中定義的狀態(tài)有以下幾種:

●初態(tài);狀態(tài)圖的起始點(diǎn),一個狀態(tài)圖只能有一個初態(tài)。

●終態(tài):是狀態(tài)圖的終點(diǎn),一個狀態(tài)圖可以有多個終態(tài)。

●中間狀態(tài):可包括三個區(qū)域:名字域、狀態(tài)變量與活動域。

●復(fù)合狀態(tài):可以進(jìn)一步細(xì)化的狀態(tài)稱作復(fù)合狀態(tài)。

活動則列出了在該狀態(tài)時要執(zhí)行的事件和動作,即響應(yīng)事件的內(nèi)部動作或活動的列表,定義為:

事件名(參數(shù)表[條件])/動作表達(dá)式通常有三個標(biāo)準(zhǔn)事件:

entry事件:用于指明進(jìn)入該狀態(tài)時的特定動作。

exit事件:用于指明退出該狀態(tài)時的特定動作。

do事件:用于指明在該狀態(tài)中時執(zhí)行的動作。

圖3.16描述了login狀態(tài)。一個對象的狀態(tài)變遷稱為狀態(tài)遷移。通常是由事件觸發(fā)的,事件是激發(fā)狀態(tài)遷移的條件或操作。在狀態(tài)圖中,一般應(yīng)標(biāo)出觸發(fā)轉(zhuǎn)移的事件表達(dá)式。如果轉(zhuǎn)移上未標(biāo)明事件,則表示在源狀態(tài)的內(nèi)部活動執(zhí)行完畢后自動觸發(fā)轉(zhuǎn)移。

圖3.17描述了電梯升降的狀態(tài)圖。電梯升降有5個狀態(tài),狀態(tài)之間的箭頭表示遷移和引起狀態(tài)遷移的事件。圖3.16login狀態(tài)

圖3.17電梯狀態(tài)圖

7.順序圖

順序圖描述了一組交互對象間的交互方式,它表示完成某項(xiàng)行為的對象和這些對象之間交互(傳遞消息)的時間順序。順序圖由對象、生命線、控制焦點(diǎn)、消息等組成,如圖3.18所示,其中對象生命線是一條垂直的虛線,表示對象存在的時間??刂平裹c(diǎn)是一個細(xì)長的矩形,表示對象執(zhí)行一個操作所經(jīng)歷的時間段;消息是對象之間的一條水平箭頭線,表示對象之間的通信。圖3.18打電話的順序圖

8.協(xié)作圖

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

圖3.19是一個打印文件的協(xié)作圖,圖中有三個對象:“Computer”、“PrinterServer”和“Printer”。圖3.19打印文件的協(xié)作圖協(xié)作圖和順序圖的區(qū)別在于,協(xié)作圖呈現(xiàn)真正的對象及其鏈接,在許多情況下有利于理解對象的交互;而順序圖更易幫助理解對象的交互在時間順序上的關(guān)系。建模對象協(xié)作的一般原則是:當(dāng)需要關(guān)注對象之間的交互時,選擇協(xié)作圖,如果只需了解對象交互的時間順序則選擇順序圖。

9.活動圖

圖3.20是一個打印操作的活動圖,當(dāng)調(diào)用PrintAllCustomer操作(在CustomerWindow類中)時動作開始。第一個活動是在屏幕上顯示一個打印消息;第二個動作是創(chuàng)建一個PS(postscript)文件;第三個動作是把所創(chuàng)建的PS文件發(fā)送給打印機(jī);第四個動作是從屏幕上刪除消息。圖3.20打印操作的活動圖

3.34?+?1視圖

Kruchten提出了基于UML的“4?+?1”視圖模型,從5個不同的視角——用例視圖(Usecaseview)、設(shè)計視圖(Designview)、進(jìn)程視圖(Processview)、實(shí)現(xiàn)視圖(Implementationview)、分布視圖(Deploymentview)來描述軟件體系結(jié)構(gòu)。每一種視圖從一個角度聚焦系統(tǒng)的一個側(cè)面,從而使不同的人員關(guān)注系統(tǒng)的不同方面。4?+?1視圖則可反映出系統(tǒng)的全部內(nèi)容,如圖3.21所示。圖3.214?+?1視圖

(1)用例視圖采用用例模型描述系統(tǒng)應(yīng)該具有的功能集,即系統(tǒng)應(yīng)提供給最終用戶的服務(wù)。

(2)設(shè)計視圖描述系統(tǒng)的設(shè)計模型,用來揭示系統(tǒng)的結(jié)構(gòu)及系統(tǒng)構(gòu)件的協(xié)作情況。

(3)進(jìn)程視圖側(cè)重于系統(tǒng)的運(yùn)行特性,主要關(guān)注一些非功能性的需求,如系統(tǒng)的性能、并發(fā)特性、分布特性、容錯能力等。

(4)實(shí)現(xiàn)視圖由一些獨(dú)立的組件和文件組成,常采用組件圖描述實(shí)現(xiàn)模塊及其之間的依賴關(guān)系。

(5)分布視圖主要采用部署圖來描述系統(tǒng)的物理架構(gòu),將系統(tǒng)的硬件拓?fù)浣Y(jié)構(gòu)呈現(xiàn)給開發(fā)人員、集成人員和測試人員。

3.4軟件系統(tǒng)模型

通常一個軟件系統(tǒng)的開發(fā)過程,需要一系列的模型來描述問題和整個系統(tǒng),這種描述較之自然語言的描述更易于理解。在分析過程中,模型的作用一方面可以增進(jìn)對現(xiàn)存系統(tǒng)的理解,另一方面有助于對新系統(tǒng)的說明。在設(shè)計過程中,模型呈現(xiàn)了系統(tǒng)的解決方案。一般來說系統(tǒng)模型通常包括以下幾種:

(1)系統(tǒng)的上、下文模型。對系統(tǒng)的上下文和外部環(huán)境建模,如用例圖。

(2)體系結(jié)構(gòu)模型。反映構(gòu)成系統(tǒng)的部件及其它們之間的關(guān)系,如包圖。

(3)數(shù)據(jù)處理模型。說明數(shù)據(jù)在系統(tǒng)中是如何被處理的,如數(shù)據(jù)流圖。

(4)組成模型。說明系統(tǒng)元素間的構(gòu)成關(guān)系,如實(shí)體-關(guān)系圖、類圖。

(5)分類模型。描述系統(tǒng)元素的分類關(guān)系,如對象類/繼承關(guān)系圖說明實(shí)體間怎樣具有共同特性。

(6)激勵-響應(yīng)模型。描述系統(tǒng)對事件的響應(yīng),如狀態(tài)轉(zhuǎn)換圖說明系統(tǒng)對來自內(nèi)部和外部事件的響應(yīng),描述由此而發(fā)生的狀態(tài)變化。3.4.1上下文(Context)模型

系統(tǒng)邊界一旦確定,接下來的分析活動就是定義系統(tǒng)上下文和系統(tǒng)與環(huán)境之間的依賴關(guān)系。圖3.22說明了一個ATM系統(tǒng)的上下文模型,描述了ATM系統(tǒng)和銀行其他系統(tǒng)的邊界關(guān)系。圖3.22ATM系統(tǒng)的上下文從圖3.22可以看出,自動柜員機(jī)與賬戶數(shù)據(jù)庫、支行賬戶系統(tǒng)、信息安全系統(tǒng)、使用數(shù)據(jù)庫和一支行柜臺系統(tǒng)之間存在連接與交互,使用數(shù)據(jù)庫是用以監(jiān)控ATM的使用情況,而柜臺系統(tǒng)則提供備份和打印服務(wù)。所有這些子系統(tǒng)都獨(dú)立于ATM機(jī)系統(tǒng)本身,因此該模型很好地呈現(xiàn)了ATM系統(tǒng)及其上下文環(huán)境。3.4.2體系結(jié)構(gòu)(Architectural)模型

一般地說,體系結(jié)構(gòu)清楚地表達(dá)了系統(tǒng)的構(gòu)成組件以及它們之間的作用關(guān)系和語義。這些組件又可以用來構(gòu)成更大、更復(fù)雜的組件或系統(tǒng)。在理想情況下,體系結(jié)構(gòu)描述的各個組成部分都是獨(dú)立定義的,可以在不同的場合中得到重用。

在UML模型中,體系結(jié)構(gòu)可以用包圖來描述。圖3.23描述了現(xiàn)代編譯器的體系結(jié)構(gòu),包代表了子系統(tǒng)/組件。其中語法分析樹和符號表是整個系統(tǒng)的共享數(shù)據(jù),編譯器的各個部件生成、更新、訪問語法分析樹和符號表、調(diào)試器和編輯器也會訪問符號表。圖3.23編譯器體系結(jié)構(gòu)3.4.3數(shù)據(jù)流模型

數(shù)據(jù)流模型用來描述數(shù)據(jù)是怎樣一步步在處理序列中流動的。數(shù)據(jù)在一個處理階段被轉(zhuǎn)換,然后進(jìn)入下一個階段,當(dāng)數(shù)據(jù)流圖用于軟件設(shè)計時,這種處理或者轉(zhuǎn)換在最終生成的程序中將是一個個程序功能模塊。

在圖3.24使用的符號中,圓邊矩形代表每個處理步驟,箭頭表示數(shù)據(jù)的流動方向,平行線代表數(shù)據(jù)存儲,矩形代表外部交互方。圖3.24倉庫管理的數(shù)據(jù)流圖

數(shù)據(jù)流模型是從功能角度來看待系統(tǒng)而得到的模型表示,對數(shù)據(jù)的每一個變換用一個處理過程來描述。它不僅可以用來描述系統(tǒng)內(nèi)的處理過程,有時還能有效地描述系統(tǒng)的上下文。數(shù)據(jù)流模型可以描述不同系統(tǒng)間以及子系統(tǒng)之間交換信息的過程。這些子系統(tǒng)不一定是一個單一的功能模塊,例如,某一個子系統(tǒng)可能是一個存儲服務(wù)器,并具有相當(dāng)復(fù)雜的存儲管理功能。3.4.4數(shù)據(jù)模型

UML沒有為此模型引進(jìn)專門的描述符號,這是因?yàn)閁ML是面向?qū)ο蟮模_發(fā)過程和模型數(shù)據(jù)用對象和對象間的關(guān)系來表達(dá)。這里將實(shí)體視為一個簡單的沒有操作的對象類,這樣可以用UML類模型以及在類之間建立名字關(guān)聯(lián)的方法表示出數(shù)據(jù)模型。

數(shù)據(jù)模型常常和數(shù)據(jù)流模型一起用來描述系統(tǒng)的信息結(jié)構(gòu),圖3.25示意了某校教學(xué)管理的數(shù)據(jù)模型。圖3.25某校教學(xué)管理的語義數(shù)據(jù)模型簡單地說,數(shù)據(jù)字典就是系統(tǒng)模型中出現(xiàn)的所有名字的列表,除名字以外還包括對有關(guān)命名實(shí)體的描述,以及其他的一些相關(guān)信息,如創(chuàng)建日期、創(chuàng)建者和實(shí)體的表示。如果名字代表一個復(fù)合對象,就會有對其組成的描述。

數(shù)據(jù)字典的實(shí)例如表3.1所示,其中的名字來自于圖3.25中設(shè)計的語義數(shù)據(jù)模型。為簡化表示,刪去了一部分名字,簡化了一些關(guān)聯(lián)的描述。一個較完備的數(shù)據(jù)字典入口應(yīng)當(dāng)含有數(shù)據(jù)源,例如一個類型聲明,也要給出數(shù)據(jù)的使用者。

3.5面向?qū)ο笙到y(tǒng)模型

對象類是對具有相同屬性、操作的一組對象的抽象。對象具有對象類中描述的屬性和服務(wù),是一個可執(zhí)行的實(shí)體。對象是對象類的實(shí)例,一個對象類可以有無數(shù)的實(shí)例。通常系統(tǒng)分析階段只關(guān)注對象類及對象類間的關(guān)系。而在面向?qū)ο笙到y(tǒng)中,一般需要對對象類間的靜態(tài)結(jié)構(gòu)和動態(tài)行為進(jìn)行建模,而類的繼承和聚合模型呈現(xiàn)了類之間的重要結(jié)構(gòu)關(guān)系,順序圖則是類之間交互行為的重要模型。3.5.1對象結(jié)構(gòu)模型

1.類繼承

UML的泛化關(guān)系可以用來對類的繼承關(guān)系建模,一個從子類指向父類的的空心箭頭,意味著父類是子類的泛化。圖3.26是ATM系統(tǒng)模型中類繼承關(guān)系的一個簡單描述,對于銀行賬戶類型進(jìn)行分析,可以將這些賬戶類型建模為一個繼承關(guān)系,其中CurrentAccount和SavingsAccount類從Account類繼承而來。圖3.26繼承

對類層次進(jìn)行分析并非易事,分析人員需要對所要分析的領(lǐng)域有充分的了解。

在圖3.26中,每一個對象都只從一個父類中繼承屬性及操作,但多重繼承的情況也存在。一個對象類可以同時從多個類繼承屬性和操作,這樣它的屬性和操作就是所有父類的屬性和操作的和。

2.對象聚合

對象聚合和組合是除了類繼承關(guān)系外的一種重要的結(jié)構(gòu)關(guān)系,對象聚合是指一個對象類由其他一組對象組合而成。聚合模型用來建模對象類間的這種組合關(guān)系,UML中的聚合關(guān)系符號是尾端為一菱形的線段。圖3.27是一個ATM相關(guān)類的聚合模型,圖中ATM類由卡掃描設(shè)備類CardScanner、現(xiàn)金出口類CashDispenser和顯示屏類DisplayScreen組成。圖3.27聚合

3.類模型

類是面向?qū)ο笙到y(tǒng)的基本構(gòu)成元素,類模型用于建模系統(tǒng)中這些類的構(gòu)造關(guān)系。采用類模型可以描述一個系統(tǒng)或子系統(tǒng)由那些類構(gòu)成,而類之間的繼承、聚合、依賴等關(guān)系如何,類模型展示了系統(tǒng)中類之間的靜態(tài)協(xié)作結(jié)構(gòu)。圖3.28是采用UML類圖來描述的ATM部分類之間的結(jié)構(gòu)關(guān)系。圖3.28ATM系統(tǒng)局類圖3.5.2對象行為模型

順序圖是建模為完成某項(xiàng)行為、對象間按時間展開的交互協(xié)作過程,在面向?qū)ο蟮南嚓P(guān)概念中,被認(rèn)為是對場景的描述,也是對事件流的描述。因此常用于描述一個用例行為的實(shí)現(xiàn),如圖3.29即采用順序圖,完成了一個在線下載行為的實(shí)現(xiàn)。對象間的交互操作由帶標(biāo)簽的箭頭來指示,順序由上至下。首先,圖書館用戶訪問目錄,查看是否有需要的項(xiàng)目,如果有,發(fā)出對該項(xiàng)目的許可證License申請請求,如果獲取到下載許可證,則下載請求將送給提供下載服務(wù)的網(wǎng)絡(luò)服務(wù)器對象,網(wǎng)絡(luò)服務(wù)器壓縮下載內(nèi)容后發(fā)送給該用戶。圖3.29電子科目的發(fā)放

3.6軟件建模工具RationalRose

RationalRose是Rational公司出品的基于UML的功能強(qiáng)大的可視化建模工具,是分析、設(shè)計面向?qū)ο笙到y(tǒng)的工具??梢赃\(yùn)行RationalRose的系統(tǒng)平臺包括了目前大多數(shù)的主流操作系統(tǒng),如Windows9x、Windows2000/XP、Solaris、AIX和HP-UX等。利用Rose可以在不同的開發(fā)階段,從不同的角度為軟件系統(tǒng)的開發(fā)建立模型。

采用Rose模型進(jìn)行系統(tǒng)構(gòu)建的過程如圖3.30所示。圖3.30基于Rose面向?qū)ο笙到y(tǒng)實(shí)現(xiàn)過程

RationalRose可以根據(jù)模型產(chǎn)生框架代碼,它可以與多種開發(fā)環(huán)境無縫集成并支持多種開發(fā)語言,其中包括:VisualBasic、Java、PowerBuilder、C++、ADA、SmallTalk、XMLDTD等,因此,RationalRose是整個項(xiàng)目開發(fā)的有效工具。當(dāng)模型發(fā)生改變時,代碼也會相應(yīng)改變。同時,Rose也具有逆向工程功能,當(dāng)在Rose中修改代碼時,相應(yīng)的對象模型也會發(fā)生改變。

RationalRose不僅擁有強(qiáng)大的功能,而且具有方便友好的用戶界面,如圖3.31。它可以幫助軟件開發(fā)人員高效地進(jìn)行軟件開發(fā)。圖3.31Rose的用戶界面

Rose的用戶界面包括以下幾個部分:

(1)菜單條包含了所有的Rose命令和操作。

(2)標(biāo)準(zhǔn)工具欄用于快速訪問Rose中的常用命令和操作。

(3)瀏覽窗口采用樹狀層次結(jié)構(gòu),用于在Rose模型中進(jìn)行瀏覽。通過瀏覽窗口可以快速地訪問Rose模型中的各個模型元素。

(4)文檔窗口用于為模型元素建立說明文檔。

(5)框圖工具欄用于在模型圖中添加各種模型元素,其內(nèi)容因打開的UML模型圖的類型不同而不同。

(6)框圖窗口用于顯示和編輯Rose模型中的各種UML模型圖。當(dāng)增刪框圖窗口中的模型元素時,Rose會自動更新瀏覽窗口中的內(nèi)容;同樣,當(dāng)修改瀏覽窗口中的模型元素時,相應(yīng)地,修改也會自動反映在框圖窗口中。

Rose模型文件的擴(kuò)展名是?.mdl,要創(chuàng)建模型,可以執(zhí)行下列步驟。

從菜單欄選擇【File】→【New】,或者單擊標(biāo)準(zhǔn)工具欄中的【New】按鈕,彈出新建對話框,選擇要用的模板,單擊【OK】按鈕。如果不使用模板,單擊【Cancel】按鈕。

如果選擇使用模板,Rose會自動裝入此模板的默認(rèn)包、類和組件。模板提供了每個包中的類和接口,并有相應(yīng)的屬性和操作。通過創(chuàng)建模板,可以收集類和組件,便于作為基礎(chǔ)設(shè)計和建立多個系統(tǒng)。如果單擊【Cancel】按鈕,表示創(chuàng)建一個空項(xiàng)目,用戶要

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論