軟件設(shè)計(jì)與體系結(jié)構(gòu)練習(xí)題_第1頁
軟件設(shè)計(jì)與體系結(jié)構(gòu)練習(xí)題_第2頁
軟件設(shè)計(jì)與體系結(jié)構(gòu)練習(xí)題_第3頁
軟件設(shè)計(jì)與體系結(jié)構(gòu)練習(xí)題_第4頁
軟件設(shè)計(jì)與體系結(jié)構(gòu)練習(xí)題_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、軟件設(shè)計(jì)與體系結(jié)構(gòu)復(fù)習(xí)一、 填空題(一) Chapter 11.軟件設(shè)計(jì)模式通常包含4個(gè)基本要素:模式名稱、問題、解決方案以及效果。2.軟件設(shè)計(jì)模式可以分為三個(gè)層次:架構(gòu)模式、設(shè)計(jì)模式、習(xí)慣用法。3.軟件設(shè)計(jì)模式是對(duì)軟件設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),是對(duì)軟件設(shè)計(jì)中特定環(huán)境下反復(fù)出現(xiàn)的設(shè)計(jì)問題的、經(jīng)過驗(yàn)證的、成功解決方案的描述。(二) chapter 51.早在1968年,計(jì)算機(jī)領(lǐng)域的大師Dijstra指出:項(xiàng)目規(guī)模越大,其整體架構(gòu)就越重要。2. 軟件體系結(jié)構(gòu)的三個(gè)基本要素是:構(gòu)件、連接件、約束3. 對(duì)軟件質(zhì)量的關(guān)注正是軟件架構(gòu)師與一般的軟件設(shè)計(jì)師的不同之處,一般的軟件設(shè)計(jì)師主要關(guān)注軟件功能的設(shè)計(jì),并要遵循架

2、構(gòu)師給出的設(shè)計(jì)準(zhǔn)則。4. IEEE 1471-2000標(biāo)準(zhǔn)定義軟件體系結(jié)構(gòu)是“系統(tǒng)的基本組織結(jié)構(gòu),包括系統(tǒng)構(gòu)成要素、這些構(gòu)成要素相互之間以及運(yùn)行環(huán)境之間的關(guān)系,還包括系統(tǒng)設(shè)計(jì)及演化時(shí)應(yīng)遵循的原則”。(三) chapter 21.創(chuàng)建型軟件設(shè)計(jì)模式是解決_對(duì)象創(chuàng)建機(jī)制_的設(shè)計(jì)模式。2.創(chuàng)建型軟件設(shè)計(jì)模式的兩個(gè)主導(dǎo)思想:封裝了系統(tǒng)使用的具體類的知識(shí),隱藏這些具體類的實(shí)例被創(chuàng)建與結(jié)合的細(xì)節(jié)。3.簡單工廠方法模式的特點(diǎn)是僅僅有一個(gè)具體的創(chuàng)建者類,并且在此類中包含一個(gè)_靜態(tài)工廠_方法。4.生成器模式是一步一步創(chuàng)建一個(gè)復(fù)雜的對(duì)象,允許用戶通過制定復(fù)雜對(duì)象的類型和內(nèi)容就可以構(gòu)建它們,用戶不知道內(nèi)部的具體構(gòu)建

3、細(xì)節(jié)5. 單例模式是指確保一個(gè)僅有一個(gè)唯一的實(shí)例,并提供一個(gè)全局的訪問點(diǎn)。6. 在單例模式中,為了防止客戶程序利用構(gòu)造方法創(chuàng)建多個(gè)對(duì)象,要將構(gòu)造方法聲明為private(或私有)類型。(四) chapter 31. 結(jié)構(gòu)型軟件設(shè)計(jì)模式的主要目的是將不同的類和對(duì)象組合在一起,形成更大或者更復(fù)雜的結(jié)構(gòu)體。2. 組合模式指將對(duì)象組合成樹形結(jié)構(gòu),以表示“部分-整體”的層次結(jié)構(gòu)。該模式使得對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。3.適配器模式可以分為兩種:類適配器和對(duì)象適配器4. 類適配器模式通過繼承的方式改變已經(jīng)存在的接口而形成新的接口,使之適合客戶類調(diào)用的需要;對(duì)象適配器模式使用調(diào)用或者聚合的方式選擇

4、調(diào)用多個(gè)類中的方法,形成新的接口。5. 適配器模式與外觀模式都是為了設(shè)計(jì)新的接口而存在。它們的區(qū)別在于:適配器模式是轉(zhuǎn)換接口,外觀模式是簡化接口。(五) chapter 41. 行為型軟件設(shè)計(jì)模式解釋對(duì)象之間是怎樣進(jìn)行交互的。2. 迭代器模式能夠提供一種方法按照順序訪問一個(gè)聚合對(duì)象中的所有元素,而又不需要暴露該對(duì)象的內(nèi)部表示。3. 中介者模式的要點(diǎn)是將所有對(duì)象之間的交互細(xì)節(jié)抽象到一個(gè)獨(dú)立的類中,這個(gè)類叫做中介者類。4. 訪問者模式封裝了分布于多個(gè)類之間的行為。(六) Chapter 61. 利用調(diào)用-返回風(fēng)格軟件體系結(jié)構(gòu)設(shè)計(jì)的軟件系統(tǒng)使用的是_分而治之_策略,其主要思想是將一個(gè)復(fù)雜的大系統(tǒng)分解

5、為一些子系統(tǒng),以便降低復(fù)雜度,并且增加可修改性。2. 在管道-過濾器軟件體系結(jié)構(gòu)中,每個(gè)組件都有一組輸入和輸出,組件讀入數(shù)據(jù)流,經(jīng)過數(shù)據(jù)處理,然后產(chǎn)生輸出數(shù)據(jù)流。3. 順序批處理軟件體系結(jié)構(gòu)是數(shù)據(jù)流風(fēng)格體系結(jié)構(gòu)的一個(gè)子類型。在該系統(tǒng)種,組件為獨(dú)立的程序,并且這些組件按照先后順序處理,即只有當(dāng)一個(gè)組件運(yùn)行徹底結(jié)束以后,下一個(gè)組件才能開始執(zhí)行。4. 主程序-子程序軟件體系結(jié)構(gòu)特別關(guān)注功能的實(shí)現(xiàn)。面向?qū)ο筌浖w系結(jié)構(gòu)特別關(guān)注數(shù)據(jù)與功能的封裝。二、 簡答題(一) Chapter11. 軟件體系結(jié)構(gòu)為什么重要?答:軟件體系結(jié)構(gòu): 是軟件相關(guān)人員進(jìn)行交流的手段;(2分) 是一種高層次的設(shè)計(jì)復(fù)用手段;(2分

6、) 是早期關(guān)鍵設(shè)計(jì)決策的體現(xiàn)。(1分)2. 軟件體系結(jié)構(gòu)與軟件框架的區(qū)別?答:呈現(xiàn)形式不同:體系結(jié)構(gòu)的呈現(xiàn)形式是一個(gè)設(shè)計(jì)規(guī)約,而框架則是程序代碼 。(2分)目的不同:體系結(jié)構(gòu)的首要目的大多是指導(dǎo)一個(gè)軟件系統(tǒng)的實(shí)施與開發(fā);而框架的首要目的是為復(fù)用因此,一個(gè)框架可有其體系結(jié)構(gòu),用于指導(dǎo)該框架的開發(fā),反之不然(3分)3. 解釋開閉原則、Liskov替換原則、依賴倒置原則答:開閉原則:構(gòu)件應(yīng)該對(duì)擴(kuò)展具有開放性,對(duì)修改具有封閉性。(2分)Liskov替換原則:子類可以替換它們的父類。(2分)依賴倒置原則:依賴于抽象,而非具體實(shí)現(xiàn)。(1分)(二) chapter24. 說明工廠方法、簡單工廠模式

7、、抽象工廠模式三個(gè)模式的主要區(qū)別。答:簡單工廠模式只有一個(gè)工廠類,該工廠類的靜態(tài)工廠方法負(fù)責(zé)所有產(chǎn)品的創(chuàng)建。(1分)工廠方法模式中,一個(gè)產(chǎn)品類層次對(duì)應(yīng)一個(gè)工廠類層次,每個(gè)具體工廠負(fù)責(zé)創(chuàng)建一個(gè)具體的產(chǎn)品。(2分)抽象工廠模式中,一個(gè)工廠類層次對(duì)應(yīng)多個(gè)產(chǎn)品類層次,每個(gè)具體工廠負(fù)責(zé)一個(gè)產(chǎn)品簇中產(chǎn)品的創(chuàng)建。(2分)5. 實(shí)現(xiàn)單例模式的三個(gè)關(guān)鍵要點(diǎn)是什么?答:將構(gòu)造方法私有化;(1分)定義一個(gè)靜態(tài)實(shí)例;(2分)提供一個(gè)可以返回靜態(tài)實(shí)例的靜態(tài)方法。(2分)6. 簡述生成器模式與抽象工廠模式的區(qū)別。答:前者按照步驟創(chuàng)建一個(gè)復(fù)雜的對(duì)象,而后者強(qiáng)調(diào)一類產(chǎn)品對(duì)象,創(chuàng)建一個(gè)產(chǎn)品族中的某個(gè)產(chǎn)品對(duì)象(簡單或復(fù)雜)。(3

8、分)前者將所建造的產(chǎn)品(通常建造一個(gè)復(fù)合體)最后一次性返回,而不是一點(diǎn)一點(diǎn)返回,而抽象工廠所創(chuàng)建的產(chǎn)品對(duì)象立即被返回。(2分)(三) Chapter37. 簡述外觀模式與適配器模式的區(qū)別?答:外觀模式簡化接口是為了更好地使用某個(gè)類庫適配器模式轉(zhuǎn)換接口的目的是將一個(gè)不適合使用的接口轉(zhuǎn)換為可以被使用的接口,或者將一些接口不同但功能相同或相近的接口加以轉(zhuǎn)換,以便統(tǒng)一使用。8. 簡述結(jié)構(gòu)型模式的分類。答:分為兩類:結(jié)構(gòu)型類模式:關(guān)心類的組合,使用繼承來組合接口或類,提供了類之間的關(guān)聯(lián)方式。(2分)結(jié)構(gòu)型對(duì)象模式:關(guān)心類和對(duì)象的組合,描述了如何對(duì)一些對(duì)象進(jìn)行組合,從而實(shí)現(xiàn)新功能的一些方法。具體來說,通過

9、關(guān)聯(lián)關(guān)系,可以在一個(gè)類中定義另一個(gè)類的對(duì)象,然后通過該對(duì)象調(diào)用其方法。(3分)(四) Chapter 49. 簡述迭代器模式的主要功能?答:提供對(duì)聚合對(duì)象的迭代訪問:以不同的方式遍歷聚合對(duì)象,如向前、向后對(duì)同一聚合同時(shí)進(jìn)行多個(gè)遍歷以不同的遍歷策略遍歷聚合多態(tài)迭代:為不同的聚合結(jié)構(gòu)提供統(tǒng)一的迭代接口,即,通過一個(gè)迭代接口訪問不同的聚合結(jié)構(gòu)。10. 簡述訪問者模式中形成的回調(diào)訪問通路?答:visit()與accept()方法構(gòu)成一個(gè)調(diào)用通路。(1分)visit(X):訪問者類告知具體元素X類,我要訪問你,即調(diào)用它的方法。(2分)accept(Visitor):具體元素X類告知Visitor,我接受

10、你的訪問。Visitor訪問具體元素X類的目的是什么,具體元素X類不管。(2分)11. 策略模式和狀態(tài)模式的區(qū)別。答:策略模式用來處理一組具有相同目的但是實(shí)現(xiàn)方法不同的算法,這些算法方案之間一般來說沒有狀態(tài)變遷。(2分)狀態(tài)模式則有所不同,它實(shí)現(xiàn)的一個(gè)概念可以叫做動(dòng)態(tài)繼承,也就是繼承的子類都可以發(fā)生變化。狀態(tài)的變化可以由一個(gè)狀態(tài)遷移圖表示。(2分)一般來說,實(shí)現(xiàn)狀態(tài)模式更復(fù)雜一點(diǎn),用戶需要仔細(xì)考慮由誰來負(fù)責(zé)狀態(tài)轉(zhuǎn)換問題,是由Context類負(fù)責(zé)還是由狀態(tài)類的超類負(fù)責(zé),還是由狀態(tài)類的子類負(fù)責(zé)。(2分)(五) Chapter 612. 簡述面向?qū)ο篌w系結(jié)構(gòu),并畫出面向?qū)ο篌w系結(jié)構(gòu)圖?答:面向?qū)ο篌w

11、系結(jié)構(gòu)中,把系統(tǒng)看作是由一些對(duì)象的集合組成(而不是由函數(shù)或方法組成),消息從一個(gè)對(duì)象發(fā)送到另外一個(gè)對(duì)象。每個(gè)對(duì)象都有其相關(guān)功能。一個(gè)對(duì)象是數(shù)據(jù)以對(duì)數(shù)據(jù)操作的封裝體,外界通過接口與其進(jìn)行交互。(3分)面向?qū)ο篌w系結(jié)構(gòu)圖如下:(2分,下面這幅圖不需要一模一樣,表達(dá)清楚意思即可)13. 簡述主程序-子程序軟件體系結(jié)構(gòu)與面向?qū)ο篌w系結(jié)構(gòu)的不同之處。答:在設(shè)計(jì)思想上的區(qū)別:主程序-子程序關(guān)注功能的實(shí)現(xiàn),即系統(tǒng)是由一個(gè)個(gè)過程構(gòu)成。面向?qū)ο篌w系結(jié)構(gòu)關(guān)注數(shù)據(jù)與功能的封裝(對(duì)象)。系統(tǒng)是由一系列對(duì)象構(gòu)成,這些對(duì)象按一定規(guī)則通信,完成具體功能。(3分)在系統(tǒng)分析設(shè)計(jì)方面的區(qū)別。前者采用結(jié)構(gòu)化分析設(shè)計(jì)方法(如數(shù)據(jù)流

12、圖、面向數(shù)據(jù)流的設(shè)計(jì)),后者采用面向?qū)ο蠓治鲈O(shè)計(jì),使用用例圖、類圖、時(shí)序圖等模型。(2分)14. 畫出MVC體系結(jié)構(gòu)的一般形式的結(jié)構(gòu)類圖。15. 畫出應(yīng)用了觀察者機(jī)制的MVC體系結(jié)構(gòu)設(shè)計(jì)類圖。三、 設(shè)計(jì)題(一) chapter 2創(chuàng)建型設(shè)計(jì)模式1. 一個(gè)房屋銷售查詢系統(tǒng),以便查詢不同類型的房屋的介紹、價(jià)格和地址等。為簡單起見,只考慮兩種類型的房屋:別墅(House)和公寓(Condo),并假設(shè)每種房屋類型都包含:豪華(Super)、中等(Medium)兩個(gè)等級(jí)。要求能夠查看房屋信息和房屋價(jià)格,請(qǐng)使用創(chuàng)建型設(shè)計(jì)模式解決該問題,畫出設(shè)計(jì)類圖。答:參考圖 1圖 1 抽象工廠模式參考圖2. 假設(shè)有一個(gè)

13、web托管公司,該公司在Windows和UNIX平臺(tái)上托管服務(wù)。該Web托管公司在這兩種平臺(tái)上提供三種不同類型的托管包:基本(Basic)、高級(jí)(Senior)和更高級(jí)(Super)。使用“抽象工廠”模式設(shè)計(jì)一個(gè)應(yīng)用,查詢?cè)撏泄芄咎峁┑牟煌愋偷耐泄馨δ?,畫出設(shè)計(jì)類圖。答:參考Error! Reference source not found.Error! Reference source not found.圖 2 抽象工廠模式解決win、Unix服務(wù)創(chuàng)建問題3. 生成器模式可以用于描述肯德基KFC如何創(chuàng)建套餐:套餐是一個(gè)復(fù)雜對(duì)象,它一般包含主食(如漢堡、牛肉飯等)、配餐(如新奧爾良烤翅

14、、香辣雞翅、吮指原味雞等)和飲料(如果汁、可樂等)等三個(gè)組成部分,不同的套餐有不同的組成部分,而KFC的服務(wù)員可以根據(jù)顧客的要求,一步一步裝配這些組成部分,構(gòu)造一份完整的套餐,然后返回給顧客。套餐假設(shè)目前有如下幾個(gè)套餐:午餐套餐(Lunch Suit)、晚餐套餐(Supper Suit)、豪華套餐(Luxury Suit)。請(qǐng)用生成器模式設(shè)計(jì)該應(yīng)用,畫出其設(shè)計(jì)類圖。答:參見圖 3圖 3 生成器模式KFC套餐構(gòu)造4. 下圖所示設(shè)計(jì)類圖是關(guān)于游戲軟件的設(shè)計(jì)。在該設(shè)計(jì)中,SlowGameFactory類負(fù)責(zé)創(chuàng)建SlowFighter對(duì)象與SlowMonster對(duì)象,并且將創(chuàng)建完的對(duì)象以其超類類型返回

15、給ClientGUI對(duì)象。然后,ClientGUI對(duì)象將操縱SlowFighter對(duì)象與SlowMonster對(duì)象,使得它們互相打斗。(1) 上述設(shè)計(jì)使用了什么設(shè)計(jì)模式?抽象工廠(2) 請(qǐng)?jiān)谝陨显O(shè)計(jì)中添加SuperFighter和SuperMonster,SuperFighter與SuperMonster是對(duì)應(yīng)的,請(qǐng)繪制新的設(shè)計(jì)類圖。修正一下該答案5. 某公司要設(shè)計(jì)一個(gè)房屋選購系統(tǒng),系統(tǒng)內(nèi)的房屋分為三種類型:經(jīng)濟(jì)型(Economic House)、普通型(Normal House)與豪華型(Luxury House)。不同房型的區(qū)別體現(xiàn)在面積大?。ˋrea)以及臥室(Bedroom)、衛(wèi)生間(

16、Bathroom)、車庫(Garage)、花園(Garden)、游泳池(Swimming Pool)的數(shù)量上。請(qǐng)用生成器模式設(shè)計(jì)該選購系統(tǒng),畫出設(shè)計(jì)類圖。(二) chapter 3 結(jié)構(gòu)型設(shè)計(jì)模式6. 使用組合模式設(shè)計(jì)一款使用不同國家的語言做為問候語的軟件,需要一個(gè)用于用戶輸入的用戶圖形界面。在該用戶圖形界面上,有各個(gè)主要國家的列表。用戶可以選擇一個(gè)國家,然后,單擊產(chǎn)生問候語的按鈕,程序?qū)@示該國家見面時(shí)所使用的問候語。使用安全形式設(shè)計(jì),畫出設(shè)計(jì)類圖。使用透明形式設(shè)計(jì),畫出設(shè)計(jì)類圖。答:參見圖 4 參見圖 5圖 4 組合模式設(shè)計(jì)-安全形式圖 5 組合模式設(shè)計(jì)-透明模式7. 下圖所示為一個(gè)整數(shù)排

17、序的Java程序設(shè)計(jì)類圖。該設(shè)計(jì)使用類適配器模式。問題:(1) 請(qǐng)說明使用該設(shè)計(jì)有什么問題?Java是單繼承語言,不支持多繼承(2) 畫出新的設(shè)計(jì)類圖。答:參見圖 6圖 6 對(duì)象適配器解決多繼承問題8. 考察一個(gè)電源總開關(guān)的例子。為了使用方便,一個(gè)電源總開關(guān)可以控制四盞燈、一個(gè)風(fēng)扇、一臺(tái)空調(diào)和一臺(tái)電視機(jī)的啟動(dòng)和關(guān)閉。通過該電源總開關(guān)可以同時(shí)控制上述所有電器設(shè)備。請(qǐng)使用外觀模式設(shè)計(jì)該系統(tǒng),畫出設(shè)計(jì)類圖。答:參見圖 7圖 7 電源開關(guān)的例子9. 美國和加拿大的郵政編碼有不同的格式,美國的郵政編碼由5位阿拉伯?dāng)?shù)字組成加破折號(hào),再加4位阿拉伯?dāng)?shù)字組成,即美國的郵政編碼形狀為ddddd-dddd,其中d

18、是介于0與9之間的整數(shù)。加拿大的郵政編碼是由6位字母與數(shù)字混合組成,格式為:cdc dcd,其中第1,3,5位是英語字母,第2,4,6位是阿拉伯?dāng)?shù)字,如:M4B 1G5。假設(shè)有一個(gè)網(wǎng)上貿(mào)易軟件,原來的客戶是美國公民,但是,隨著業(yè)務(wù)的擴(kuò)展,將要允許加拿大公民使用該系統(tǒng)。假如已經(jīng)有兩個(gè)經(jīng)過充分測試的類,一個(gè)是USZipCode,另外一個(gè)是CAPostalCode。這兩個(gè)類中分別有一個(gè)方法,isValidZipCode(zip:String), 和isValidCaPostalCode(pcode: String),用于確認(rèn)用戶輸入的郵政編碼是否正確。雖然這兩個(gè)接口(方法)的參數(shù)都是String類型

19、的,但是方法名字是不同的,而且,它們的具體的確認(rèn)算法是不同的?,F(xiàn)在要寫一個(gè)網(wǎng)上郵政編碼確認(rèn)程序,該程序使用一個(gè)統(tǒng)一的接口,允許客戶程序使用該接口的時(shí)候,既可以使用美國的郵政編碼又可以使用加拿大的郵政編碼。請(qǐng)使用適配器模式進(jìn)行設(shè)計(jì),畫出設(shè)計(jì)類圖。10. 假如公司需要設(shè)計(jì)一個(gè)特工信息系統(tǒng)。特工的信息被加密并且被存入文本文檔或者數(shù)據(jù)庫。有三種方法加密特工的名字和代碼,該加密名字和代碼的任務(wù)由三個(gè)類完成,這三個(gè)類是EncryptedInfo1,EncryptedInfo2,EncryptedInfo3。請(qǐng)使用橋接模式設(shè)計(jì)該特工信息保密系統(tǒng),畫出設(shè)計(jì)類圖。11. 現(xiàn)需要設(shè)計(jì)一個(gè)可以模擬各種動(dòng)物行為的機(jī)器

20、人。目前,在機(jī)器人中已定義了一系列方法:叫喊方法cry()、移動(dòng)方法move()。如果希望在不修改已有代碼的基礎(chǔ)上使得機(jī)器人能夠像狗一樣叫wang(),像狗一樣跑run(),使用適配器模式進(jìn)行設(shè)計(jì),繪制設(shè)計(jì)類圖。12. 設(shè)計(jì)一個(gè)飛行員信息管理系統(tǒng)。假設(shè)飛行員分為戰(zhàn)斗機(jī)飛行員和轟炸機(jī)飛行員;在性別上又分為男飛行員和女飛行員。請(qǐng)使用橋接模式進(jìn)行設(shè)計(jì),畫出設(shè)計(jì)類圖。13. 假設(shè)有一個(gè)設(shè)計(jì)類圖如下所示。此類圖中包含了幾個(gè)動(dòng)物類,Tiger、Dog和Cat,它們都包含各自的功能,三個(gè)類相互協(xié)作并緊密耦合,以便完成類似于動(dòng)物世界的游戲功能。請(qǐng)用中介者模式重新設(shè)計(jì),保持功能不變,畫出設(shè)計(jì)類圖??蓪pdat

21、eAll()方法修改為doGame(),在doGame()定義游戲規(guī)則。14. 針對(duì)如下已經(jīng)存在的某程序設(shè)計(jì)圖,使用橋接模式重新設(shè)計(jì)該程序,并畫出設(shè)計(jì)類圖15. 文件系統(tǒng)中的文件有不同類型,不同類型的文件其瀏覽方式有所區(qū)別,如文本文件和圖片文件、視頻文件的瀏覽方式就不相同。對(duì)文件夾的瀏覽實(shí)際上就是對(duì)其中所包含文件的瀏覽,而客戶端可以一致地對(duì)文件和文件夾進(jìn)行操作,無須關(guān)心它們的區(qū)別。請(qǐng)使用組合模式來模擬文件的瀏覽操作(display),畫出設(shè)計(jì)類圖。 (三) chapter 4 行為型設(shè)計(jì)模式16. 一個(gè)計(jì)算手機(jī)繳費(fèi)的軟件設(shè)計(jì)如下圖所示:類中的type變量代表不同的客戶群體,因此有不同的繳費(fèi)率。

22、因?yàn)閷?duì)應(yīng)于不同的客戶群體,有不同的優(yōu)惠收費(fèi)包,例如FamilyPackage、FriendPackage和FamerPackage。方法computeFare(String num, String type)需要經(jīng)常改變,原因是每個(gè)包都有不同的打折率,并且對(duì)于每個(gè)包計(jì)算費(fèi)用的算法是不同的。這說明在方法computeFare(String num, String type)中,存在許多條件語句。很明顯,本設(shè)計(jì)不符合開閉原則,請(qǐng)利用策略模式對(duì)以上的類進(jìn)行重新設(shè)計(jì),畫出設(shè)計(jì)類圖。答:17. 使用狀態(tài)模式設(shè)計(jì)軟件。在一個(gè)面向兒童的人/機(jī)對(duì)抗游戲中有兩個(gè)角色,mood_guy代表計(jì)算機(jī)游戲軟件,玩家為兒

23、童。玩家可以容易地影響mood_guy。mood_guy有三個(gè)狀態(tài):愉快、惱怒和瘋狂。當(dāng)它在愉快的狀態(tài)時(shí),它將唱歌;當(dāng)它在惱怒的狀態(tài)時(shí),它將告訴它的朋友,抱怨某事;當(dāng)它在瘋狂的狀態(tài)時(shí),它將故意損壞一些東西。mood_guy可以自動(dòng)改變心情狀態(tài):如果玩家忽略它超過20秒,無論處于何種狀態(tài),mood_guy將自動(dòng)進(jìn)入愉快狀態(tài)。mood_guy的狀態(tài)也可以由玩家的行為而改變:如果它處于愉快狀態(tài),玩家給它一個(gè)酸梨,則它進(jìn)入惱怒狀態(tài);如果它處于惱怒狀態(tài),玩家給它一個(gè)辣椒,它將進(jìn)入瘋狂狀態(tài);如果它處于瘋狂狀態(tài),玩家給它一個(gè)香蕉,它將進(jìn)入愉快狀態(tài)。要求使用狀態(tài)模式設(shè)計(jì)該問題,并且:(1)畫出狀態(tài)圖;(2)畫

24、出設(shè)計(jì)類圖,該類圖中應(yīng)該包含兩個(gè)方法:act( )和changeMood( )。18. 設(shè)計(jì)一個(gè)使用幾種排序算法對(duì)整數(shù)進(jìn)行排序的程序。該程序可以計(jì)算出每種排序算法的執(zhí)行時(shí)間,以便比較各種排序算法的速度。該程序可以支持插入排序(InsertionSort)、快速排序(QuickSort)、冒泡排序(BubbleSort)、堆排序(HeapSort)。請(qǐng)使用策略模式進(jìn)行設(shè)計(jì),畫出設(shè)計(jì)類圖。19. 利用狀態(tài)模式設(shè)計(jì)的Weather State的實(shí)例。在本例中,考慮天氣狀態(tài)。天氣狀態(tài)可以分為:晴天狀態(tài)(Sunny State),下雨?duì)顟B(tài)(Rainy State),刮風(fēng)狀態(tài)(Windy State),下

25、雪(Snowing State)。在晴天狀態(tài),陽光普照;在雨天狀態(tài)烏云密布,下雨不停;在刮風(fēng)狀態(tài),大風(fēng)刮得天昏地暗;在下雪狀態(tài),大雪紛飛。用狀態(tài)模式封裝天氣狀態(tài)。為了表達(dá)天有不測風(fēng)云的思想,假設(shè)天氣狀態(tài)是隨機(jī)改變的,即在四種狀態(tài)之間的切換是根本沒有規(guī)律可循的,因此,考慮在抽象類WeatherState中的方法changeState(Context cxt)的實(shí)現(xiàn)中,使用能產(chǎn)生隨機(jī)整數(shù)的Random類。因此,具體狀態(tài)的改變,由抽象類WeatherState負(fù)責(zé)實(shí)現(xiàn)。請(qǐng)采用常規(guī)的狀態(tài)模式進(jìn)行設(shè)計(jì),畫出設(shè)計(jì)類圖。Context-state: WeatherState+getState()+doAct

26、ion():voidstateSunnyState+action():String+changeState()+setState():StringWeatherState+createStateObj()+changeState(Context cxt ):void+setState():String+getCurrentState():String+action(): String-ctx: ContextWindyState+action(): String+changeState()+setState():StringRainyState+act(): String+changeStat

27、e()+setState():StringSnowingState  +act(): String+changeState()+setState():String20. 隨機(jī)生成一個(gè)整數(shù)矩陣,矩陣可以看做是聚合類型的數(shù)據(jù)。使用迭代器模式設(shè)計(jì),對(duì)該矩陣進(jìn)行不同的遍歷:(1)奇數(shù)遍歷(OddIterator),訪問并統(tǒng)計(jì)矩陣中的所有奇數(shù)。(2)偶數(shù)遍歷(EvenIterator),訪問并統(tǒng)計(jì)矩陣中的所有偶數(shù)。(3)斜對(duì)角線遍歷(DiagonalIterator), 按照斜對(duì)角線迭代遍歷矩陣。請(qǐng)應(yīng)用迭代器模式進(jìn)行設(shè)計(jì),畫出設(shè)計(jì)類圖。21. 室內(nèi)溫度控制軟件設(shè)計(jì)。室內(nèi)溫度控制需要具備窗戶、風(fēng)扇、空調(diào)的自動(dòng)開啟與關(guān)閉功能。因此,該應(yīng)用需要設(shè)計(jì)三個(gè)類,分別用于封裝窗戶、風(fēng)扇、空調(diào)。請(qǐng)利用命令模式設(shè)計(jì)該應(yīng)用,畫出設(shè)計(jì)類圖。22. 下圖所示是一個(gè)調(diào)用排序算法的設(shè)計(jì)圖。在實(shí)現(xiàn)時(shí),調(diào)用者Invoker通過條件判斷語句調(diào)用相應(yīng)的排序算法,調(diào)用者Invoker和接收者Receiver之間是緊耦合的。 請(qǐng)使用命令模式在Invoker與Receiver

溫馨提示

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