軟件工程-09面向?qū)ο蠓椒▽W(xué)引論課件_第1頁(yè)
軟件工程-09面向?qū)ο蠓椒▽W(xué)引論課件_第2頁(yè)
軟件工程-09面向?qū)ο蠓椒▽W(xué)引論課件_第3頁(yè)
軟件工程-09面向?qū)ο蠓椒▽W(xué)引論課件_第4頁(yè)
軟件工程-09面向?qū)ο蠓椒▽W(xué)引論課件_第5頁(yè)
已閱讀5頁(yè),還剩67頁(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)介

第九章面向?qū)ο蠓椒▽W(xué)引論面向?qū)ο蠓椒▽W(xué)概述面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蠼?duì)象模型動(dòng)態(tài)模型功能模型第九章面向?qū)ο蠓椒▽W(xué)引論面向?qū)ο蠓椒▽W(xué)概述1面向?qū)ο蠓椒▽W(xué)的出發(fā)點(diǎn)和基本原則,是盡可能模擬人類習(xí)慣的思維方式,使開(kāi)發(fā)軟件的方法與過(guò)程盡可能接近人類認(rèn)識(shí)世界解決問(wèn)題的方法與過(guò)程,也就是使描述問(wèn)題的問(wèn)題空間(也稱為問(wèn)題域)與實(shí)現(xiàn)解法的解空間(也稱為求解域)在結(jié)構(gòu)上盡可能一致。面向?qū)ο蠓椒▽W(xué)概述1.面向?qū)ο蠓椒▽W(xué)的要點(diǎn)面向?qū)ο蠓椒▽W(xué)的出發(fā)點(diǎn)和基本原則,是盡可能模擬人類習(xí)慣的思維2面向?qū)ο蠓椒ň哂邢率?個(gè)要點(diǎn):認(rèn)為客觀世界是由各種對(duì)象組成的,任何事物都是對(duì)象,復(fù)雜的對(duì)象可以由比較簡(jiǎn)單的對(duì)象以某種方式組合而成。把所有對(duì)象都劃分成各種對(duì)象類(簡(jiǎn)稱為類,class),每個(gè)對(duì)象類都定義了一組數(shù)據(jù)和一組方法。按照子類(或稱為派生類)與父類(或稱為基類)的關(guān)系,把若干個(gè)對(duì)象類組成一個(gè)層次結(jié)構(gòu)的系統(tǒng)(也稱為類等級(jí))。對(duì)象彼此之間僅能通過(guò)傳遞消息互相聯(lián)系。面向?qū)ο蠓椒ň哂邢率?個(gè)要點(diǎn):3

面向?qū)ο缶褪沁\(yùn)用對(duì)象、類、繼承、封裝、消息、結(jié)構(gòu)與連接等面向?qū)ο蟮母拍顚?duì)問(wèn)題進(jìn)行分析、求解的系統(tǒng)開(kāi)發(fā)技術(shù),或者說(shuō),是以對(duì)象(類)為數(shù)據(jù)中心、對(duì)象之間的動(dòng)態(tài)行為模式為運(yùn)行機(jī)制的一種問(wèn)題求解方法。用公式可表示為:面向?qū)ο?對(duì)象+類+繼承+封裝+消息+結(jié)構(gòu)與連接面向?qū)ο缶褪沁\(yùn)用對(duì)象、類、繼承、封裝、消息、結(jié)4也就是說(shuō),面向?qū)ο缶褪羌仁褂脤?duì)象又使用類和繼承等機(jī)制,而且對(duì)象之間僅能通過(guò)傳遞消息實(shí)現(xiàn)彼此通信。如果僅使用對(duì)象和消息,則這種方法可以稱為基于對(duì)象的(object-based)方法,而不能稱為面向?qū)ο蟮姆椒?;如果進(jìn)一步要求把所有對(duì)象都劃分為類,則這種方法可稱為基于類的(class-based)方法,但仍然不是面向?qū)ο蟮姆椒?。只有同時(shí)使用對(duì)象、類、繼承和消息的方法,才是真正面向?qū)ο蟮姆椒āR簿褪钦f(shuō),面向?qū)ο缶褪羌仁褂脤?duì)象又使用類和繼承等機(jī)51)與人類習(xí)慣的思維方法一致傳統(tǒng)的程序設(shè)計(jì)技術(shù)是面向過(guò)程的設(shè)計(jì)方法,這種方法以算法為核心,把數(shù)據(jù)和過(guò)程作為相互獨(dú)立的部分,數(shù)據(jù)代表問(wèn)題空間中的客體,程序代碼則用于處理這些數(shù)據(jù)。2)穩(wěn)定性好傳統(tǒng)的軟件開(kāi)發(fā)方法以算法為核心,開(kāi)發(fā)過(guò)程基于功能分析和功能分解。用傳統(tǒng)方法所建立起來(lái)的軟件系統(tǒng)的結(jié)構(gòu)緊密依賴于系統(tǒng)所要完成的功能,當(dāng)功能需求發(fā)生變化時(shí)將引起軟件結(jié)構(gòu)的整體修改。事實(shí)上,用戶需求變化大部分是針對(duì)功能的,因此,這樣的軟件系統(tǒng)是不穩(wěn)定的。2.面向?qū)ο蠓椒▽W(xué)的優(yōu)點(diǎn)1)與人類習(xí)慣的思維方法一致2.面向?qū)ο蠓椒▽W(xué)的優(yōu)點(diǎn)63)可重用性好用已有的零部件裝配新的產(chǎn)品,是典型的重用技術(shù),例如,可以用已有的預(yù)制件建筑一幢結(jié)構(gòu)和外形都不同于從前的新大樓。重用是提高生產(chǎn)率的最主要的方法。4)較易開(kāi)發(fā)大型軟件產(chǎn)品在開(kāi)發(fā)大型軟件產(chǎn)品時(shí),組織開(kāi)發(fā)人員的方法不恰當(dāng)往往是出現(xiàn)問(wèn)題的主要原因。用面向?qū)ο蠓椒▽W(xué)開(kāi)發(fā)軟件時(shí),構(gòu)成軟件系統(tǒng)的每個(gè)對(duì)象就像一個(gè)微型程序,有自己的數(shù)據(jù)、操作、功能和用途,因此,可以把一個(gè)大型軟件產(chǎn)品分解成一系列本質(zhì)上相互獨(dú)立的小產(chǎn)品來(lái)處理。3)可重用性好75)可維護(hù)性好用傳統(tǒng)方法和面向過(guò)程語(yǔ)言開(kāi)發(fā)出來(lái)的軟件很難維護(hù),是長(zhǎng)期困擾人們的一個(gè)嚴(yán)重問(wèn)題,是軟件危機(jī)的突出表現(xiàn)。由于下述因素的存在,使得用面向?qū)ο蠓椒ㄋ_(kāi)發(fā)的軟件可維護(hù)性好:(1)面向?qū)ο蟮能浖€(wěn)定性比較好。(2)面向?qū)ο蟮能浖容^容易修改。(3)面向?qū)ο蟮能浖容^容易理解。(4)易于測(cè)試和調(diào)試。5)可維護(hù)性好8迭代是軟件開(kāi)發(fā)過(guò)程中普遍存在的一種內(nèi)在屬性。經(jīng)驗(yàn)表明,軟件過(guò)程各個(gè)階段之間的迭代或一個(gè)階段內(nèi)各個(gè)工作步驟之間的迭代,在面向?qū)ο蠓缎椭斜仍诮Y(jié)構(gòu)化范型中更常見(jiàn)?!皣娙边@個(gè)詞體現(xiàn)了面向?qū)ο筌浖_(kāi)發(fā)過(guò)程迭代和無(wú)縫的特性。噴泉模型迭代是軟件開(kāi)發(fā)過(guò)程中普遍存在的一種內(nèi)在屬性。經(jīng)驗(yàn)表明,軟件過(guò)9由描述該對(duì)象屬性的數(shù)據(jù)以及可以對(duì)這些數(shù)據(jù)施加的所有操作封裝在一起構(gòu)成的統(tǒng)一體。對(duì)象可以作的操作表示它的動(dòng)態(tài)行為,在面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計(jì)中,通常把對(duì)象的操作稱為服務(wù)或方法。面向?qū)ο蟮幕靖拍?、對(duì)象對(duì)象是人們要進(jìn)行研究的任何事物,具體一點(diǎn)講就是研究對(duì)象。它可以是有形實(shí)體,也可以是作用、事件、性能說(shuō)明等,當(dāng)然,如果朋友成為你研究的對(duì)象時(shí),對(duì)象也可以是你的朋友。由描述該對(duì)象屬性的數(shù)據(jù)以及可以對(duì)這些數(shù)據(jù)施加的102)對(duì)象的定義目前,對(duì)對(duì)象所下的定義并不完全統(tǒng)一,人們從不同角度給出對(duì)象的不同定義。這些定義雖然形式不同,但基本含義是相同的。(1)定義1:對(duì)象是具有相同狀態(tài)的一組操作的集合。這個(gè)定義主要是從面向?qū)ο蟪绦蛟O(shè)計(jì)的角度看“對(duì)象”。(2)定義2:對(duì)象是對(duì)問(wèn)題域中某個(gè)東西的抽象,這種抽象反映了系統(tǒng)保存有關(guān)這個(gè)東西的信息或與它交互的能力。也就是說(shuō),對(duì)象是對(duì)屬性值和操作的封裝。這個(gè)定義著重從信息模擬的角度看待“對(duì)象”。2)對(duì)象的定義11(3)定義3:對(duì)象∷=〈ID,MS,DS,MI〉。其中,ID是對(duì)象的標(biāo)識(shí)或名字,MS是對(duì)象中的操作集合,DS是對(duì)象的數(shù)據(jù)結(jié)構(gòu),MI是對(duì)象受理的消息名集合(即對(duì)外接口)。這個(gè)定義是一個(gè)形式化的定義。從動(dòng)態(tài)角度或?qū)ο蟮膶?shí)現(xiàn)機(jī)制來(lái)看,對(duì)象是一臺(tái)自動(dòng)機(jī)。具有內(nèi)部狀態(tài)S,操作fi(i=1,2,…,n),且與操作fi對(duì)應(yīng)的狀態(tài)轉(zhuǎn)換函數(shù)為gi(i=1,2,…,n)的一個(gè)對(duì)象,可以用下圖所示的自動(dòng)機(jī)來(lái)模擬。(3)定義3:對(duì)象∷=〈ID,MS,DS,MI〉。其中,12軟件工程ppt-09面向?qū)ο蠓椒▽W(xué)引論課件133)對(duì)象的特點(diǎn)以數(shù)據(jù)為中心。對(duì)象是主動(dòng)的。實(shí)現(xiàn)了數(shù)據(jù)封裝。本質(zhì)上具有并行性。模塊獨(dú)立性好。3)對(duì)象的特點(diǎn)143)

對(duì)象的狀態(tài)和行為

對(duì)象有自身的狀態(tài),比如你的女朋友有她的姓名(張朋)、年齡(25歲)、工作單位等狀態(tài)。對(duì)象還有操作,用于改變對(duì)象的狀態(tài),對(duì)象及其操作就是對(duì)象的行為,比如“張朋跳槽到某公司”這個(gè)行為將使她的工作單位這個(gè)狀態(tài)發(fā)生變化。3)對(duì)象的狀態(tài)和行為152、其他概念1)類(class)在面向?qū)ο蟮能浖夹g(shù)中,具有相同或相似性質(zhì)的對(duì)象的抽象就是類。如桃樹(shù)、李樹(shù)、樟樹(shù)等是具體的樹(shù),抽象之后得到“樹(shù)”這個(gè)類。類具有屬性,屬性是狀態(tài)的抽象,如一棵李樹(shù)的高度是3米,樟樹(shù)是10米,樹(shù)則抽象出一個(gè)屬性“高度”。類具有操作,它是對(duì)象行為的抽象。2、其他概念1)類(class)16類的結(jié)構(gòu)

類的結(jié)構(gòu)有兩種,一種是“一般-具體”結(jié)構(gòu),如植物、樹(shù)都是類,它們之間是抽象到具體的關(guān)系,即樹(shù)是一種(isa)植物。還有一種就是“整體-部分”結(jié)構(gòu),如計(jì)算機(jī)是類、CPU也是類,則計(jì)算機(jī)與CPU之間就是整體與部分的關(guān)系,即計(jì)算機(jī)有一個(gè)(hasa)CPU。類的結(jié)構(gòu)17實(shí)例(instance)實(shí)例就是由某個(gè)特定的類所描述的一個(gè)具體的對(duì)象。類是對(duì)具有相同屬性和行為的一組相似的對(duì)象的抽象,類在現(xiàn)實(shí)世界中并不能真正存在。當(dāng)使用“對(duì)象”這個(gè)術(shù)語(yǔ)時(shí),既可以指一個(gè)具體的對(duì)象,也可以泛指一般的對(duì)象,但是,當(dāng)使用“實(shí)例”這個(gè)術(shù)語(yǔ)時(shí),必然是指一個(gè)具體的對(duì)象。實(shí)例(instance)183)消息(message)消息就是要求某個(gè)對(duì)象執(zhí)行在定義它的那個(gè)類中所定義的某個(gè)操作的規(guī)格說(shuō)明。即對(duì)象之間進(jìn)行通信的構(gòu)造。比如張朋是一個(gè)對(duì)象,上司發(fā)出一個(gè)出差通知消息:張朋出差到深圳。這樣,相應(yīng)的對(duì)象接收到這個(gè)消息就會(huì)給予響應(yīng)。通常,一個(gè)消息由下述3部分組成:接收消息的對(duì)象;張朋消息選擇符(也稱為消息名);出差通知零個(gè)或多個(gè)變?cè)?。張朋出差到深?)消息(message)194)方法(method)方法就是對(duì)象所能執(zhí)行的操作,也就是類中所定義的服務(wù)。方法描述了對(duì)象執(zhí)行操作的算法,響應(yīng)消息的方法。在C++語(yǔ)言中把方法稱為成員函數(shù)。

比如張朋是一個(gè)對(duì)象,上司發(fā)出一個(gè)消息:張朋出差到深圳。這樣,相應(yīng)的對(duì)象接收到這個(gè)消息就會(huì)給予響應(yīng),在這個(gè)消息中,張朋是對(duì)象名,出差到就是方法名,深圳就是參數(shù)。在類中操作的實(shí)現(xiàn)過(guò)程叫做方法。上面的出差到(某地)這個(gè)方法如何實(shí)現(xiàn)呢,就是買車票,乘車到某地。這個(gè)過(guò)程就是方法。4)方法(method)205)屬性(attribute)屬性就是類中所定義的數(shù)據(jù),它是對(duì)客觀世界實(shí)體所具有的性質(zhì)的抽象。類的每個(gè)實(shí)例都有自己特有的屬性值。在C++語(yǔ)言中把屬性稱為數(shù)據(jù)成員6)封裝(encapsulation)在面向?qū)ο蟮某绦蛑校褦?shù)據(jù)和實(shí)現(xiàn)操作的代碼集中起來(lái)放在對(duì)象內(nèi)部。一個(gè)對(duì)象好像是一個(gè)不透明的黑盒子,表示對(duì)象狀態(tài)的數(shù)據(jù)和實(shí)現(xiàn)操作的代碼與局部數(shù)據(jù),都被封裝在黑盒子里面,從外面是看不見(jiàn)的,更不能從外面直接訪問(wèn)或修改這些數(shù)據(jù)和代碼。5)屬性(attribute)21對(duì)象具有封裝性的條件如下:(1)有一個(gè)清晰的邊界。所有私有數(shù)據(jù)和實(shí)現(xiàn)操作的代碼都被封裝在這個(gè)邊界內(nèi),從外面看不見(jiàn)更不能直接訪問(wèn)。(2)有確定的接口(即協(xié)議)。這些接口就是對(duì)象可以接受的消息,只能通過(guò)向?qū)ο蟀l(fā)送消息來(lái)使用它。(3)受保護(hù)的內(nèi)部實(shí)現(xiàn)。實(shí)現(xiàn)對(duì)象功能的細(xì)節(jié)(私有數(shù)據(jù)和代碼)不能在定義該對(duì)象的類的范圍外訪問(wèn)。對(duì)象具有封裝性的條件如下:227)繼承(inheritance)廣義地說(shuō),繼承是指能夠直接獲得已有的性質(zhì)和特征,而不必重復(fù)定義它們。在面向?qū)ο蟮能浖夹g(shù)中,繼承是子類自動(dòng)地共享基類中定義的數(shù)據(jù)和方法的機(jī)制。下圖描繪了實(shí)現(xiàn)繼承機(jī)制的原理:7)繼承(inheritance)238)多態(tài)性(polymorphism)多態(tài)性是指子類對(duì)象可以像父類對(duì)象那樣使用,同樣的消息既可以發(fā)送給父類對(duì)象也可以發(fā)送給子類對(duì)象。在C++語(yǔ)言中,多態(tài)性是通過(guò)虛函數(shù)來(lái)實(shí)現(xiàn)的。在類等級(jí)不同層次中可以說(shuō)明名字、參數(shù)特征和返回值類型都相同的虛擬成員函數(shù),而不同層次的類中的虛函數(shù)實(shí)現(xiàn)算法各不相同。虛函數(shù)機(jī)制使得程序員能在一個(gè)類等級(jí)中使用相同函數(shù)的多個(gè)不同版本,在運(yùn)行時(shí)刻才根據(jù)接收消息的對(duì)象所屬于的類,決定到底執(zhí)行哪個(gè)特定的版本,這稱為動(dòng)態(tài)聯(lián)編,也叫滯后聯(lián)編。8)多態(tài)性(polymorphism)249)重載(overloading)有兩種重載:函數(shù)重載是指在同一作用域內(nèi)的若干個(gè)參數(shù)特征不同的函數(shù)可以使用相同的函數(shù)名字;運(yùn)算符重載是指同一個(gè)運(yùn)算符可以施加于不同類型的操作數(shù)上面。當(dāng)然,當(dāng)參數(shù)特征不同或被操作數(shù)的類型不同時(shí),實(shí)現(xiàn)函數(shù)的算法或運(yùn)算符的語(yǔ)義是不相同的。在C++語(yǔ)言中函數(shù)重載是通過(guò)靜態(tài)聯(lián)編(也叫先前聯(lián)編)實(shí)現(xiàn)的。9)重載(overloading)25所謂模型,就是為了理解事物而對(duì)事物作出的一種抽象,是對(duì)事物的一種無(wú)歧義的書(shū)面描述。通常,模型由一組圖示符號(hào)和組織這些符號(hào)的規(guī)則組成,利用它們來(lái)定義和描述問(wèn)題域中的術(shù)語(yǔ)和概念。為了開(kāi)發(fā)復(fù)雜的軟件系統(tǒng),系統(tǒng)分析員應(yīng)該從不同角度抽象出目標(biāo)系統(tǒng)的特性,使用精確的表示方法構(gòu)造系統(tǒng)的模型,驗(yàn)證模型是否滿足用戶對(duì)目標(biāo)系統(tǒng)的需求,并在設(shè)計(jì)過(guò)程中逐漸把和實(shí)現(xiàn)有關(guān)的細(xì)節(jié)加進(jìn)模型中,直至最終用程序?qū)崿F(xiàn)模型。面向?qū)ο蠼K^模型,就是為了理解事物而對(duì)事物作出的一種抽象,26

面向?qū)ο蟮慕7治鰪母拍钌戏譃槎€(gè)層次。 ①

問(wèn)題分析:主要任務(wù)是收集并確認(rèn)用戶的需求信息,對(duì)實(shí)際問(wèn)題進(jìn)行功能分析和過(guò)程分析。 ②

應(yīng)用分析:主要任務(wù)是動(dòng)態(tài)描述系統(tǒng)中對(duì)象的合法狀態(tài)序列。

面向?qū)ο蟮慕7治鰪母拍钌戏譃槎€(gè)層次。27在對(duì)目標(biāo)系統(tǒng)進(jìn)行分析的初始階段,面對(duì)大量模糊的、涉及眾多專業(yè)領(lǐng)域的、錯(cuò)綜復(fù)雜的信息,系統(tǒng)分析員往往感到無(wú)從下手。模型提供了組織大量信息的一種有效機(jī)制。通常,用戶和領(lǐng)域?qū)<铱梢酝ㄟ^(guò)快速建立的原型親身體驗(yàn),從而對(duì)系統(tǒng)模型進(jìn)行更有效的審查。在對(duì)目標(biāo)系統(tǒng)進(jìn)行分析的初始階段,面對(duì)大量模糊的、281.面向?qū)ο蟮哪P?/p>

面向?qū)ο蟮哪P桶ㄈ齻€(gè),它們分別是: ①

描述系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的對(duì)象模型。 ②

描述系統(tǒng)控制結(jié)構(gòu)的動(dòng)態(tài)模型。 ③

描述系統(tǒng)功能的功能模型。1.面向?qū)ο蟮哪P?9對(duì)象模型表示靜態(tài)的、結(jié)構(gòu)化的系統(tǒng)的“數(shù)據(jù)”性質(zhì)。它是對(duì)模擬客觀世界實(shí)體的對(duì)象以及對(duì)象彼此間的關(guān)系的映射,描述了系統(tǒng)的靜態(tài)結(jié)構(gòu)。它從客觀世界實(shí)體對(duì)象的關(guān)系角度來(lái)描述,表現(xiàn)了對(duì)象的相互關(guān)系。事實(shí)上,這個(gè)模型可以當(dāng)作擴(kuò)充的實(shí)體——關(guān)系模型(E-R)。面向?qū)ο蠓椒◤?qiáng)調(diào)圍繞對(duì)象而不是圍繞功能來(lái)構(gòu)造系統(tǒng)。對(duì)象模型為建立動(dòng)態(tài)模型和功能模型,提供了實(shí)質(zhì)性的框架。對(duì)象模型對(duì)象模型表示靜態(tài)的、結(jié)構(gòu)化的系統(tǒng)的“數(shù)據(jù)”性質(zhì)。它是301.類圖的基本符號(hào)類圖描述類及類與類之間的靜態(tài)關(guān)系。類圖是一種靜態(tài)模型,它是創(chuàng)建其他UML圖的基礎(chǔ)。一個(gè)系統(tǒng)可以由多張類圖來(lái)描述,一個(gè)類也可以出現(xiàn)在幾張類圖中。1.類圖的基本符號(hào)類圖描述類及類與類之間的靜態(tài)關(guān)系。311)定義類UML中類的圖形符號(hào)為長(zhǎng)方形,用兩條橫線把長(zhǎng)方形分成上、中、下3個(gè)區(qū)域(下面兩個(gè)區(qū)域可省略),3個(gè)區(qū)域分別放類的名字、屬性和服務(wù)。表示類的圖1)定義類表示類的圖32類名是一類對(duì)象的名字。命名是否恰當(dāng)對(duì)系統(tǒng)的可理解性影響相當(dāng)大,因此,為類命名時(shí)應(yīng)該遵守以下幾條準(zhǔn)則:(1)使用標(biāo)準(zhǔn)術(shù)語(yǔ)。例如,“交通信號(hào)燈”比“信號(hào)單元”這個(gè)名字好,“傳送帶”比“零件傳送設(shè)備”好。(2)使用具有確切含義的名詞。例如,“庫(kù)房”比“房屋”或“存物場(chǎng)所”更確切。(3)必要時(shí)用名詞短語(yǔ)作名字。例如,“最小的領(lǐng)土單元”、“儲(chǔ)藏室”、“公司員工”等都是比較恰當(dāng)?shù)拿帧n惷且活悓?duì)象的名字。命名是否恰當(dāng)對(duì)系統(tǒng)的可理解性影響332)定義屬性UML描述屬性的語(yǔ)法格式如下:可見(jiàn)性屬性名:類型名=初值{性質(zhì)串}屬性的可見(jiàn)性(即可訪問(wèn)性)通常有下述3種:公有的(public)、私有的(private)和保護(hù)的(protected),分別用加號(hào)(+)、減號(hào)(-)和井號(hào)(#)表示。如果未聲明可見(jiàn)性,則表示該屬性的可見(jiàn)性尚未定義。注意,沒(méi)有默認(rèn)的可見(jiàn)性。屬性名和類型名之間用冒號(hào)(:)分隔。類型名表示該屬性的數(shù)據(jù)類型,它可以是基本數(shù)據(jù)類型,也可以是用戶自定義的類型。2)定義屬性34在創(chuàng)建類的實(shí)例時(shí)應(yīng)給其屬性賦值,如果給某個(gè)屬性定義了初值,則該初值可作為創(chuàng)建實(shí)例時(shí)這個(gè)屬性的默認(rèn)值。類型名和初值之間用等號(hào)(=)隔開(kāi)。用花括號(hào)括起來(lái)的性質(zhì)串明確地列出該屬性所有可能的取值。枚舉類型的屬性往往用性質(zhì)串列出可以選用的枚舉值,不同枚舉值之間用逗號(hào)分隔。也可以用性質(zhì)串說(shuō)明屬性的其他性質(zhì),例如,約束說(shuō)明{只讀}表明該屬性是只讀屬性。在創(chuàng)建類的實(shí)例時(shí)應(yīng)給其屬性賦值,如果給某個(gè)屬性定35例如,“發(fā)貨單”類的屬性“管理員”,在UML類圖中像下面那樣描述:-管理員:String=“未定”類的屬性中還可以有一種能被該類所有對(duì)象共享的屬性,稱為類的作用域?qū)傩?,也稱為類變量。C++語(yǔ)言中的靜態(tài)數(shù)據(jù)成員就是這樣的屬性。類變量在類圖中表示為帶下劃線的屬性,例如,發(fā)貨單類的類變量“貨單數(shù)”,用來(lái)統(tǒng)計(jì)發(fā)貨單的總數(shù),在該類所有對(duì)象中這個(gè)屬性的值都是一樣的,下面是對(duì)這個(gè)屬性的描述:-貨單數(shù):Integer例如,“發(fā)貨單”類的屬性“管理員”,在UML類圖中像下面那樣363)定義服務(wù)服務(wù)也就是操作,UML描述操作的語(yǔ)法格式如下:可見(jiàn)性操作名(參數(shù)表):返回值類型{性質(zhì)串}操作可見(jiàn)性的定義方法與屬性相同。參數(shù)表是用逗號(hào)分隔的形式參數(shù)的序列。描述一個(gè)參數(shù)的語(yǔ)法如下:參數(shù)名:類型名=默認(rèn)值3)定義服務(wù)37類圖由類及類與類之間的關(guān)系組成。定義了類之后就可以定義類與類之間的各種關(guān)系了。類與類之間通常有關(guān)聯(lián)、泛化(繼承)、依賴和細(xì)化等4種關(guān)系。1)關(guān)聯(lián)關(guān)聯(lián)表示兩個(gè)類的對(duì)象之間存在某種語(yǔ)義上的聯(lián)系。例如,作家使用計(jì)算機(jī),我們就認(rèn)為在作家和計(jì)算機(jī)之間存在某種語(yǔ)義連接,因此,在類圖中應(yīng)該在作家類和計(jì)算機(jī)類之間建立關(guān)聯(lián)關(guān)系。2.表示關(guān)系的符號(hào)類圖由類及類與類之間的關(guān)系組成。定義了類之后就可以定38(1)普通關(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è)類之間的直線。通常,關(guān)聯(lián)是雙向的,可在一個(gè)方向上為關(guān)聯(lián)起一個(gè)名字,在另一個(gè)方向上起另一個(gè)名字(也可不起名字)。為避免混淆,在名字前面(或后面)加一個(gè)表示關(guān)聯(lián)方向的黑三角。(1)普通關(guān)聯(lián)39在表示關(guān)聯(lián)的直線兩端可以寫(xiě)上重?cái)?shù)(multiplicity),它表示該類有多少個(gè)對(duì)象與對(duì)方的一個(gè)對(duì)象連接。重?cái)?shù)的表示方法通常有:0…1 表示0到1個(gè)對(duì)象0…*或* 表示0到多個(gè)對(duì)象1+或1…* 表示1到多個(gè)對(duì)象1…15 表示1到15個(gè)對(duì)象3 表示3個(gè)對(duì)象如果圖中未明確標(biāo)出關(guān)聯(lián)的重?cái)?shù),則默認(rèn)重?cái)?shù)是1。在表示關(guān)聯(lián)的直線兩端可以寫(xiě)上重?cái)?shù)(multiplicity)40(2)關(guān)聯(lián)的角色在任何關(guān)聯(lián)中都會(huì)涉及到參與此關(guān)聯(lián)的對(duì)象所扮演的角色(即起的作用),在某些情況下顯式標(biāo)明角色名有助于別人理解類圖。例如,下圖是一個(gè)遞歸關(guān)聯(lián)(即一個(gè)類與它本身有關(guān)聯(lián)關(guān)系)的例子。一個(gè)人與另一個(gè)人結(jié)婚,必然一個(gè)人扮演丈夫的角色,另一個(gè)人扮演妻子的角色。如果沒(méi)有顯式標(biāo)出角色名,則意味著用類名作為角色名。(2)關(guān)聯(lián)的角色41(3)限定關(guān)聯(lián)限定關(guān)聯(lián)通常用在一對(duì)多或多對(duì)多的關(guān)聯(lián)關(guān)系中,可以把模型中的重?cái)?shù)從一對(duì)多變成一對(duì)一,或從多對(duì)多簡(jiǎn)化成多對(duì)一。在類圖中把限定詞放在關(guān)聯(lián)關(guān)系末端的一個(gè)小方框內(nèi)。例如,某操作系統(tǒng)中一個(gè)目錄下有許多文件,一個(gè)文件僅屬于一個(gè)目錄,在一個(gè)目錄內(nèi)文件名確定了惟一一個(gè)文件。(3)限定關(guān)聯(lián)42(4)關(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)連接。例如,下圖是一個(gè)電梯系統(tǒng)的類模型,隊(duì)列就是電梯控制器類與電梯類的關(guān)聯(lián)關(guān)系上的關(guān)聯(lián)類。(4)關(guān)聯(lián)類43(1)共享聚集如果在聚集關(guān)系中處于部分方的對(duì)象可同時(shí)參與多個(gè)處于整體方對(duì)象的構(gòu)成,則該聚集稱為共享聚集。例如,一個(gè)課題組包含許多成員,每個(gè)成員又可以是另一個(gè)課題組的成員,則課題組和成員之間是共享聚集關(guān)系,如下圖所示。2)聚集聚集也稱為聚合,是關(guān)聯(lián)的特例。聚集表示類與類之間的關(guān)系是整體與部分的關(guān)系。兩種特殊的聚集關(guān)系分別是共享聚集和組合聚集。(1)共享聚集2)聚集44(2)組合聚集如果部分類完全隸屬于整體類,部分與整體共存,整體不存在了部分也會(huì)隨之消失(或失去存在價(jià)值了),則該聚集稱為組合聚集(簡(jiǎn)稱為組成)。例如,在屏幕上打開(kāi)一個(gè)窗口,它就由文本框、列表框、按鈕和菜單組成,一旦關(guān)閉了窗口,各個(gè)組成部分也同時(shí)消失,窗口和它的組成部分之間存在著組合聚集關(guān)系。(2)組合聚集453)泛化UML中的泛化關(guān)系就是通常所說(shuō)的繼承關(guān)系,它是通用元素和具體元素之間的一種分類關(guān)系。具體元素完全擁有通用元素的信息,并且還可以附加一些其他信息。在UML中,用一端為空心三角形的連線表示泛化關(guān)系,三角形的頂角緊挨著通用元素。注意:泛化針對(duì)類型而不針對(duì)實(shí)例,一個(gè)類可以繼承另一個(gè)類,但一個(gè)對(duì)象不能繼承另一個(gè)對(duì)象。泛化可進(jìn)一步劃分成普通泛化和受限泛化。3)泛化46(1)普通泛化普通泛化與繼承基本相同。沒(méi)有具體對(duì)象的類稱為抽象類。抽象類通常作為父類,用于描述其他類(子類)的公共屬性和行為。(1)普通泛化47與抽象類相反的類是具體類,具體類有自己的對(duì)象,并且該類的操作都有具體的實(shí)現(xiàn)方法。與抽象類相反的類是具體類,具體類有自己的對(duì)象,并且該類的操作48(2)受限泛化可以給泛化關(guān)系附加約束條件,以進(jìn)一步說(shuō)明該泛化關(guān)系的使用方法或擴(kuò)充方法,這樣的泛化關(guān)系稱為受限泛化。預(yù)定義的約束有4種:多重、不相交、完全和不完全。這些約束都是語(yǔ)義約束。多重繼承指的是,一個(gè)子類可以同時(shí)多次繼承同一個(gè)上層基類,例如下圖中的水陸兩用類繼承了兩次交通工具類。(2)受限泛化49與多重繼承相反的是不相交繼承,即一個(gè)子類不能多次繼承同一個(gè)基類(這樣的基類相當(dāng)于C++語(yǔ)言中的虛基類)。如果圖中沒(méi)有指定{多重}約束,則是不相交繼承,一般的繼承都是不相交繼承。完全繼承指的是父類的所有子類都已在類圖中窮舉出來(lái)了,圖示符號(hào)是指定{完全}約束。不完全繼承與完全繼承恰好相反,父類的子類并沒(méi)有都窮舉出來(lái),隨著對(duì)問(wèn)題理解的深入,可不斷補(bǔ)充和維護(hù),這為日后系統(tǒng)的擴(kuò)充和維護(hù)帶來(lái)很大方便。不完全繼承是一般情況下默認(rèn)的繼承關(guān)系。與多重繼承相反的是不相交繼承,即一個(gè)子類不能多次繼504)依賴和細(xì)化(1)依賴關(guān)系依賴關(guān)系描述兩個(gè)模型元素(類、用例等)之間的語(yǔ)義連接關(guān)系:其中一個(gè)模型元素是獨(dú)立的,另一個(gè)模型元素不是獨(dú)立的,它依賴于獨(dú)立的模型元素,如果獨(dú)立的模型元素改變了,將影響依賴于它的模型元素。在UML的類圖中,用帶箭頭的虛線連接有依賴關(guān)系的兩個(gè)類,箭頭指向獨(dú)立的類。在虛線上可以帶一個(gè)版類標(biāo)簽,具體說(shuō)明依賴的種類,例如,下圖表示一個(gè)友元依賴關(guān)系,該關(guān)系使得B類的操作可以使用A類中私有的或保護(hù)的成員。4)依賴和細(xì)化51(2)細(xì)化關(guān)系當(dāng)對(duì)同一個(gè)事物在不同抽象層次上描述時(shí),這些描述之間具有細(xì)化關(guān)系。假設(shè)兩個(gè)模型元素A和B描述同一個(gè)事物,它們的區(qū)別是抽象層次不同,如果B是在A的基礎(chǔ)上的更詳細(xì)的描述,則稱B細(xì)化了A,或稱A細(xì)化成了B。細(xì)化的圖示符號(hào)為由元素B指向元素A的、一端為空心三角形的虛線,如圖所示。(2)細(xì)化關(guān)系52動(dòng)態(tài)模型表示瞬時(shí)的、行為化的系統(tǒng)的“控制”性質(zhì),它規(guī)定了對(duì)象模型中的對(duì)象的合法變化序列。描述了系統(tǒng)的涉及時(shí)序和改變的狀態(tài)一旦建立起對(duì)象模型之后,就需要考察對(duì)象的動(dòng)態(tài)行為。所有對(duì)象都具有自己的生命周期(或稱為運(yùn)行周期)。對(duì)一個(gè)對(duì)象來(lái)說(shuō),生命周期由許多階段組成,在每個(gè)特定階段中,都有適合該對(duì)象的一組運(yùn)行規(guī)律和行為規(guī)則,用以規(guī)范該對(duì)象的行為。生命周期中的階段也就是對(duì)象的狀態(tài)。動(dòng)態(tài)模型動(dòng)態(tài)模型表示瞬時(shí)的、行為化的系統(tǒng)的“控制”性質(zhì),它規(guī)53狀態(tài)是對(duì)對(duì)象屬性值的一種抽象。各對(duì)象之間相互觸發(fā)(即作用)就形成了一系列的狀態(tài)變化。一個(gè)觸發(fā)行為稱作一個(gè)事件。對(duì)象對(duì)事件的響應(yīng),取決于接受該觸發(fā)的對(duì)象當(dāng)時(shí)所處的狀態(tài),響應(yīng)包括改變自己的狀態(tài)或者又形成一個(gè)新的觸發(fā)行為。狀態(tài)有持續(xù)性,它占用一段時(shí)間間隔。狀態(tài)與事件密不可分,一個(gè)事件分開(kāi)兩個(gè)狀態(tài),一個(gè)狀態(tài)隔開(kāi)兩個(gè)事件。事件表示時(shí)刻,狀態(tài)代表時(shí)間間隔。通常,用UML提供的狀態(tài)圖來(lái)描繪對(duì)象的狀態(tài)、觸發(fā)狀態(tài)轉(zhuǎn)換的事件以及對(duì)象的行為。每個(gè)類的動(dòng)態(tài)行為用一張狀態(tài)圖來(lái)描繪,各個(gè)類的狀態(tài)圖通過(guò)共享事件合并起來(lái),從而構(gòu)成系統(tǒng)的動(dòng)態(tài)模型。也就是說(shuō),動(dòng)態(tài)模型是基于事件共享而互相關(guān)聯(lián)的一組狀態(tài)圖的集合。狀態(tài)是對(duì)對(duì)象屬性值的一種抽象。各對(duì)象之間相互觸發(fā)(即作用)就54狀態(tài)圖的表示方法狀態(tài)圖的表示方法55功能模型表示變化的系統(tǒng)的“功能”性質(zhì),它指明了系統(tǒng)應(yīng)該“做什么”,因此更直接地反映了用戶對(duì)目標(biāo)系統(tǒng)的需求。通常,功能模型由一組數(shù)據(jù)流圖組成。在面向?qū)ο蠓椒▽W(xué)中,數(shù)據(jù)流圖遠(yuǎn)不如在結(jié)構(gòu)分析、設(shè)計(jì)方法中那樣重要。一般說(shuō)來(lái),與對(duì)象模型和動(dòng)態(tài)模型比較起來(lái),數(shù)據(jù)流圖并沒(méi)有增加新的信息,但是,建立功能模型有助于軟件開(kāi)發(fā)人員更深入地理解問(wèn)題域,改進(jìn)和完善自己的設(shè)計(jì)。因此,不能完全忽視功能模型的作用。功能模型功能模型表示變化的系統(tǒng)的“功能”性質(zhì),它指明了系56數(shù)據(jù)流圖說(shuō)明數(shù)據(jù)流是如何從外部輸入、經(jīng)過(guò)操作和內(nèi)部存儲(chǔ)輸出到外部的。功能模型也包括對(duì)象模型中值的約束條件。功能模型說(shuō)明對(duì)象模型中操作的含義、動(dòng)態(tài)模型中動(dòng)作的意義以及對(duì)象模型中約束的意義。相關(guān)的概念有數(shù)據(jù)流圖中的處理、數(shù)據(jù)流、動(dòng)作對(duì)象、數(shù)據(jù)存儲(chǔ)對(duì)象等。數(shù)據(jù)流圖的表示方法如下圖所示。數(shù)據(jù)流圖說(shuō)明數(shù)據(jù)流是如何從外部輸入、經(jīng)過(guò)操作和內(nèi)部存57數(shù)據(jù)流圖的表示方法綜上所述,功能模型定義“做什么”,動(dòng)態(tài)模型定義“何時(shí)做”,而對(duì)象模型定義“對(duì)誰(shuí)做”。

軟件工程ppt-09面向?qū)ο蠓椒▽W(xué)引論課件58UML提供的用例圖也是進(jìn)行需求分析和建立功能模型的強(qiáng)有力工具。在UML中把用用例圖建立起來(lái)的系統(tǒng)模型稱為用例模型。用例模型描述的是外部行為者(actor)所理解的系統(tǒng)功能。用例模型的建立是系統(tǒng)開(kāi)發(fā)者和用戶反復(fù)討論的結(jié)果,它描述了開(kāi)發(fā)者和用戶對(duì)需求規(guī)格所達(dá)成的共識(shí)。1.用例圖一幅用例圖包含的模型元素有系統(tǒng)、行為者、用例及用例之間的關(guān)系。下圖是自動(dòng)售貨機(jī)系統(tǒng)的用例圖。UML提供的用例圖也是進(jìn)行需求分析和建立功能模型的強(qiáng)有力工具59軟件工程ppt-09面向?qū)ο蠓椒▽W(xué)引論課件601)系統(tǒng)系統(tǒng)被看作是一個(gè)提供用例的黑盒子,內(nèi)部如何工作、用例如何實(shí)現(xiàn),這些對(duì)于建立用例模型來(lái)說(shuō)都是不重要的。代表系統(tǒng)的方框的邊線表示系統(tǒng)的邊界,用于劃定系統(tǒng)的功能范圍,定義了系統(tǒng)所具有的功能。描述該系統(tǒng)功能的用例置于方框內(nèi),代表外部實(shí)體的行為者置于方框外。2)用例一個(gè)用例是可以被行為者感受到的、系統(tǒng)的一個(gè)完整的功能。在UML中把用例定義成系統(tǒng)完成的一系列動(dòng)作,動(dòng)作的結(jié)果能被特定的行為者察覺(jué)到。這些動(dòng)作除了完成系統(tǒng)內(nèi)部的計(jì)算與工作外,還包括與一些行為者的通信。用例通過(guò)關(guān)聯(lián)與行為者連接,關(guān)聯(lián)指出一個(gè)用例與哪些行為者交互,這種交互是雙向的。1)系統(tǒng)61用例具有下述特征:(1)用例代表某些用戶可見(jiàn)的功能,實(shí)現(xiàn)一個(gè)具體的用戶目標(biāo);(2)用例總是被行為者啟動(dòng)的,并向行為者提供可識(shí)別的值;(3)用例必須是完整的。用例的實(shí)例是系統(tǒng)的一種實(shí)際使用方法,通常把用例的實(shí)例稱為腳本。腳本是系統(tǒng)的一次具體執(zhí)行過(guò)程,例如,在自動(dòng)售貨機(jī)系統(tǒng)中,張三投入硬幣購(gòu)買礦泉水,系統(tǒng)收到錢后把礦泉水送出來(lái),上述過(guò)程就是一個(gè)腳本;李四投幣買可樂(lè),但是可樂(lè)已賣完了,于是系統(tǒng)給出提示信息并把錢退還給李四,這個(gè)過(guò)程是另一個(gè)腳本。用例具有下述特征:623)行為者行為者是指與系統(tǒng)交互的人或其他系統(tǒng),它代表外部實(shí)體。使用用例并且與系統(tǒng)交互的任何人或物都是行為者。行為者代表一種角色,而不是某個(gè)具體的人或物。事實(shí)上,一個(gè)具體的人可以充當(dāng)多種不同角色。在用例圖中用直線連接行為者和用例,表示兩者之間交換信息,稱為通信聯(lián)系。行為者觸發(fā)(激活)用例,并與用例交換信息。實(shí)踐表明,行為者對(duì)確定用例是非常有用的。面對(duì)一個(gè)大型、復(fù)雜的系統(tǒng),要列出用例清單往往很困難,可以先列出行為者清單,再針對(duì)每個(gè)行為者列出它的用例。這樣做可以比較容易地建立起用例模型。3)行為者634)用例之間的關(guān)系UML用例之間主要有擴(kuò)展和使用兩種關(guān)系,它們是泛化關(guān)系的兩種不同形式。(1)擴(kuò)展關(guān)系向一個(gè)用例中添加一些動(dòng)作后構(gòu)成了另一個(gè)用例,這兩個(gè)用例之間的關(guān)系就是擴(kuò)展關(guān)系,后者繼承前者的一些行為,通常把后者稱為擴(kuò)展用例。例如,在自動(dòng)售貨機(jī)系統(tǒng)中,“售貨”是一個(gè)基本的用例,如果顧客購(gòu)買罐裝飲料,售貨功能完成得很順利,但是,如果顧客要購(gòu)買用紙杯裝的散裝飲料,則不能執(zhí)行該用例提供的常規(guī)動(dòng)作,而要做些改動(dòng)。4)用例之間的關(guān)系64(2)使用關(guān)系當(dāng)一個(gè)用例使用另一個(gè)用例時(shí),這兩個(gè)用例之間就構(gòu)成了使用關(guān)系。一般說(shuō)來(lái),如果在若干個(gè)用例中有某些相同的動(dòng)作,則可以把這些相同的動(dòng)作提取出來(lái)單獨(dú)構(gòu)成一個(gè)用例(稱為抽象用例)。這樣,當(dāng)某個(gè)用例使用該抽象用例時(shí),就好像這個(gè)用例包含了抽象用例中的所有動(dòng)作。在用例圖中,用例之間的使用關(guān)系用帶版類《使用》的泛化關(guān)系表示。(2)使用關(guān)系65含擴(kuò)展和使用關(guān)系的用例圖含擴(kuò)展和使用關(guān)系的用例圖66幾乎在任何情況下都需要使用用例,通過(guò)用例可以獲取用戶需求,規(guī)劃和控制項(xiàng)目。獲取用例是需求分析階段的主要工作之一,而且是首先要做的工作。大部分用例將在項(xiàng)

溫馨提示

  • 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)論