




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第10章 面向?qū)ο笤O(shè)計(jì) 面向?qū)ο笤O(shè)計(jì)過程與準(zhǔn)則面向?qū)ο笤O(shè)計(jì)過程與準(zhǔn)則 體系結(jié)構(gòu)模塊及依賴性體系結(jié)構(gòu)模塊及依賴性 系統(tǒng)分解系統(tǒng)分解 問題域部分的設(shè)計(jì)問題域部分的設(shè)計(jì) 人機(jī)交互部分的設(shè)計(jì)人機(jī)交互部分的設(shè)計(jì) 任務(wù)管理部分的設(shè)計(jì)任務(wù)管理部分的設(shè)計(jì) 數(shù)據(jù)管理部分的設(shè)計(jì)數(shù)據(jù)管理部分的設(shè)計(jì) 對(duì)象設(shè)計(jì)對(duì)象設(shè)計(jì)10.1 面向?qū)ο笤O(shè)計(jì)過程與準(zhǔn)則 面向?qū)ο笤O(shè)計(jì)過程面向?qū)ο笤O(shè)計(jì)過程(1) 建立系統(tǒng)環(huán)境模型。建立系統(tǒng)環(huán)境模型。在設(shè)計(jì)的初始階段,系統(tǒng)設(shè)計(jì)師用在設(shè)計(jì)的初始階段,系統(tǒng)設(shè)計(jì)師用系統(tǒng)環(huán)境圖對(duì)軟件與外部實(shí)體交互的方式進(jìn)行建模。下圖系統(tǒng)環(huán)境圖對(duì)軟件與外部實(shí)體交互的方式進(jìn)行建模。下圖給出了系統(tǒng)環(huán)境圖的一般的結(jié)構(gòu)。給出了
2、系統(tǒng)環(huán)境圖的一般的結(jié)構(gòu)。10.1 面向?qū)ο笤O(shè)計(jì)過程與準(zhǔn)則(2) 設(shè)計(jì)系統(tǒng)體系結(jié)構(gòu)。設(shè)計(jì)系統(tǒng)體系結(jié)構(gòu)。體系結(jié)構(gòu)設(shè)計(jì)可以自底向上進(jìn)行,體系結(jié)構(gòu)設(shè)計(jì)可以自底向上進(jìn)行,如將關(guān)系緊密的對(duì)象組織成子系統(tǒng)或?qū)?;也可以自頂向如將關(guān)系緊密的對(duì)象組織成子系統(tǒng)或?qū)樱灰部梢宰皂斚蛳逻M(jìn)行,尤其是使用設(shè)計(jì)模式或遺產(chǎn)系統(tǒng)時(shí),會(huì)從子系下進(jìn)行,尤其是使用設(shè)計(jì)模式或遺產(chǎn)系統(tǒng)時(shí),會(huì)從子系統(tǒng)的劃分入手。統(tǒng)的劃分入手。 (3) 對(duì)各個(gè)子系統(tǒng)進(jìn)行設(shè)計(jì)。對(duì)各個(gè)子系統(tǒng)進(jìn)行設(shè)計(jì)。對(duì)于面向?qū)ο蟮南到y(tǒng),典型的對(duì)于面向?qū)ο蟮南到y(tǒng),典型的子系統(tǒng)有問題域子系統(tǒng)、人機(jī)交互子系統(tǒng)和任務(wù)管理子子系統(tǒng)有問題域子系統(tǒng)、人機(jī)交互子系統(tǒng)和任務(wù)管理子系統(tǒng)。系統(tǒng)。(4)
3、 對(duì)象設(shè)計(jì)及優(yōu)化。對(duì)象設(shè)計(jì)及優(yōu)化。對(duì)象設(shè)計(jì)以問題領(lǐng)域的對(duì)象設(shè)計(jì)為核對(duì)象設(shè)計(jì)以問題領(lǐng)域的對(duì)象設(shè)計(jì)為核心,其結(jié)果是一個(gè)詳細(xì)的對(duì)象模型。對(duì)象設(shè)計(jì)過程包括心,其結(jié)果是一個(gè)詳細(xì)的對(duì)象模型。對(duì)象設(shè)計(jì)過程包括使用模式設(shè)計(jì)對(duì)象、接口規(guī)格說(shuō)明、對(duì)象模型重構(gòu)、對(duì)使用模式設(shè)計(jì)對(duì)象、接口規(guī)格說(shuō)明、對(duì)象模型重構(gòu)、對(duì)象模型優(yōu)化象模型優(yōu)化4組活動(dòng)。組活動(dòng)。10.1 面向?qū)ο笤O(shè)計(jì)過程與準(zhǔn)則面向?qū)ο笤O(shè)計(jì)準(zhǔn)則面向?qū)ο笤O(shè)計(jì)準(zhǔn)則模塊化模塊化傳統(tǒng)的面向過程方法中的模塊通常是函數(shù)、過程及子程傳統(tǒng)的面向過程方法中的模塊通常是函數(shù)、過程及子程序等,而面向?qū)ο蠓椒ㄖ械哪K則是類、對(duì)象、接口、序等,而面向?qū)ο蠓椒ㄖ械哪K則是類、對(duì)象、接口、構(gòu)件
4、等。構(gòu)件等。(1)在面向過程的方法中,數(shù)據(jù)及在數(shù)據(jù)上的處理是分離的;在面向過程的方法中,數(shù)據(jù)及在數(shù)據(jù)上的處理是分離的;而在面向?qū)ο蠓椒ㄖ?,?shù)據(jù)及其上的處理是封裝在一起而在面向?qū)ο蠓椒ㄖ校瑪?shù)據(jù)及其上的處理是封裝在一起的,具有更好的獨(dú)立性,也能夠更好地支持復(fù)用。的,具有更好的獨(dú)立性,也能夠更好地支持復(fù)用。 10.1 面向?qū)ο笤O(shè)計(jì)過程與準(zhǔn)則(2) 抽象抽象面向?qū)ο蠓椒ú粌H支持過程抽象,而且支持?jǐn)?shù)據(jù)抽象。面向?qū)ο蠓椒ú粌H支持過程抽象,而且支持?jǐn)?shù)據(jù)抽象。類實(shí)際上就是一種抽象數(shù)據(jù)類型。可以將類的抽象分為類實(shí)際上就是一種抽象數(shù)據(jù)類型。可以將類的抽象分為規(guī)格說(shuō)明抽象及參數(shù)化抽象。規(guī)格說(shuō)明抽象及參數(shù)化抽象。類對(duì)
5、外開放的公共接口構(gòu)成了類的規(guī)格說(shuō)明,即協(xié)議。類對(duì)外開放的公共接口構(gòu)成了類的規(guī)格說(shuō)明,即協(xié)議。這種接口規(guī)定了外部可以使用的服務(wù),使用者無(wú)需知道這種接口規(guī)定了外部可以使用的服務(wù),使用者無(wú)需知道這些服務(wù)的具體實(shí)現(xiàn)算法。通常將這類抽象稱為規(guī)格說(shuō)這些服務(wù)的具體實(shí)現(xiàn)算法。通常將這類抽象稱為規(guī)格說(shuō)明抽象。明抽象。參數(shù)化抽象是指當(dāng)描述類的規(guī)格說(shuō)明時(shí)并不具體指定所參數(shù)化抽象是指當(dāng)描述類的規(guī)格說(shuō)明時(shí)并不具體指定所要操作的數(shù)據(jù)類型,而是將數(shù)據(jù)類型作為參數(shù)。要操作的數(shù)據(jù)類型,而是將數(shù)據(jù)類型作為參數(shù)。 10.1 面向?qū)ο笤O(shè)計(jì)過程與準(zhǔn)則(3) 信息隱藏信息隱藏在面向?qū)ο蠓椒ㄖ?,信息隱藏通過對(duì)象的封裝性實(shí)現(xiàn)。對(duì)在面向?qū)ο蠓?/p>
6、法中,信息隱藏通過對(duì)象的封裝性實(shí)現(xiàn)。對(duì)于類的用戶來(lái)說(shuō),屬性的表示方法和操作的實(shí)現(xiàn)算法都應(yīng)于類的用戶來(lái)說(shuō),屬性的表示方法和操作的實(shí)現(xiàn)算法都應(yīng)該是隱藏的。該是隱藏的。(4) 弱耦合弱耦合耦合是指一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊之間互連的緊密程度。耦合是指一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊之間互連的緊密程度。在面向?qū)ο蠓椒ㄖ校瑢?duì)象是最基本的模塊,因此,耦合主在面向?qū)ο蠓椒ㄖ?,?duì)象是最基本的模塊,因此,耦合主要指不同對(duì)象之間相互關(guān)聯(lián)的緊密程度。要指不同對(duì)象之間相互關(guān)聯(lián)的緊密程度。 10.1 面向?qū)ο笤O(shè)計(jì)過程與準(zhǔn)則(5) 強(qiáng)內(nèi)聚強(qiáng)內(nèi)聚 內(nèi)聚衡量一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度。在面內(nèi)聚衡量一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密
7、程度。在面向?qū)ο笤O(shè)計(jì)中存在以下向?qū)ο笤O(shè)計(jì)中存在以下3種內(nèi)聚:種內(nèi)聚:(1) 服務(wù)內(nèi)聚服務(wù)內(nèi)聚:一個(gè)服務(wù)應(yīng)該完成一個(gè)且僅完成一個(gè)功能。:一個(gè)服務(wù)應(yīng)該完成一個(gè)且僅完成一個(gè)功能。(2) 類內(nèi)聚類內(nèi)聚:設(shè)計(jì)類的原則是,一個(gè)類應(yīng)該只有一個(gè)用途,:設(shè)計(jì)類的原則是,一個(gè)類應(yīng)該只有一個(gè)用途,它的屬性和服務(wù)應(yīng)該是高內(nèi)聚的。類的屬性和服務(wù)應(yīng)該全它的屬性和服務(wù)應(yīng)該是高內(nèi)聚的。類的屬性和服務(wù)應(yīng)該全都是完成該類對(duì)象的任務(wù)所必需的,其中不包含無(wú)用的屬都是完成該類對(duì)象的任務(wù)所必需的,其中不包含無(wú)用的屬性或服務(wù)。如果某個(gè)類有多個(gè)用途,通常應(yīng)該把它分解成性或服務(wù)。如果某個(gè)類有多個(gè)用途,通常應(yīng)該把它分解成多個(gè)專用的類。多個(gè)專用的
8、類。(3) 一般一般特殊內(nèi)聚特殊內(nèi)聚:設(shè)計(jì)出的一般:設(shè)計(jì)出的一般特殊結(jié)構(gòu),應(yīng)該符合特殊結(jié)構(gòu),應(yīng)該符合多數(shù)人的概念,更準(zhǔn)確地說(shuō),這種結(jié)構(gòu)應(yīng)該是對(duì)相應(yīng)的領(lǐng)多數(shù)人的概念,更準(zhǔn)確地說(shuō),這種結(jié)構(gòu)應(yīng)該是對(duì)相應(yīng)的領(lǐng)域知識(shí)的正確抽取。域知識(shí)的正確抽取。 10.1 面向?qū)ο笤O(shè)計(jì)過程與準(zhǔn)則(6) 可重用可重用 軟件重用是提高軟件開發(fā)生產(chǎn)率和目標(biāo)系統(tǒng)質(zhì)量軟件重用是提高軟件開發(fā)生產(chǎn)率和目標(biāo)系統(tǒng)質(zhì)量的重要途徑。的重要途徑。 重用基本上從設(shè)計(jì)階段開始。重用有兩方面的含重用基本上從設(shè)計(jì)階段開始。重用有兩方面的含義:義:一是盡量使用已有的類一是盡量使用已有的類( (包括開發(fā)環(huán)境提供的類庫(kù),及以包括開發(fā)環(huán)境提供的類庫(kù),及以往開
9、發(fā)類似系統(tǒng)時(shí)創(chuàng)建的類往開發(fā)類似系統(tǒng)時(shí)創(chuàng)建的類) ), 二是如果確實(shí)需要?jiǎng)?chuàng)建新類,則在二是如果確實(shí)需要?jiǎng)?chuàng)建新類,則在設(shè)計(jì)這些新類的協(xié)議時(shí)設(shè)計(jì)這些新類的協(xié)議時(shí),應(yīng)該應(yīng)該考慮將來(lái)的可重復(fù)使用性考慮將來(lái)的可重復(fù)使用性。l體系結(jié)構(gòu)設(shè)計(jì)描述了建立計(jì)算機(jī)系統(tǒng)所需的數(shù)據(jù)結(jié)構(gòu)和程體系結(jié)構(gòu)設(shè)計(jì)描述了建立計(jì)算機(jī)系統(tǒng)所需的數(shù)據(jù)結(jié)構(gòu)和程序構(gòu)件。一個(gè)好的體系結(jié)構(gòu)設(shè)計(jì)要求軟件模塊的分層及編序構(gòu)件。一個(gè)好的體系結(jié)構(gòu)設(shè)計(jì)要求軟件模塊的分層及編程標(biāo)準(zhǔn)的執(zhí)行。程標(biāo)準(zhǔn)的執(zhí)行。l在面向?qū)ο筌浖?,常見的軟件模塊有在面向?qū)ο筌浖校R姷能浖K有類類、接口接口、包包和和構(gòu)構(gòu)件件。l在在設(shè)計(jì)階段設(shè)計(jì)階段我們往往我們往往關(guān)注類、接口和包關(guān)
10、注類、接口和包,在,在實(shí)現(xiàn)階段實(shí)現(xiàn)階段關(guān)注關(guān)注構(gòu)件構(gòu)件,而在,而在部署階段部署階段則關(guān)注則關(guān)注構(gòu)件的部署構(gòu)件的部署,也就是將構(gòu)件部,也就是將構(gòu)件部署在哪些結(jié)點(diǎn)上。署在哪些結(jié)點(diǎn)上。10.2 體系結(jié)構(gòu)模塊及依賴性1. 類類 在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,類和接口是程序的基本組成單類和接口是程序的基本組成單元元。 一個(gè)典型程序需要一個(gè)典型程序需要界面類界面類專門負(fù)責(zé)表示用戶界面信息,專門負(fù)責(zé)表示用戶界面信息,需要需要數(shù)據(jù)庫(kù)類數(shù)據(jù)庫(kù)類負(fù)責(zé)與數(shù)據(jù)庫(kù)進(jìn)行交互,需要有負(fù)責(zé)與數(shù)據(jù)庫(kù)進(jìn)行交互,需要有業(yè)務(wù)邏輯類業(yè)務(wù)邏輯類負(fù)責(zé)算法計(jì)算等。負(fù)責(zé)算法計(jì)算等。 在計(jì)算機(jī)程序中,要設(shè)計(jì)和實(shí)現(xiàn)的所有類都具有
11、唯一的在計(jì)算機(jī)程序中,要設(shè)計(jì)和實(shí)現(xiàn)的所有類都具有唯一的名字,在不同的階段或從不同的角度可以將它們稱為名字,在不同的階段或從不同的角度可以將它們稱為設(shè)計(jì)設(shè)計(jì)類類、實(shí)現(xiàn)類實(shí)現(xiàn)類、系統(tǒng)類系統(tǒng)類、應(yīng)用類應(yīng)用類等。等。 類及其依賴性類及其依賴性2繼承依賴性繼承依賴性 依賴性管理中最棘手的問題是由于繼承所引起的依賴依賴性管理中最棘手的問題是由于繼承所引起的依賴性。性。繼承是一種在父類和子類之間共享屬性和行為的方式繼承是一種在父類和子類之間共享屬性和行為的方式,所以運(yùn)行時(shí)可以用一個(gè)子類對(duì)象代替其父類對(duì)象。程序中凡所以運(yùn)行時(shí)可以用一個(gè)子類對(duì)象代替其父類對(duì)象。程序中凡是使用父類對(duì)象的地方,都可以用子類對(duì)象來(lái)代替
12、。一個(gè)子是使用父類對(duì)象的地方,都可以用子類對(duì)象來(lái)代替。一個(gè)子類對(duì)象是一種特殊的父類對(duì)象,它繼承父類的所有特征,同類對(duì)象是一種特殊的父類對(duì)象,它繼承父類的所有特征,同時(shí)它又可以覆蓋父類的方法,從而改變從父類繼承的一些特時(shí)它又可以覆蓋父類的方法,從而改變從父類繼承的一些特征,并可以在子類中增加一些新的功能。這樣,從客戶的角征,并可以在子類中增加一些新的功能。這樣,從客戶的角度看,在繼承樹中為請(qǐng)求提供服務(wù)的特定對(duì)象不同,系統(tǒng)的度看,在繼承樹中為請(qǐng)求提供服務(wù)的特定對(duì)象不同,系統(tǒng)的運(yùn)行行為可能會(huì)有所不同。運(yùn)行行為可能會(huì)有所不同。類及其依賴性類及其依賴性(1)多態(tài)繼承)多態(tài)繼承 根據(jù)為請(qǐng)求提供服務(wù)的對(duì)象不
13、同可以得到不同的行為,這根據(jù)為請(qǐng)求提供服務(wù)的對(duì)象不同可以得到不同的行為,這種現(xiàn)象稱為種現(xiàn)象稱為多態(tài)多態(tài)。在運(yùn)行時(shí)對(duì)類進(jìn)行實(shí)例化,并調(diào)用與實(shí)例。在運(yùn)行時(shí)對(duì)類進(jìn)行實(shí)例化,并調(diào)用與實(shí)例化對(duì)象相應(yīng)的方法,稱為化對(duì)象相應(yīng)的方法,稱為動(dòng)態(tài)綁定動(dòng)態(tài)綁定、后期綁定或運(yùn)行時(shí)綁、后期綁定或運(yùn)行時(shí)綁定。相應(yīng)地,如果方法的調(diào)用是在編譯時(shí)確定的,則稱為是定。相應(yīng)地,如果方法的調(diào)用是在編譯時(shí)確定的,則稱為是靜態(tài)綁定靜態(tài)綁定、前期綁定或編譯時(shí)綁定。、前期綁定或編譯時(shí)綁定。 多態(tài)并不是伴隨著繼承而出現(xiàn)。如果在子類中不覆蓋父類多態(tài)并不是伴隨著繼承而出現(xiàn)。如果在子類中不覆蓋父類中的任何方法,就不會(huì)產(chǎn)生多態(tài)行為。中的任何方法,就不
14、會(huì)產(chǎn)生多態(tài)行為。 很明顯,繼承會(huì)帶來(lái)類和方法之間的依賴性。繼承帶來(lái)的很明顯,繼承會(huì)帶來(lái)類和方法之間的依賴性。繼承帶來(lái)的依賴性有依賴性有編譯時(shí)繼承依賴性編譯時(shí)繼承依賴性和和運(yùn)行時(shí)繼承依賴性運(yùn)行時(shí)繼承依賴性。 類及其依賴性類及其依賴性類及其依賴性類及其依賴性 編譯時(shí)繼承依賴性編譯時(shí)繼承依賴性 右圖所示的例子說(shuō)明了一棵樹中類之間的編右圖所示的例子說(shuō)明了一棵樹中類之間的編譯時(shí)依賴性。在這個(gè)例子中,譯時(shí)依賴性。在這個(gè)例子中,B繼承繼承A,但沒有,但沒有覆蓋覆蓋A中的方法中的方法do1( )。因此,。因此,B和和A之間沒有之間沒有運(yùn)行時(shí)繼承依賴性。也就是說(shuō),由于編譯時(shí)依運(yùn)行時(shí)繼承依賴性。也就是說(shuō),由于編譯
15、時(shí)依賴性的存在,賴性的存在,A中中do1( )方法的任何變化,都會(huì)方法的任何變化,都會(huì)被被B在編譯時(shí)(靜態(tài)地)繼承。在編譯時(shí)(靜態(tài)地)繼承。 一般來(lái)說(shuō),一般來(lái)說(shuō),所有的繼承都會(huì)引入編譯時(shí)依賴所有的繼承都會(huì)引入編譯時(shí)依賴性性。依賴性是。依賴性是可傳遞的可傳遞的,也就是說(shuō),如果,也就是說(shuō),如果C依賴依賴B,B依賴依賴A,那么,那么C也依賴也依賴A。 運(yùn)行時(shí)繼承依賴性運(yùn)行時(shí)繼承依賴性 下圖舉例說(shuō)明了在一棵繼承樹中涉及客戶對(duì)象訪問類服務(wù)的運(yùn)行時(shí)下圖舉例說(shuō)明了在一棵繼承樹中涉及客戶對(duì)象訪問類服務(wù)的運(yùn)行時(shí)繼承依賴性。圖中類繼承依賴性。圖中類B的的do1( )方法是從父類方法是從父類A繼承來(lái)的,因此繼承來(lái)的
16、,因此Test與與B沒有運(yùn)行時(shí)繼承依賴性,只是一個(gè)靜態(tài)依賴性,通過從沒有運(yùn)行時(shí)繼承依賴性,只是一個(gè)靜態(tài)依賴性,通過從Test到到A的關(guān)的關(guān)聯(lián)來(lái)表明。如果在聯(lián)來(lái)表明。如果在doTest方法中調(diào)用的是方法中調(diào)用的是do2( )方法,或者在方法,或者在B中覆蓋中覆蓋了了A的的do1( )方法,則從方法,則從Test到到A和和B就會(huì)存在運(yùn)行時(shí)依賴性。就會(huì)存在運(yùn)行時(shí)依賴性。 類及其依賴性類及其依賴性(2)無(wú)多態(tài)繼承)無(wú)多態(tài)繼承 使用繼承最簡(jiǎn)單的方式是子類不覆蓋從父類繼承來(lái)的方法,使用繼承最簡(jiǎn)單的方式是子類不覆蓋從父類繼承來(lái)的方法,這樣就不存在多態(tài)性繼承問題。雖然無(wú)多態(tài)的繼承有時(shí)并不這樣就不存在多態(tài)性繼承
17、問題。雖然無(wú)多態(tài)的繼承有時(shí)并不是十分有用,但理解和管理起來(lái)是最容易的。是十分有用,但理解和管理起來(lái)是最容易的。(3)擴(kuò)展繼承和約束繼承)擴(kuò)展繼承和約束繼承 擴(kuò)展繼承擴(kuò)展繼承是指子類繼承父類的屬性,并且提供是指子類繼承父類的屬性,并且提供額外屬性額外屬性來(lái)來(lái)增強(qiáng)類定義。子類是父類的一種,如果子類覆蓋了父類的方增強(qiáng)類定義。子類是父類的一種,如果子類覆蓋了父類的方法,那么被覆蓋的方法應(yīng)該實(shí)現(xiàn)該方法的定義,并且能夠在法,那么被覆蓋的方法應(yīng)該實(shí)現(xiàn)該方法的定義,并且能夠在子類的語(yǔ)境中工作。子類的語(yǔ)境中工作。 當(dāng)一個(gè)類覆蓋了繼承來(lái)的方法,并對(duì)一些繼承來(lái)的功能進(jìn)當(dāng)一個(gè)類覆蓋了繼承來(lái)的方法,并對(duì)一些繼承來(lái)的功能
18、進(jìn)行了行了限制限制,這時(shí)就產(chǎn)生了,這時(shí)就產(chǎn)生了約束繼承約束繼承。這時(shí),子類不再是父類。這時(shí),子類不再是父類的一種。有時(shí),限制會(huì)造成繼承方法的完全禁止。的一種。有時(shí),限制會(huì)造成繼承方法的完全禁止。當(dāng)方法的當(dāng)方法的實(shí)現(xiàn)是空時(shí)實(shí)現(xiàn)是空時(shí),就會(huì)發(fā)生這種情況。,就會(huì)發(fā)生這種情況。類及其依賴性類及其依賴性3交互依賴性交互依賴性 交互依賴性也稱為方法依賴性,是通過消息連接產(chǎn)生的。交互依賴性也稱為方法依賴性,是通過消息連接產(chǎn)生的。如下圖所示。如下圖所示。類及其依賴性類及其依賴性 圖中,圖中,CActioner使用方法使用方法do1( )來(lái)發(fā)送一條消息來(lái)發(fā)送一條消息do3( )給給EEmployee,因此,因此
19、,do1( )依賴于依賴于do3( )。依賴性向上傳。依賴性向上傳遞給所屬的類,因此,遞給所屬的類,因此,CActioner依賴于依賴于EEmployee。類似。類似地,地,EOutMessage的的do2( )調(diào)用調(diào)用EEmployee的方法的方法do3( ),因此,因此,EOutMessage依賴于依賴于EEmployee。類及其依賴性類及其依賴性1接口接口 在在UML2.0中,接口是不可直接實(shí)例化的特性集合的聲明,中,接口是不可直接實(shí)例化的特性集合的聲明,即其即其對(duì)象不能直接實(shí)例化對(duì)象不能直接實(shí)例化,需要通過類來(lái)實(shí)現(xiàn),實(shí)現(xiàn)接口的,需要通過類來(lái)實(shí)現(xiàn),實(shí)現(xiàn)接口的類需要實(shí)現(xiàn)接口中聲明的方法。類
20、需要實(shí)現(xiàn)接口中聲明的方法。UML2.0對(duì)流行編程語(yǔ)言中對(duì)流行編程語(yǔ)言中的接口概念進(jìn)行了擴(kuò)展。接口中不僅可以聲明操作,還可以的接口概念進(jìn)行了擴(kuò)展。接口中不僅可以聲明操作,還可以聲明屬性。聲明屬性。 由于允許在接口中存在屬性,因此,在接口之間或者接口由于允許在接口中存在屬性,因此,在接口之間或者接口和類之間可能會(huì)產(chǎn)生關(guān)聯(lián)。用另一個(gè)接口或類作為屬性的類和類之間可能會(huì)產(chǎn)生關(guān)聯(lián)。用另一個(gè)接口或類作為屬性的類型可以表示關(guān)聯(lián)。型可以表示關(guān)聯(lián)。接口及其依賴性接口及其依賴性在在UML2.0中,可以通過關(guān)聯(lián)實(shí)現(xiàn)從接口到類的導(dǎo)航。但在中,可以通過關(guān)聯(lián)實(shí)現(xiàn)從接口到類的導(dǎo)航。但在Java中是無(wú)法實(shí)現(xiàn)的,因?yàn)橹惺菬o(wú)法實(shí)現(xiàn)
21、的,因?yàn)镴ava規(guī)定接口中的數(shù)據(jù)元素必規(guī)定接口中的數(shù)據(jù)元素必須是常量。須是常量。接口與抽象類有相似之處,抽象類是至少包含一個(gè)沒有實(shí)現(xiàn)接口與抽象類有相似之處,抽象類是至少包含一個(gè)沒有實(shí)現(xiàn)的方法的類,如果在一個(gè)抽象類中所有的方法都沒有實(shí)現(xiàn),的方法的類,如果在一個(gè)抽象類中所有的方法都沒有實(shí)現(xiàn),則稱其為則稱其為純抽象類純抽象類,從這一點(diǎn)上,接口和純抽象類似乎沒有,從這一點(diǎn)上,接口和純抽象類似乎沒有區(qū)別。但實(shí)際上,接口和抽象類還是有著本質(zhì)的區(qū)別。在只區(qū)別。但實(shí)際上,接口和抽象類還是有著本質(zhì)的區(qū)別。在只支持單繼承的語(yǔ)言中,支持單繼承的語(yǔ)言中,一個(gè)類只能有一個(gè)直接父類一個(gè)類只能有一個(gè)直接父類,但是卻但是卻可
22、以實(shí)現(xiàn)多個(gè)接口??梢詫?shí)現(xiàn)多個(gè)接口。接口及其依賴性接口及其依賴性2實(shí)現(xiàn)依賴性實(shí)現(xiàn)依賴性 一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,由類實(shí)現(xiàn)的接口集合稱為該一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,由類實(shí)現(xiàn)的接口集合稱為該類的類的供給接口供給接口。在。在UML2.0中,將一個(gè)類和該類實(shí)現(xiàn)的接口中,將一個(gè)類和該類實(shí)現(xiàn)的接口之間的依賴性稱為之間的依賴性稱為實(shí)現(xiàn)依賴性實(shí)現(xiàn)依賴性。 右圖所示為實(shí)現(xiàn)依賴性的右圖所示為實(shí)現(xiàn)依賴性的UML符號(hào),在箭頭末端的類符號(hào),在箭頭末端的類實(shí)現(xiàn)了箭頭所指向的接口。實(shí)現(xiàn)了箭頭所指向的接口。從圖中可以看到,從圖中可以看到,Class1實(shí)實(shí)現(xiàn)了現(xiàn)了Interface1接口和接口和Interface2接口,而接口,而
23、Class2只實(shí)現(xiàn)了只實(shí)現(xiàn)了Interface2接口。接口。接口及其依賴性接口及其依賴性3使用依賴性使用依賴性 一個(gè)接口可以為其他類或接口提供服務(wù),同時(shí)也可能需要一個(gè)接口可以為其他類或接口提供服務(wù),同時(shí)也可能需要其他接口的服務(wù)。一個(gè)接口所需要的其他接口所提供的服務(wù)其他接口的服務(wù)。一個(gè)接口所需要的其他接口所提供的服務(wù)稱為這個(gè)類的稱為這個(gè)類的需求接口需求接口。需求接口詳細(xì)說(shuō)明一個(gè)類或接口需。需求接口詳細(xì)說(shuō)明一個(gè)類或接口需要的服務(wù),從而可以為其客戶提供服務(wù)。在要的服務(wù),從而可以為其客戶提供服務(wù)。在UML2.0中,通中,通過類(接口)和它所需接口之間的依賴關(guān)系來(lái)說(shuō)明需求接口,過類(接口)和它所需接口之
24、間的依賴關(guān)系來(lái)說(shuō)明需求接口,這稱為這稱為使用依賴性使用依賴性。 下圖所示為使用依賴性的下圖所示為使用依賴性的UML符號(hào),在箭頭尾部的類或符號(hào),在箭頭尾部的類或接口使用在箭頭頭部的接口。接口使用在箭頭頭部的接口。Class1使用使用Interface1,Interface1使用使用Interface2。在。在Java語(yǔ)言中,不允許接口之語(yǔ)言中,不允許接口之間的使用,只允許接口間的擴(kuò)展繼承。間的使用,只允許接口間的擴(kuò)展繼承。 接口及其依賴性接口及其依賴性 Class1包含方法包含方法do1( ),而,而do1( )調(diào)用操作調(diào)用操作op1( )。在靜。在靜態(tài)代碼中,并不清楚需求接口的哪個(gè)實(shí)現(xiàn)提供了所
25、需的服務(wù),態(tài)代碼中,并不清楚需求接口的哪個(gè)實(shí)現(xiàn)提供了所需的服務(wù),可以是實(shí)現(xiàn)可以是實(shí)現(xiàn)Interface1的任何一個(gè)類實(shí)例。當(dāng)?shù)娜魏我粋€(gè)類實(shí)例。當(dāng)Class1的一個(gè)的一個(gè)執(zhí)行實(shí)例設(shè)置數(shù)據(jù)成員執(zhí)行實(shí)例設(shè)置數(shù)據(jù)成員myInterface的值時(shí),具體實(shí)例才能的值時(shí),具體實(shí)例才能確定,從而可以引用具體類的一個(gè)具體對(duì)象。確定,從而可以引用具體類的一個(gè)具體對(duì)象。 接口及其依賴性接口及其依賴性1. 包包 包包(package)又可稱為層或子系統(tǒng),是表示組織類的一)又可稱為層或子系統(tǒng),是表示組織類的一種方式,用于劃分應(yīng)用程序的邏輯模型。包是高度相關(guān)的類種方式,用于劃分應(yīng)用程序的邏輯模型。包是高度相關(guān)的類的聚合,
26、這些類本身是內(nèi)聚的,但相對(duì)于其他聚合來(lái)說(shuō)又是的聚合,這些類本身是內(nèi)聚的,但相對(duì)于其他聚合來(lái)說(shuō)又是松散耦合的。松散耦合的。 包可以嵌套包可以嵌套。外層包可以直接訪問包括在它的嵌套包中的。外層包可以直接訪問包括在它的嵌套包中的任何類。任何類。包還可以導(dǎo)入其他包包還可以導(dǎo)入其他包,例如,在包,例如,在包A中導(dǎo)入了包中導(dǎo)入了包B,這意味著包這意味著包A或者包或者包A的元素可以引用包的元素可以引用包B或者包或者包B的元素。的元素。因此,雖然一個(gè)類只屬于一個(gè)包,但是它可以被導(dǎo)入其他包。因此,雖然一個(gè)類只屬于一個(gè)包,但是它可以被導(dǎo)入其他包。包的導(dǎo)入操作會(huì)引入包之間的依賴性以及它們的元素之間的包的導(dǎo)入操作會(huì)引
27、入包之間的依賴性以及它們的元素之間的依賴性。依賴性。 包及其依賴性包及其依賴性 下圖為下圖為UML包的例子。一個(gè)包可以不暴露任何成員,也包的例子。一個(gè)包可以不暴露任何成員,也可以明確標(biāo)明它所包含的成員,或者用符號(hào)可以明確標(biāo)明它所包含的成員,或者用符號(hào)“ ”來(lái)表示。來(lái)表示。圖中,包圖中,包 B擁有類擁有類 X,包,包C擁有包擁有包 D,包,包E擁有包擁有包 F,包,包 F擁有類擁有類Y和類和類Z。包及其依賴性包及其依賴性 如果包如果包A的一些成員在某種程度上引用了包的一些成員在某種程度上引用了包B的的某些成員(包某些成員(包A導(dǎo)入了包導(dǎo)入了包B的一些成員),這隱的一些成員),這隱含著含著雙重含義
28、雙重含義。 包包B的變化可能會(huì)影響包的變化可能會(huì)影響包A,通常需要對(duì)包,通常需要對(duì)包A重重新進(jìn)行編譯和測(cè)試。新進(jìn)行編譯和測(cè)試。 包包A只能和包只能和包B一起使用。一起使用。包及其依賴性包及其依賴性包及其依賴性包及其依賴性2包依賴性包依賴性 本質(zhì)上,本質(zhì)上,兩個(gè)包之間的依賴性來(lái)自于兩個(gè)包中類之間的兩個(gè)包之間的依賴性來(lái)自于兩個(gè)包中類之間的依賴性依賴性。類之間的循環(huán)依賴性是個(gè)特別棘手的問題,好在。類之間的循環(huán)依賴性是個(gè)特別棘手的問題,好在大多數(shù)情況下可以通過重新設(shè)計(jì)避免循環(huán)依賴性。大多數(shù)情況下可以通過重新設(shè)計(jì)避免循環(huán)依賴性。 通過在上圖中通過在上圖中增加新包可以消除包之間的循環(huán)依賴性增加新包可以消除
29、包之間的循環(huán)依賴性。方法為:在第方法為:在第1個(gè)例子中將包個(gè)例子中將包B依賴的包依賴的包A的元素從包的元素從包A中分中分離出來(lái),組成包離出來(lái),組成包C,使得包,使得包B不再依賴包不再依賴包A,而是依賴包,而是依賴包C;包及其依賴性包及其依賴性在第在第2個(gè)例子中,將包個(gè)例子中,將包F所依賴的包所依賴的包D中的元素從包中的元素從包D中分離中分離出來(lái),組成包出來(lái),組成包G。消除循環(huán)依賴性后如下圖所示。消除循環(huán)依賴性后如下圖所示。包及其依賴性包及其依賴性 在面向?qū)ο蟮能浖こ汰h(huán)境中,面向?qū)ο蠹夹g(shù)已達(dá)到了類在面向?qū)ο蟮能浖こ汰h(huán)境中,面向?qū)ο蠹夹g(shù)已達(dá)到了類級(jí)復(fù)用,而構(gòu)件級(jí)復(fù)用則是比類級(jí)復(fù)用更高一級(jí)的復(fù)用
30、,它級(jí)復(fù)用,而構(gòu)件級(jí)復(fù)用則是比類級(jí)復(fù)用更高一級(jí)的復(fù)用,它是對(duì)是對(duì)一組類的組合一組類的組合進(jìn)行封裝(當(dāng)然,在某些情況下,一個(gè)構(gòu)進(jìn)行封裝(當(dāng)然,在某些情況下,一個(gè)構(gòu)件可能只包含一個(gè)單獨(dú)的類),并代表完成一個(gè)或多個(gè)功能件可能只包含一個(gè)單獨(dú)的類),并代表完成一個(gè)或多個(gè)功能的特定服務(wù),也為用戶提供了多個(gè)接口。的特定服務(wù),也為用戶提供了多個(gè)接口。 一個(gè)構(gòu)件可以是一個(gè)編譯的類,可以是一組編譯的類,也一個(gè)構(gòu)件可以是一個(gè)編譯的類,可以是一組編譯的類,也可以是其他獨(dú)立的部署單元可以是其他獨(dú)立的部署單元,如一個(gè)文本文件、一個(gè)圖片、,如一個(gè)文本文件、一個(gè)圖片、一個(gè)數(shù)據(jù)文件、一個(gè)腳本等。一個(gè)數(shù)據(jù)文件、一個(gè)腳本等。構(gòu)件及
31、其依賴性構(gòu)件及其依賴性 從軟件復(fù)用的角度,從軟件復(fù)用的角度,構(gòu)件構(gòu)件是指在軟件開發(fā)過程中可以重是指在軟件開發(fā)過程中可以重復(fù)使用的軟件元素,這些軟件元素包括復(fù)使用的軟件元素,這些軟件元素包括程序代碼、測(cè)試用程序代碼、測(cè)試用例、設(shè)計(jì)文檔、設(shè)計(jì)過程、需求分析文檔、甚至領(lǐng)域知例、設(shè)計(jì)文檔、設(shè)計(jì)過程、需求分析文檔、甚至領(lǐng)域知識(shí)識(shí)。可復(fù)用的軟件元素越大,我們稱復(fù)用的粒度就越大??蓮?fù)用的軟件元素越大,我們稱復(fù)用的粒度就越大。為了能夠支持復(fù)用,軟件構(gòu)件應(yīng)具有以下特性:為了能夠支持復(fù)用,軟件構(gòu)件應(yīng)具有以下特性:(1)獨(dú)立部署單元)獨(dú)立部署單元:一個(gè)構(gòu)件是獨(dú)立部署的,意味著它必:一個(gè)構(gòu)件是獨(dú)立部署的,意味著它必
32、須能與它所在的環(huán)境及其他構(gòu)件完全分離。須能與它所在的環(huán)境及其他構(gòu)件完全分離。(2)作為第三方的組裝單元:)作為第三方的組裝單元:構(gòu)件必須具備很好的內(nèi)聚構(gòu)件必須具備很好的內(nèi)聚 性,必須封裝它的實(shí)現(xiàn),并且只通過良好定義的接口性,必須封裝它的實(shí)現(xiàn),并且只通過良好定義的接口 與外部環(huán)境進(jìn)行交互。與外部環(huán)境進(jìn)行交互。 構(gòu)件及其依賴性構(gòu)件及其依賴性(3)一個(gè)構(gòu)件不能有任何(外部的)可見狀態(tài))一個(gè)構(gòu)件不能有任何(外部的)可見狀態(tài):即構(gòu)件不:即構(gòu)件不能與自己的拷貝有所區(qū)別。能與自己的拷貝有所區(qū)別。 根據(jù)上述特性可以得出以下的定義:根據(jù)上述特性可以得出以下的定義: “軟件構(gòu)件是一種組裝單元,它具有規(guī)范的接口規(guī)格
33、說(shuō)軟件構(gòu)件是一種組裝單元,它具有規(guī)范的接口規(guī)格說(shuō)明明和顯示的語(yǔ)境依賴。軟件構(gòu)件可以被獨(dú)立部署,并由第三和顯示的語(yǔ)境依賴。軟件構(gòu)件可以被獨(dú)立部署,并由第三方任意組裝。方任意組裝?!?OMG UML規(guī)范中將構(gòu)件定義為規(guī)范中將構(gòu)件定義為“系統(tǒng)中某一定型化的、系統(tǒng)中某一定型化的、可配置的和可替換的部件,該部件封裝了實(shí)現(xiàn)并暴露一系可配置的和可替換的部件,該部件封裝了實(shí)現(xiàn)并暴露一系列接口列接口”。構(gòu)件及其依賴性構(gòu)件及其依賴性構(gòu)件及其依賴性構(gòu)件及其依賴性 構(gòu)件圖構(gòu)件圖表示構(gòu)件之間的依賴關(guān)系,如下圖所示。每個(gè)構(gòu)表示構(gòu)件之間的依賴關(guān)系,如下圖所示。每個(gè)構(gòu)件實(shí)現(xiàn)(支持)一些接口,并使用另一些接口。件實(shí)現(xiàn)(支持)一
34、些接口,并使用另一些接口。 構(gòu)件及其依賴性構(gòu)件及其依賴性構(gòu)件與類的區(qū)別構(gòu)件與類的區(qū)別是雙重的:是雙重的: 首先,構(gòu)件是部署在某個(gè)計(jì)算機(jī)結(jié)點(diǎn)上的物理抽象。類表首先,構(gòu)件是部署在某個(gè)計(jì)算機(jī)結(jié)點(diǎn)上的物理抽象。類表示邏輯事務(wù),為了起到物理抽象的作用,不得不將其實(shí)現(xiàn)為示邏輯事務(wù),為了起到物理抽象的作用,不得不將其實(shí)現(xiàn)為構(gòu)件。構(gòu)件。 其次,構(gòu)件只顯示它所包含的類的某些接口,很多其他接其次,構(gòu)件只顯示它所包含的類的某些接口,很多其他接口都被封裝在構(gòu)件中口都被封裝在構(gòu)件中它們只被協(xié)作的類在內(nèi)部使用,對(duì)它們只被協(xié)作的類在內(nèi)部使用,對(duì)于其他構(gòu)件是不可見的。于其他構(gòu)件是不可見的。 10.3 系統(tǒng)分解 子系統(tǒng)和類子系
35、統(tǒng)和類在大型和復(fù)雜的軟件系統(tǒng)情形,首先根據(jù)需求的功能模型在大型和復(fù)雜的軟件系統(tǒng)情形,首先根據(jù)需求的功能模型(用例模型),將系統(tǒng)分解成若干個(gè)部分,每一部分又可(用例模型),將系統(tǒng)分解成若干個(gè)部分,每一部分又可分解為若干子系統(tǒng)或類,每個(gè)子系統(tǒng)還可以由更小的子系分解為若干子系統(tǒng)或類,每個(gè)子系統(tǒng)還可以由更小的子系統(tǒng)或類組成,如圖所示。統(tǒng)或類組成,如圖所示。 系統(tǒng)結(jié)構(gòu)的類圖系統(tǒng)結(jié)構(gòu)的類圖 10.3 系統(tǒng)分解 服務(wù)和子系統(tǒng)接口服務(wù)和子系統(tǒng)接口服務(wù)是一組有公共目的的相關(guān)操作。而子系統(tǒng)則通過給其服務(wù)是一組有公共目的的相關(guān)操作。而子系統(tǒng)則通過給其他子系統(tǒng)提供服務(wù)來(lái)發(fā)揮自己的能力。與類不同的是,子他子系統(tǒng)提供服務(wù)
36、來(lái)發(fā)揮自己的能力。與類不同的是,子系統(tǒng)不要求其他子系統(tǒng)為它提供服務(wù)。系統(tǒng)不要求其他子系統(tǒng)為它提供服務(wù)。供其他子系統(tǒng)調(diào)用的某個(gè)子系統(tǒng)的操作集合就是子系統(tǒng)的供其他子系統(tǒng)調(diào)用的某個(gè)子系統(tǒng)的操作集合就是子系統(tǒng)的接口。接口。子系統(tǒng)的接口包括操作名、操作參數(shù)類型及返回值。子系統(tǒng)的接口包括操作名、操作參數(shù)類型及返回值。面向?qū)ο蟮南到y(tǒng)設(shè)計(jì)主要關(guān)注每個(gè)子系統(tǒng)提供服務(wù)的定義,面向?qū)ο蟮南到y(tǒng)設(shè)計(jì)主要關(guān)注每個(gè)子系統(tǒng)提供服務(wù)的定義,即枚舉所有的操作、操作參數(shù)和行為。即枚舉所有的操作、操作參數(shù)和行為。 10.3 系統(tǒng)分解 服務(wù)和子系統(tǒng)接口服務(wù)和子系統(tǒng)接口子系統(tǒng)分層的目的是建立系統(tǒng)的層次結(jié)構(gòu)。每一層僅依賴子系統(tǒng)分層的目的是
37、建立系統(tǒng)的層次結(jié)構(gòu)。每一層僅依賴于它下一層提供的服務(wù),而對(duì)它的上一層可以一無(wú)所知。于它下一層提供的服務(wù),而對(duì)它的上一層可以一無(wú)所知。下圖給出了一個(gè)三層的系統(tǒng)結(jié)構(gòu)的示例。下圖給出了一個(gè)三層的系統(tǒng)結(jié)構(gòu)的示例。10.3 系統(tǒng)分解 服務(wù)和子系統(tǒng)接口服務(wù)和子系統(tǒng)接口如果在一個(gè)系統(tǒng)的層次結(jié)構(gòu)中,每如果在一個(gè)系統(tǒng)的層次結(jié)構(gòu)中,每一層只能訪問與其相鄰的下一層,一層只能訪問與其相鄰的下一層,則稱之為封閉體系結(jié)構(gòu);如果每一則稱之為封閉體系結(jié)構(gòu);如果每一層還可訪問比其相鄰下一層更低的層還可訪問比其相鄰下一層更低的層次,則稱之為開放體系結(jié)構(gòu)。層次,則稱之為開放體系結(jié)構(gòu)。典型的封閉體系結(jié)構(gòu)的例子就是開典型的封閉體系結(jié)構(gòu)
38、的例子就是開放系統(tǒng)互聯(lián)參考模型(放系統(tǒng)互聯(lián)參考模型(OSIOSI模型),模型),如圖所示。如圖所示。 10.3 系統(tǒng)分解 服務(wù)和子系統(tǒng)接口服務(wù)和子系統(tǒng)接口開放體系結(jié)構(gòu)的一個(gè)例子是開放體系結(jié)構(gòu)的一個(gè)例子是JavaJava的的SwingSwing用戶接口包。它用戶接口包。它允許繞過高層直接訪問低層接口以克服性能瓶頸。如圖所允許繞過高層直接訪問低層接口以克服性能瓶頸。如圖所示。示。10.3 系統(tǒng)分解 Coad&Yourdon的面向?qū)ο笤O(shè)計(jì)模型的面向?qū)ο笤O(shè)計(jì)模型Coad & YourdonCoad & Yourdon基于基于MVCMVC(Model-View-Controlle
39、rModel-View-Controller)模型,)模型,在邏輯上將系統(tǒng)劃分為在邏輯上將系統(tǒng)劃分為4 4個(gè)部分,分別是問題域部分、人個(gè)部分,分別是問題域部分、人機(jī)交互部分、任務(wù)管理部分及數(shù)據(jù)管理部分,每一部分又機(jī)交互部分、任務(wù)管理部分及數(shù)據(jù)管理部分,每一部分又可分為若干子系統(tǒng)??煞譃槿舾勺酉到y(tǒng)。 Coad Coad 與與 Yourdon Yourdon 在設(shè)計(jì)階段中繼續(xù)采用了分析階段中提在設(shè)計(jì)階段中繼續(xù)采用了分析階段中提到的到的5 5個(gè)層次,用于建立系統(tǒng)的個(gè)層次,用于建立系統(tǒng)的4 4個(gè)組成成分。每一個(gè)子系個(gè)組成成分。每一個(gè)子系統(tǒng)都由主題、類統(tǒng)都由主題、類-&-&-對(duì)象、結(jié)構(gòu)、
40、屬性和服務(wù)對(duì)象、結(jié)構(gòu)、屬性和服務(wù)5 5個(gè)層次組成。個(gè)層次組成。這這5 5個(gè)層次可以被當(dāng)作整個(gè)模型的水平切片。個(gè)層次可以被當(dāng)作整個(gè)模型的水平切片。 10.3 系統(tǒng)分解 典型的面向?qū)ο笤O(shè)計(jì)模型典型的面向?qū)ο笤O(shè)計(jì)模型 10.3 系統(tǒng)分解 子系統(tǒng)之間的兩種交互方式子系統(tǒng)之間的兩種交互方式客戶客戶- -供應(yīng)商關(guān)系供應(yīng)商關(guān)系:在這種關(guān)系中,客戶子系統(tǒng)調(diào)用供應(yīng):在這種關(guān)系中,客戶子系統(tǒng)調(diào)用供應(yīng)商子系統(tǒng),后者完成某些服務(wù)工作并返回結(jié)果。使用這種商子系統(tǒng),后者完成某些服務(wù)工作并返回結(jié)果。使用這種交互方案,作為客戶的子系統(tǒng)必須了解作為供應(yīng)商的子系交互方案,作為客戶的子系統(tǒng)必須了解作為供應(yīng)商的子系統(tǒng)的接口,而后者卻
41、無(wú)須了解前者的接口。統(tǒng)的接口,而后者卻無(wú)須了解前者的接口。平等伙伴關(guān)系平等伙伴關(guān)系:在這種關(guān)系中,每個(gè)子系統(tǒng)都可能調(diào)用其:在這種關(guān)系中,每個(gè)子系統(tǒng)都可能調(diào)用其他子系統(tǒng),因此每個(gè)子系統(tǒng)都必須了解其他子系統(tǒng)的接口。他子系統(tǒng),因此每個(gè)子系統(tǒng)都必須了解其他子系統(tǒng)的接口。與第一種方案相比,這種方案中,子系統(tǒng)間的交互更加復(fù)與第一種方案相比,這種方案中,子系統(tǒng)間的交互更加復(fù)雜。雜。10.3 系統(tǒng)分解 組織系統(tǒng)的兩種方案組織系統(tǒng)的兩種方案分層組織分層組織:這種組織方案把軟件系統(tǒng)組織成一個(gè)層次系統(tǒng),:這種組織方案把軟件系統(tǒng)組織成一個(gè)層次系統(tǒng),每層是一個(gè)子系統(tǒng)。上層在下層的基礎(chǔ)上建立,下層為實(shí)每層是一個(gè)子系統(tǒng)。上
42、層在下層的基礎(chǔ)上建立,下層為實(shí)現(xiàn)上層功能而提供必要的服務(wù)。每一層內(nèi)所包含的對(duì)象,現(xiàn)上層功能而提供必要的服務(wù)。每一層內(nèi)所包含的對(duì)象,彼此間相互獨(dú)立,而處于不同層次上的對(duì)象,彼此間往往彼此間相互獨(dú)立,而處于不同層次上的對(duì)象,彼此間往往有關(guān)聯(lián)。有關(guān)聯(lián)。 塊狀組織塊狀組織:這種組織方案把軟件系統(tǒng)垂直地分解成若干個(gè):這種組織方案把軟件系統(tǒng)垂直地分解成若干個(gè)相對(duì)獨(dú)立的、弱耦合的子系統(tǒng),一個(gè)子系統(tǒng)相當(dāng)于一塊,相對(duì)獨(dú)立的、弱耦合的子系統(tǒng),一個(gè)子系統(tǒng)相當(dāng)于一塊,每塊提供一種類型的服務(wù)。每塊提供一種類型的服務(wù)。 混合使用層次結(jié)構(gòu)和塊狀結(jié)構(gòu),可以成功地由多混合使用層次結(jié)構(gòu)和塊狀結(jié)構(gòu),可以成功地由多個(gè)子系統(tǒng)組成一個(gè)完
43、整的軟件系統(tǒng)。個(gè)子系統(tǒng)組成一個(gè)完整的軟件系統(tǒng)。 10.4 問題域部分的設(shè)計(jì) 典型的面向?qū)ο笙到y(tǒng)一般由三層組成,即數(shù)據(jù)庫(kù)層、業(yè)務(wù)典型的面向?qū)ο笙到y(tǒng)一般由三層組成,即數(shù)據(jù)庫(kù)層、業(yè)務(wù)邏輯層及用戶界面層。那么,在這三層中,首先從哪一層邏輯層及用戶界面層。那么,在這三層中,首先從哪一層開始設(shè)計(jì)呢?開始設(shè)計(jì)呢? 實(shí)際上,面向?qū)ο蟮脑O(shè)計(jì)也是以面向?qū)ο蠓治龅哪P蜑榛鶎?shí)際上,面向?qū)ο蟮脑O(shè)計(jì)也是以面向?qū)ο蠓治龅哪P蜑榛A(chǔ)的。礎(chǔ)的。 面向?qū)ο蟮姆治瞿P桶ㄓ杏美龍D、類圖、順序圖和包圖,面向?qū)ο蟮姆治瞿P桶ㄓ杏美龍D、類圖、順序圖和包圖,主要是對(duì)問題領(lǐng)域進(jìn)行描述,基本上不考慮技術(shù)實(shí)現(xiàn),當(dāng)主要是對(duì)問題領(lǐng)域進(jìn)行描述,基本
44、上不考慮技術(shù)實(shí)現(xiàn),當(dāng)然也不考慮數(shù)據(jù)庫(kù)層和用戶界面層。然也不考慮數(shù)據(jù)庫(kù)層和用戶界面層。 面向?qū)ο蠓治鏊玫降膯栴}域模型可以直接應(yīng)用于系統(tǒng)的面向?qū)ο蠓治鏊玫降膯栴}域模型可以直接應(yīng)用于系統(tǒng)的問題域部分的設(shè)計(jì)。問題域部分的設(shè)計(jì)。 所以,面向?qū)ο笤O(shè)計(jì)應(yīng)該從問題域部分的設(shè)計(jì)開始,也就所以,面向?qū)ο笤O(shè)計(jì)應(yīng)該從問題域部分的設(shè)計(jì)開始,也就是三層結(jié)構(gòu)的中間層是三層結(jié)構(gòu)的中間層應(yīng)用邏輯層。應(yīng)用邏輯層。10.4 問題域部分的設(shè)計(jì)在面向?qū)ο笤O(shè)計(jì)過程中,可能對(duì)面向?qū)ο蠓治鲈诿嫦驅(qū)ο笤O(shè)計(jì)過程中,可能對(duì)面向?qū)ο蠓治鏊贸龅膯栴}域模型做以下方面的補(bǔ)充或調(diào)整。所得出的問題域模型做以下方面的補(bǔ)充或調(diào)整。調(diào)整需求。有兩種情況會(huì)導(dǎo)致
45、修改通過面向?qū)φ{(diào)整需求。有兩種情況會(huì)導(dǎo)致修改通過面向?qū)ο蠓治鏊_定的系統(tǒng)需求:象分析所確定的系統(tǒng)需求:一是用戶需求或外部環(huán)境發(fā)生變化;一是用戶需求或外部環(huán)境發(fā)生變化;(1)二是分析員對(duì)問題理解不透徹,導(dǎo)致分析模型不能完整、二是分析員對(duì)問題理解不透徹,導(dǎo)致分析模型不能完整、準(zhǔn)確地反映用戶的真實(shí)需求。準(zhǔn)確地反映用戶的真實(shí)需求。10.4 問題域部分的設(shè)計(jì)(2) 復(fù)用已有的類復(fù)用已有的類從類庫(kù)選擇已有的類,從供應(yīng)商那里購(gòu)買商業(yè)外購(gòu)構(gòu)件,從類庫(kù)選擇已有的類,從供應(yīng)商那里購(gòu)買商業(yè)外購(gòu)構(gòu)件,從網(wǎng)絡(luò)、組織、小組或個(gè)人那里搜集適用的遺留軟構(gòu)件,從網(wǎng)絡(luò)、組織、小組或個(gè)人那里搜集適用的遺留軟構(gòu)件,把它們?cè)黾拥絾栴}域
46、部分的設(shè)計(jì)中去。把它們?cè)黾拥絾栴}域部分的設(shè)計(jì)中去。在被復(fù)用的已有類和問題域類之間添加泛化(一般化在被復(fù)用的已有類和問題域類之間添加泛化(一般化特殊特殊化)關(guān)系,繼承被復(fù)用類或構(gòu)件屬性和方法?;╆P(guān)系,繼承被復(fù)用類或構(gòu)件屬性和方法。標(biāo)出在問題域類中因繼承被復(fù)用的已有類或構(gòu)件而成為多標(biāo)出在問題域類中因繼承被復(fù)用的已有類或構(gòu)件而成為多余的屬性和服務(wù)。余的屬性和服務(wù)。修改與問題域類相關(guān)的關(guān)聯(lián)。修改與問題域類相關(guān)的關(guān)聯(lián)。 10.4 問題域部分的設(shè)計(jì)(3) 把問題域類組合在一起把問題域類組合在一起在進(jìn)行面向?qū)ο笤O(shè)計(jì)時(shí),通常需要先引入一個(gè)類,以便將在進(jìn)行面向?qū)ο笤O(shè)計(jì)時(shí),通常需要先引入一個(gè)類,以便將問題域?qū)S?/p>
47、的類組合在一起,它起到問題域?qū)S玫念惤M合在一起,它起到“根根”類的作用,將類的作用,將全部下層的類組合在一起。全部下層的類組合在一起。當(dāng)沒有一種更滿意的組合機(jī)制可用時(shí),可以從類庫(kù)中引進(jìn)當(dāng)沒有一種更滿意的組合機(jī)制可用時(shí),可以從類庫(kù)中引進(jìn)一個(gè)根類,作為包容類,把所有與問題領(lǐng)域有關(guān)的類關(guān)聯(lián)一個(gè)根類,作為包容類,把所有與問題領(lǐng)域有關(guān)的類關(guān)聯(lián)到一起,建立類的層次。到一起,建立類的層次。之后,將同一問題領(lǐng)域的一些類集合起來(lái),存于類庫(kù)中。之后,將同一問題領(lǐng)域的一些類集合起來(lái),存于類庫(kù)中。10.4 問題域部分的設(shè)計(jì)(4) 增添泛化類以建立類間的協(xié)議增添泛化類以建立類間的協(xié)議有時(shí)某些問題域的類要求一組類似的服務(wù)
48、(以及相應(yīng)的屬有時(shí)某些問題域的類要求一組類似的服務(wù)(以及相應(yīng)的屬性)。此時(shí),以這些問題域的類作為特化的類,定義一個(gè)性)。此時(shí),以這些問題域的類作為特化的類,定義一個(gè)泛化類。泛化類。該泛化類定義了為所有這些特化類共用的一組服務(wù)名,作該泛化類定義了為所有這些特化類共用的一組服務(wù)名,作為公共的協(xié)議,用來(lái)與數(shù)據(jù)管理或其他外部系統(tǒng)部件通信。為公共的協(xié)議,用來(lái)與數(shù)據(jù)管理或其他外部系統(tǒng)部件通信。這些服務(wù)都是虛函數(shù)。在各個(gè)特化類中定義其實(shí)現(xiàn)。這些服務(wù)都是虛函數(shù)。在各個(gè)特化類中定義其實(shí)現(xiàn)。10.4 問題域部分的設(shè)計(jì)(5) 調(diào)整繼承的支持級(jí)別調(diào)整繼承的支持級(jí)別如果在分析模型中一個(gè)泛化關(guān)系中的特化類繼承了多個(gè)類如果
49、在分析模型中一個(gè)泛化關(guān)系中的特化類繼承了多個(gè)類的屬性或服務(wù),就產(chǎn)生了多繼承關(guān)系,如圖所示。的屬性或服務(wù),就產(chǎn)生了多繼承關(guān)系,如圖所示。 10.4 問題域部分的設(shè)計(jì)1) 1) 針對(duì)單繼承語(yǔ)言的調(diào)整。對(duì)于只支持單繼承關(guān)系的編程針對(duì)單繼承語(yǔ)言的調(diào)整。對(duì)于只支持單繼承關(guān)系的編程語(yǔ)言,可以使用兩種方法將多繼承結(jié)構(gòu)轉(zhuǎn)換為單繼承結(jié)構(gòu)。語(yǔ)言,可以使用兩種方法將多繼承結(jié)構(gòu)轉(zhuǎn)換為單繼承結(jié)構(gòu)。 把特化類看做是泛化類所扮演的角色,如圖把特化類看做是泛化類所扮演的角色,如圖(a)(a)和圖和圖(b)(b)所所示。示。 10.4 問題域部分的設(shè)計(jì) 把多繼承的層次結(jié)構(gòu)平鋪為單繼承的層次結(jié)構(gòu),如圖所把多繼承的層次結(jié)構(gòu)平鋪為單
50、繼承的層次結(jié)構(gòu),如圖所示。這意味著該泛化關(guān)系在設(shè)計(jì)中就不再那么清晰了。同示。這意味著該泛化關(guān)系在設(shè)計(jì)中就不再那么清晰了。同時(shí)某些屬性和服務(wù)在特化類中重復(fù)出現(xiàn),造成冗余。時(shí)某些屬性和服務(wù)在特化類中重復(fù)出現(xiàn),造成冗余。10.4 問題域部分的設(shè)計(jì)2) 2) 針對(duì)無(wú)繼承語(yǔ)言的調(diào)整。針對(duì)無(wú)繼承語(yǔ)言的調(diào)整。編程語(yǔ)言中的繼承屬性提供了表達(dá)問題域的一般化編程語(yǔ)言中的繼承屬性提供了表達(dá)問題域的一般化特殊化特殊化語(yǔ)義的語(yǔ)法,它明確地表示了公共屬性和服務(wù),還為通過語(yǔ)義的語(yǔ)法,它明確地表示了公共屬性和服務(wù),還為通過可擴(kuò)展性而達(dá)到可復(fù)用性提供了基礎(chǔ)??蓴U(kuò)展性而達(dá)到可復(fù)用性提供了基礎(chǔ)。然而,由于開發(fā)組織方面的原因,有些項(xiàng)
51、目最終選擇了不然而,由于開發(fā)組織方面的原因,有些項(xiàng)目最終選擇了不支持繼承性的編程語(yǔ)言。對(duì)于一個(gè)不支持繼承的編程語(yǔ)言支持繼承性的編程語(yǔ)言。對(duì)于一個(gè)不支持繼承的編程語(yǔ)言來(lái)說(shuō),只能將每一個(gè)泛化關(guān)系的層次展開,成為一組類及來(lái)說(shuō),只能將每一個(gè)泛化關(guān)系的層次展開,成為一組類及對(duì)象,之后再使用命名慣例將它們組合在一起。對(duì)象,之后再使用命名慣例將它們組合在一起。 10.4 問題域部分的設(shè)計(jì)(6) 改進(jìn)性能改進(jìn)性能 提高執(zhí)行效率是系統(tǒng)設(shè)計(jì)的目標(biāo)之一。為以提高效率有時(shí)提高執(zhí)行效率是系統(tǒng)設(shè)計(jì)的目標(biāo)之一。為以提高效率有時(shí)必須改變問題域的結(jié)構(gòu)。必須改變問題域的結(jié)構(gòu)。 1) 1) 如果類之間經(jīng)常需要傳送大量消息,可合并相
52、關(guān)的類,如果類之間經(jīng)常需要傳送大量消息,可合并相關(guān)的類,使得通信成為對(duì)象內(nèi)的通信,而不是對(duì)象之間的通信,或使得通信成為對(duì)象內(nèi)的通信,而不是對(duì)象之間的通信,或者使用全局?jǐn)?shù)據(jù)作用域,打破封裝的原則,以減少消息傳者使用全局?jǐn)?shù)據(jù)作用域,打破封裝的原則,以減少消息傳遞引起的速度損失。遞引起的速度損失。 2) 2) 增加某些屬性到原來(lái)的類中,或增加低層的類,以保增加某些屬性到原來(lái)的類中,或增加低層的類,以保存暫時(shí)結(jié)果,避免每次都要重復(fù)計(jì)算造成速度損失。存暫時(shí)結(jié)果,避免每次都要重復(fù)計(jì)算造成速度損失。10.4 問題域部分的設(shè)計(jì)(7) 存儲(chǔ)對(duì)象存儲(chǔ)對(duì)象 通常的作法是,每個(gè)對(duì)象將自己傳送給數(shù)據(jù)管理通常的作法是,每
53、個(gè)對(duì)象將自己傳送給數(shù)據(jù)管理部分,讓數(shù)據(jù)管理部分來(lái)存儲(chǔ)對(duì)象本身。部分,讓數(shù)據(jù)管理部分來(lái)存儲(chǔ)對(duì)象本身。10.5 人機(jī)交互部分的設(shè)計(jì) 用戶界面設(shè)計(jì)步驟用戶界面設(shè)計(jì)步驟 (1) (1) 從系統(tǒng)的輸入、輸出及與用戶的交互中獲得信息,定義從系統(tǒng)的輸入、輸出及與用戶的交互中獲得信息,定義界面對(duì)象和行為(操作)。界面對(duì)象和行為(操作)。(2) (2) 定義那些導(dǎo)致用戶界面狀態(tài)發(fā)生變化的事件,對(duì)事件建定義那些導(dǎo)致用戶界面狀態(tài)發(fā)生變化的事件,對(duì)事件建模。模。(3) (3) 描述最終向用戶展示的每一個(gè)界面的狀態(tài),。描述最終向用戶展示的每一個(gè)界面的狀態(tài),。(4) (4) 簡(jiǎn)要說(shuō)明用戶如何從界面提供的界面信息來(lái)解釋系統(tǒng)
54、狀簡(jiǎn)要說(shuō)明用戶如何從界面提供的界面信息來(lái)解釋系統(tǒng)狀態(tài)。態(tài)。WebWeb應(yīng)用系統(tǒng)的界面設(shè)計(jì)應(yīng)用系統(tǒng)的界面設(shè)計(jì) 界面設(shè)計(jì)目標(biāo)界面設(shè)計(jì)目標(biāo) (1) (1) 簡(jiǎn)單性:盡量做到適度和簡(jiǎn)單,不要在頁(yè)面上提供太多簡(jiǎn)單性:盡量做到適度和簡(jiǎn)單,不要在頁(yè)面上提供太多的東西。的東西。(2) (2) 一致性:這一設(shè)計(jì)目標(biāo)幾乎適用于設(shè)計(jì)模型的每一個(gè)元一致性:這一設(shè)計(jì)目標(biāo)幾乎適用于設(shè)計(jì)模型的每一個(gè)元素。素。 (3) (3) 確定性:確定性:WebWeb應(yīng)用系統(tǒng)的美學(xué)、界面和導(dǎo)航設(shè)計(jì)必須與應(yīng)用系統(tǒng)的美學(xué)、界面和導(dǎo)航設(shè)計(jì)必須與將要構(gòu)造的應(yīng)用系統(tǒng)所處的領(lǐng)域保持一致。將要構(gòu)造的應(yīng)用系統(tǒng)所處的領(lǐng)域保持一致。 (4) (4) 健壯性
55、:在已經(jīng)建立的確定性的基礎(chǔ)上,健壯性:在已經(jīng)建立的確定性的基礎(chǔ)上,WebWeb應(yīng)用系統(tǒng)應(yīng)用系統(tǒng)通常會(huì)給用戶明確的通常會(huì)給用戶明確的“承諾承諾”。 WebWeb應(yīng)用系統(tǒng)的界面設(shè)計(jì)應(yīng)用系統(tǒng)的界面設(shè)計(jì) 界面設(shè)計(jì)目標(biāo)界面設(shè)計(jì)目標(biāo) (5) (5) 導(dǎo)航性:我們已經(jīng)在前面提及了導(dǎo)航應(yīng)該簡(jiǎn)單和一致,導(dǎo)航性:我們已經(jīng)在前面提及了導(dǎo)航應(yīng)該簡(jiǎn)單和一致,也應(yīng)該以直觀的和可預(yù)測(cè)的方式來(lái)設(shè)計(jì)。也就是說(shuō),用戶也應(yīng)該以直觀的和可預(yù)測(cè)的方式來(lái)設(shè)計(jì)。也就是說(shuō),用戶不必搜索導(dǎo)航鏈接和幫助就知道如何使用不必搜索導(dǎo)航鏈接和幫助就知道如何使用WebWeb應(yīng)用系統(tǒng)。應(yīng)用系統(tǒng)。(6) (6) 視覺吸引:在所有類型的軟件中,視覺吸引:在所有
56、類型的軟件中,WebWeb應(yīng)用系統(tǒng)毫無(wú)疑應(yīng)用系統(tǒng)毫無(wú)疑問是最具有視覺效果的、最生動(dòng)的、也是最具有審美感的。問是最具有視覺效果的、最生動(dòng)的、也是最具有審美感的。 (7) (7) 兼容性:兼容性:WebWeb應(yīng)用系統(tǒng)會(huì)應(yīng)用于不同的環(huán)境應(yīng)用系統(tǒng)會(huì)應(yīng)用于不同的環(huán)境( (例如,不同例如,不同的硬件、的硬件、InternetInternet連接類型、操作系統(tǒng)、瀏覽器連接類型、操作系統(tǒng)、瀏覽器) ),并且,并且必須互相兼容。必須互相兼容。WebWeb應(yīng)用系統(tǒng)的界面設(shè)計(jì)應(yīng)用系統(tǒng)的界面設(shè)計(jì) 界面設(shè)計(jì)工作流界面設(shè)計(jì)工作流 (1) (1) 回顧那些在分析模型中的信息,并根據(jù)需要進(jìn)行優(yōu)化。回顧那些在分析模型中的信息,
57、并根據(jù)需要進(jìn)行優(yōu)化。(2) (2) 開發(fā)開發(fā)WebWeb應(yīng)用系統(tǒng)界面布局的草圖。應(yīng)用系統(tǒng)界面布局的草圖。 (3) (3) 將用戶目標(biāo)映射到特定的界面行為。將用戶目標(biāo)映射到特定的界面行為。 (4) (4) 定義與每個(gè)行為相關(guān)的一組用戶任務(wù)。定義與每個(gè)行為相關(guān)的一組用戶任務(wù)。 (5) (5) 為每個(gè)界面行為設(shè)計(jì)情節(jié)串聯(lián)圖板屏像。為每個(gè)界面行為設(shè)計(jì)情節(jié)串聯(lián)圖板屏像。(6) (6) 利用從美學(xué)設(shè)計(jì)中的輸入來(lái)優(yōu)化界面布局和情節(jié)串聯(lián)圖利用從美學(xué)設(shè)計(jì)中的輸入來(lái)優(yōu)化界面布局和情節(jié)串聯(lián)圖板。板。 WebWeb應(yīng)用系統(tǒng)的界面設(shè)計(jì)應(yīng)用系統(tǒng)的界面設(shè)計(jì) 界面設(shè)計(jì)工作流界面設(shè)計(jì)工作流 (7) (7) 明確實(shí)現(xiàn)界面功能的界
58、面對(duì)象。明確實(shí)現(xiàn)界面功能的界面對(duì)象。 (8) (8) 開發(fā)用戶與界面交互的過程表示。開發(fā)用戶與界面交互的過程表示。 (9) (9) 開發(fā)界面的行為表示法。開發(fā)界面的行為表示法。 (10) (10) 描述每種狀態(tài)的界面布局。描述每種狀態(tài)的界面布局。 (11) (11) 優(yōu)化和評(píng)審界面設(shè)計(jì)模型。優(yōu)化和評(píng)審界面設(shè)計(jì)模型。 10.6 任務(wù)管理部分的設(shè)計(jì) 任務(wù)管理主要包括任務(wù)的選擇和調(diào)整。常見的任任務(wù)管理主要包括任務(wù)的選擇和調(diào)整。常見的任務(wù)有事件驅(qū)動(dòng)型任務(wù)、時(shí)鐘驅(qū)動(dòng)型任務(wù)、優(yōu)先任務(wù)有事件驅(qū)動(dòng)型任務(wù)、時(shí)鐘驅(qū)動(dòng)型任務(wù)、優(yōu)先任務(wù)、關(guān)鍵任務(wù)和協(xié)調(diào)任務(wù)等。務(wù)、關(guān)鍵任務(wù)和協(xié)調(diào)任務(wù)等。 設(shè)計(jì)任務(wù)管理子系統(tǒng)時(shí),需要確定
59、各類任務(wù),并設(shè)計(jì)任務(wù)管理子系統(tǒng)時(shí),需要確定各類任務(wù),并將任務(wù)分配給適當(dāng)?shù)挠布蜍浖?zhí)行。將任務(wù)分配給適當(dāng)?shù)挠布蜍浖?zhí)行。10.6 任務(wù)管理部分的設(shè)計(jì)1. 識(shí)別事件驅(qū)動(dòng)任務(wù)識(shí)別事件驅(qū)動(dòng)任務(wù)有些任務(wù)是事件驅(qū)動(dòng)的,這些任務(wù)可能是負(fù)責(zé)與設(shè)備、其有些任務(wù)是事件驅(qū)動(dòng)的,這些任務(wù)可能是負(fù)責(zé)與設(shè)備、其他處理機(jī)或其他系統(tǒng)通信的。他處理機(jī)或其他系統(tǒng)通信的。這類任務(wù)可以設(shè)計(jì)成由一個(gè)事件來(lái)觸發(fā),該事件常常針對(duì)這類任務(wù)可以設(shè)計(jì)成由一個(gè)事件來(lái)觸發(fā),該事件常常針對(duì)一些數(shù)據(jù)的到達(dá)發(fā)出信號(hào)。一些數(shù)據(jù)的到達(dá)發(fā)出信號(hào)。數(shù)據(jù)可能來(lái)自數(shù)據(jù)行或者來(lái)自另一個(gè)任務(wù)寫入的數(shù)據(jù)緩沖數(shù)據(jù)可能來(lái)自數(shù)據(jù)行或者來(lái)自另一個(gè)任務(wù)寫入的數(shù)據(jù)緩沖區(qū)。區(qū)。
60、10.6 任務(wù)管理部分的設(shè)計(jì)(1) 識(shí)別事件驅(qū)動(dòng)任務(wù)識(shí)別事件驅(qū)動(dòng)任務(wù)當(dāng)系統(tǒng)運(yùn)行時(shí),這類任務(wù)的工作過程如下:當(dāng)系統(tǒng)運(yùn)行時(shí),這類任務(wù)的工作過程如下:任務(wù)處于睡眠狀態(tài),等待來(lái)自數(shù)據(jù)行或其他數(shù)據(jù)源的中斷;任務(wù)處于睡眠狀態(tài),等待來(lái)自數(shù)據(jù)行或其他數(shù)據(jù)源的中斷;一旦接收到中斷就喚醒該任務(wù),接收數(shù)據(jù)并將數(shù)據(jù)放入內(nèi)一旦接收到中斷就喚醒該任務(wù),接收數(shù)據(jù)并將數(shù)據(jù)放入內(nèi)存緩沖區(qū)或其他目的地,通知需要知道這件事的對(duì)象,然存緩沖區(qū)或其他目的地,通知需要知道這件事的對(duì)象,然后該任務(wù)又回到睡眠狀態(tài)。后該任務(wù)又回到睡眠狀態(tài)。 10.6 任務(wù)管理部分的設(shè)計(jì)(2) 識(shí)別時(shí)鐘驅(qū)動(dòng)任務(wù)識(shí)別時(shí)鐘驅(qū)動(dòng)任務(wù)以固定的時(shí)間間隔激發(fā)這種事件,以執(zhí)行某些處理。某些以固定的時(shí)間間隔激發(fā)
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030可注射藥物行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025-2030反應(yīng)性熱熔膠行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025-2030壓電定位器行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025-2030衛(wèi)生紙行業(yè)深度分析及發(fā)展趨勢(shì)與投資前景研究報(bào)告
- 2025-2030單索運(yùn)動(dòng)滑輪行業(yè)市場(chǎng)現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評(píng)估規(guī)劃分析研究報(bào)告
- 小動(dòng)物行為與訓(xùn)練試題及答案
- 電商活動(dòng)頁(yè)面設(shè)計(jì)的方法試題及答案
- 2024年度北京市護(hù)師類之兒科護(hù)理主管護(hù)師題庫(kù)附答案(典型題)
- 確保成功:三支一扶試題及答案分享
- 突破難關(guān):2024育嬰師試題及答案
- 兒童發(fā)展問題的咨詢與輔導(dǎo)-案例1-5-國(guó)開-參考資料
- DG-TJ 08-2336-2020 綠道建設(shè)技術(shù)標(biāo)準(zhǔn)
- 安全生產(chǎn)法律法規(guī)匯編(2025版)
- DB64∕1539-2020 復(fù)合保溫板結(jié)構(gòu)一體化系統(tǒng)應(yīng)用技術(shù)規(guī)程
- DIN1783厚度在0.35mm以上冷軋的鋁及鋁塑性合金帶材和板材、尺寸
- 橋門式起重機(jī)司機(jī)培訓(xùn)教材課件
- 現(xiàn)場(chǎng)總線技術(shù)03 PROFIBUS總線
- 義務(wù)教育(英語(yǔ))新課程標(biāo)準(zhǔn)(2022年修訂版)
- 混合痔病歷模板
- “馮茹爾”杯2022年江蘇省“化學(xué)與可持續(xù)發(fā)展”化學(xué)活動(dòng)周高中化學(xué)競(jìng)賽試題
- 員工食堂5月份菜譜
評(píng)論
0/150
提交評(píng)論