


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、軟件設(shè)計(jì)師 -29( 總分: 100.00 ,做題時(shí)間: 90 分鐘 )一、 試題一 ( 總題數(shù): 1,分?jǐn)?shù): 20.00)1. 閱讀下列說明和 C+代碼,將應(yīng)填入 _處的字句寫在下面。說明某咖啡店當(dāng)賣咖啡時(shí), 可以根據(jù)顧客的要求在其中加入各種配料,咖啡店會(huì)根據(jù)所加入的配料來計(jì)算費(fèi)用??Х鹊晁?yīng)的咖啡及配料的種類和價(jià)格如下表所示??Х葍r(jià)格/ 杯(¥) 配料價(jià)格/ 杯( ¥)蒸餾咖啡 (Espresso)25摩卡(Mocha) 10深度烘焙咖啡 (DarkRoast) 20奶泡(Whip) 8現(xiàn)采用裝飾器 (Decorator)模式來實(shí)現(xiàn)計(jì)算費(fèi)用的功能,得到如下圖所示的類圖。類圖C+代碼 #i
2、nclude iostream #include stringusing namespace std;const int ESPRESSO_PRICE=25;const int DRAKROAST_PRICE=20;const int MOCHA_PRICE=10;const int WHIP_PRICE=8;class Beverage/飲料_:string description;public:_()return description; _;class CondimentDecorator:public Beverage/配料protected:_;class Espresso:publ
3、ic Beverage / 蒸餾咖啡public:Espresso () description="Espresso" int cost()return ESPRESSO PRICE;class DarkRoast:public Beverage / 深度烘焙咖啡public:DarkRoast()description="DardRoast"int cost()return DRAKROAST_PRICE;class Mocha:public CondimentDecorator /摩卡public:Mocha(Beverage*beverage)th
4、is- beverage=beverage;string getDescription()return beverage-getDescription()+",Mocha"int cost() return MOCHA PRICE+beverage-cost(); ;class Whip:public CondimentDecorator /奶泡public:Whip(Beverage*beverage)this-beverage=beverage;string getDescription() return beverage-getDescription()+"
5、,Whip" int cost() return WHIP_PRICE+beverage-cost(); ;int main()Beverage*beverage=new DarkRoast();beverage=new Mocha_;beverage=new Whip_;cout beverage- getDescription() " ¥" beverage-cost() end1;return 0;編譯運(yùn)行上述程序,其輸出結(jié)果為:DarkRoast,Mocha,Whip,¥38(分?jǐn)?shù): 20.00 )_正確答案: ()解析: protected virtua
6、l string getDescription virtual int cost()=0Beverage*beverage beverage beverage 解析 由類圖可知,CondimentDecorator是 Beverage 的派生類, Mocha、 Whip 又是Beverage 是基類, Espresso 、DarkRoastCondimentDecorator的派生類。、第一處應(yīng)填入description的訪問控制類型, 可能為 private或 protecteddescriptiondescription。在 Beverage 的派生類 Espressoprotected如
7、果為 private,則在派生中不能使用。在基類中先后動(dòng)態(tài)建立了一個(gè)DarkRoast對象、 Mocha 對象和Whip 對象,調(diào)用初始化函數(shù),并輸出。在 Mocha 類和Whip 類中分別調(diào)用了基類的getDescription()cost()。二、 試題二 ( 總題數(shù): 1,分?jǐn)?shù): 20.00)2. 閱讀下列說明和 C+代碼,將應(yīng)填入 _處的字句寫在下面。說明某大型商場內(nèi)安裝了多個(gè)簡易的紙巾售賣機(jī),自動(dòng)售出售賣機(jī)的狀態(tài)如圖 1 所示。2 元錢一包的紙巾,且每次僅售出一包紙巾。紙巾圖 1紙巾售賣機(jī)狀態(tài)圖采用狀態(tài) (State) 模式來實(shí)現(xiàn)該紙巾售賣機(jī), 得到如圖 2 所示的類圖。其中類退幣、
8、出紙巾等方法接口。類 SoldState 、SoldOutState 、NoQuanerstateState 為抽象類,定義了投幣、和 HasQuanerState 分別對應(yīng)圖1 中紙巾售賣機(jī)的4 中狀態(tài):售出紙巾、紙巾售完、沒有投幣、有2 元錢。圖2 類圖C+代碼 #includeusing namespace std;/ 以下為類的定義部分class TissueMachine; /類的提前引用class Statepublic:virtual void insertQuarter()=0; /投幣virtual void ejectQuarter()=0; /退幣virtual void
9、 turnCrank()=0; /按下 " 出紙巾 " 按鈕virtual void dispense()=0; /出紙巾;/* 類 SoldOutState 、NoQuarterState、 HasQuarterState、SoldState的定義省略, 每個(gè)類中均定義了私有數(shù)據(jù)成員 TissueMachine*tissueMachine*/Class TissueMachineprivate:_*soldOutState,*noQuarterState,*hasQuarterState,*soldState,*state;int count; /紙巾數(shù)public:Ti
10、ssueMachine(int number);void setState(State*state);State*getHasQuarterState();State*getNoQuarterState();State*getSoldState();State*getSoldOutState();int getCount();/ 其余代碼省略;/ 以下為類的實(shí)現(xiàn)部分void NoQuarterState:insertQuarter()tissureMachine-setState_;void HasQuarterstate:ejectQuarter()tissureMachine-setsta
11、te(_);void SoldState:dispense()if(tissueMachine-getCount()0)tissureMachine-setState_;ElsetissureMachine-setState(_);/ 其余代碼省略StatetissueMachine- getHasQuaiterState()或 new HasQuarterStatetissueMachine- getNoQuarterState()或 new NoQuarterStatetissueMachine- getNoQuarterState()或 new NoQuarterStatetissueM
12、achine- getSoldOutState()或 new SoldOutState解析根據(jù)題意,本題使用的是狀態(tài)模式,判斷紙巾售賣機(jī)的狀態(tài),根據(jù)不同的狀態(tài)執(zhí)行不同的動(dòng)作。State定義了紙巾售賣機(jī)所對應(yīng)的一些狀態(tài),售出紙巾、紙巾售完等狀態(tài)。 類 SoldOutState 、NoQuarterState、HasQuarterState、SoldState 均有類 State派生而來。void insertQuarter()定義了一個(gè)“投幣”的方法:在沒有“2元錢”時(shí),客戶投幣的方法。tissureMachine.setState是改變紙巾售賣機(jī)的狀態(tài), 此時(shí),客戶已投入 2 元錢,故將此時(shí)的
13、狀態(tài)改為“有2 元錢”的狀態(tài),紙巾售賣機(jī)調(diào)用“有2 元錢”狀態(tài)的方法即可。void ejectQuarter()定義了一個(gè)“退幣”的方法:在有2 元錢的狀態(tài)下,用戶按下“退幣”按鈕,紙巾售賣機(jī)將此時(shí)的狀態(tài)改為“沒有投幣”狀態(tài),故直接調(diào)用getNoQuarterState() 即可。根據(jù)紙巾售賣機(jī)狀態(tài)圖可知, 當(dāng)售出紙巾, 并且紙巾數(shù)量仍大于O時(shí),將返回“沒有投幣”狀態(tài),同第 (3)小題的分析,此處應(yīng)調(diào)用getNoQualterState()。根據(jù)紙巾售賣機(jī)狀態(tài)圖可知,當(dāng)售出紙巾,并且紙巾數(shù)量等于0 時(shí),將返回“紙巾售完”狀態(tài),此處用了if else 判斷語句,當(dāng)紙巾數(shù)量仍大于0 時(shí),返回“沒有
14、投幣”狀態(tài),否則,紙巾數(shù)量一定等于0,本段程序第五空是else 下的一條語句,故此處是判斷count為 0 時(shí),紙巾售賣機(jī)的狀態(tài),顯然,應(yīng)調(diào)用getSoldOutState()。(分?jǐn)?shù): 20.00)_正確答案: ()解析: StatetissueMachine- getHasQuaiterState()或 new HasQuarterStatetissueMachine- getNoQuarterState()或 new NoQuarterStatetissueMachine- getNoQuarterState()或 new NoQuarterStatetissueMachine- get
15、SoldOutState()或 new SoldOutState 解析 根據(jù)題意,本題使用的是狀態(tài)模式,判斷紙巾售賣機(jī)的狀態(tài),根據(jù)不同的狀態(tài)執(zhí)行不同的動(dòng)作。State 定義了紙巾售賣機(jī)所對應(yīng)的一些狀態(tài),售出紙巾、紙巾售完等狀態(tài)。類SoldOutState 、NoQuarterState、 HasQuarterState 、SoldState 均有類State 派生而來。void insertQuarter()定義了一個(gè)“投幣”的方法:在沒有“2元錢”時(shí),客戶投幣的方法。tissureMachine.setState是改變紙巾售賣機(jī)的狀態(tài), 此時(shí),客戶已投入 2 元錢,故將此時(shí)的狀態(tài)改為“有2
16、元錢”的狀態(tài),紙巾售賣機(jī)調(diào)用“有2 元錢”狀態(tài)的方法即可。void ejectQuarter() 定義了一個(gè)“退幣”的方法:在有2 元錢的狀態(tài)下,用戶按下“退幣”按鈕,紙巾售賣機(jī)將此時(shí)的狀態(tài)改為“沒有投幣”狀態(tài),故直接調(diào)用getNoQuarterState() 即可。根據(jù)紙巾售賣機(jī)狀態(tài)圖可知,當(dāng)售出紙巾,并且紙巾數(shù)量仍大于O時(shí),將返回“沒有投幣”狀態(tài),同第 (3)小題的分析,此處應(yīng)調(diào)用getNoQualterState() 。根據(jù)紙巾售賣機(jī)狀態(tài)圖可知,當(dāng)售出紙巾,并且紙巾數(shù)量等于0 時(shí),將返回“紙巾售完”狀態(tài),此處用了ifelse判斷語句,當(dāng)紙巾數(shù)量仍大于0 時(shí),返回“沒有投幣”狀態(tài),否則,紙
17、巾數(shù)量一定等于0,本段程序第五空是elsegetSoldOutState()下的一條語句,故此處是判斷。count為 0 時(shí),紙巾售賣機(jī)的狀態(tài),顯然,應(yīng)調(diào)用三、 試題三 ( 總題數(shù): 1,分?jǐn)?shù): 20.00)3. 閱讀下列說明和 C+代碼,將應(yīng)填入 _處的字句寫在下面。說明某飯店在不同的時(shí)段提供多種不同的餐飲,其菜單的結(jié)構(gòu)圖如圖 1 所示?,F(xiàn)在采用組合 (Composition)模式來構(gòu)造該飯店的菜單,使得飯店可以方便地在其中添加新的餐飲形式,得到如圖2 所示的類圖,其中MenuComponent為抽象類,定義了添加 (add) 新菜單和打印飯店所有菜單信息(print) 的方法接口。類Men
18、u表示飯店提供的每種餐飲形式的菜單,如煎餅屋菜單、咖啡屋菜單等。每種菜單中都可以添加子菜單,例如圖 1 中的甜點(diǎn)菜單,類 MenuItem 表示菜單中的菜式。圖 1 菜單結(jié)構(gòu)圖圖2 類圖C+代碼 #include iostream #include list#include stringusing namespace std;class MenuComponentprotected:string name;public:MenuComponent(string name) this-name=name;sting getName()return name;_/ 添加新菜單virtual voi
19、d print()=0; /打印菜單信息;class MenuItem:public MenuComponentprivate:double price;public:MenuItem(string name,double price):MenuComponent(name) this-price=price;double getPrice()return price;void add(MenuComponent*menuComponent)(return;)/void print()cout " " getName() ","class Menu:pu
20、blic MenuComponentprivate:list_menuComponents;public:添加新菜單 getPrice end1;Menu(string name):MenuComponent(name)void add(MenuComponent*menuComponent) /添加新菜單_;void print()cout "n" getName() "n-"std:listMenuComponent*:iterator iter; end1;for(iter=menuComponents.begin();iter!=menuComp
21、onents.end(); iter+)_- print();void main()MenuComponent*allMenus=new Menu("ALL MENUS");MenuComponent*dinerMenu=new Menu("DINER MENU");/ 創(chuàng)建更多的 Menu 對象 , 此處代碼省略allMenus- add(dinerMenu); / 為餐廳增加更多的菜單將 dinerMenu , 此處代碼省略添加到餐廳菜單中_- print(); /打印飯店所有菜單信息(分?jǐn)?shù): 20.00 )_正確答案: ()解析: virtual
22、void add(MenuComponent*menuComponet)=0MenuComponet*nemuComponets- push_back(menuComponent)(*iter)allMenus 解析 MenuComponent是虛基類, 其中要定義添加新菜單純虛函數(shù),函數(shù)體在其派生類 Menultem和 Menu 中現(xiàn)。第一個(gè)空處應(yīng)填入:virtual void add(MenuComponent*menuComponet)=0。在類 Menu定義了列表 menuComponets,用于保存添加的新菜單,由std:listMenuComponent*:iteratoriter
23、可知列表的類型為MenuComponent*,故第二個(gè)空處應(yīng)填入:MenuComponet*。添加菜單時(shí),可以從menuComponets列表的前面添加,也可以從menuComponets列表的后面添加,但通過菜單的輸出函數(shù)可知,菜單是從列表的后面添加的,因此第三個(gè)空處應(yīng)填入:nemuComponets-pushback(menuComponent) 。iter 是迭代器,用于遍歷菜單列表menuComponets,第四個(gè)空處應(yīng)填入 (*iter)。在主函數(shù),打印飯店所有菜單信息的函數(shù)調(diào)用為:allMenus- print() 。四、 試題四 ( 總題數(shù): 1,分?jǐn)?shù): 20.00)4. 閱讀下
24、列說明和Java 代碼,將應(yīng)填入 _處的字句寫在下面。說明某燈具廠商欲生產(chǎn)一個(gè)燈具遙控器,該遙控器具有7 個(gè)可編程的插槽,每個(gè)插槽都有開關(guān)按鈕,對應(yīng)著一個(gè)不同的燈。利用該遙控器能夠統(tǒng)一控制房間中該廠商所有品牌燈具的開關(guān),現(xiàn)采用Command(命令 ) 模式實(shí)現(xiàn)該遙控器的軟件部分, Command模式的類圖如下圖所示。Command模式類圖Java 代碼 class Lightpublic Light();public Light(string name)/*代碼省略 */public void on()/*代碼省略 */開燈public void off()/*代碼省略 */ /關(guān)燈;_pub
25、lic void execute();class LightOnCommand implements Command / 開燈命令public LightOnCommand(Light light)this.light=light;public Void execute()_;class LightOffCommand implements Command / 關(guān)燈命令Light light;public LightOffCommand(Light light)this.light=light;public Void execute()_;Class RemoteControl /遙控器Com
26、mand onCommands7;Command offCommands7;Public RemoteControl()/*代碼省略 */Public void setCommand(int slot Command onCommand,Command OffCommand)_=onCommand;_=offCommand;PubliC void onButtonWasPushed(int slot)_;)Public void offButtonWasPushed(int slot)_;Class remoteLoaderpublic static void main(stringargs)
27、RemoteControl remoteControl=new RemoteControl();Light livingRoomLight=new Light("Living Room");Light kitchen Light=new Light("kitchen");LightOnCommand livingRoomLightOn=new LightOnCommand(livingRoomLight); LightOffCommand livingRoomLightOff=new LightOffCommand(liVingRoomLight);Li
28、ghtOnCommand kitchenLighton=new LightOnCommand(kitchenLight); LightOffCommand kitchenLightOff=new LightOffCommand(kitchenLight); remoteControl.setCommand(0,livingRoomLighton,livingRoomLightoff); remoteControl.setCommand(1,kitchenLighton,kitchenLightoff);remoteControl.onButtonWasPushed(0);remoteContr
29、ol.off ButtonWasPushed(0);remoteControl.onButtonWasPushed(1);remoteControl.offButtonWasPushed(1);(分?jǐn)?shù): 20.00 )_正確答案:()解析:interface Commandlight.on()light.off()onCommandsslotoffCommandsslotonCommandsslot.execute()offCommandsslot.execute() 解析 Command命令模式是一種對象行為模式。本題考查 Command命令模式的概念及應(yīng)用,并用Java 語言實(shí)現(xiàn),它主要解
30、決的問題是:在軟件構(gòu)建過程中,“行為請求者”與“行為實(shí)現(xiàn)者”通常呈現(xiàn)一種“緊耦合”的問題,將一個(gè)請求封裝為一個(gè)對象,從而可用不同的請求對客戶進(jìn)行參數(shù)化,以及支持可撤銷的操作。五、 試題五 ( 總題數(shù): 1,分?jǐn)?shù): 20.00)5. 閱讀下列說明和Java 代碼,將應(yīng)填入_的字句寫在下面。說明某實(shí)驗(yàn)室欲建立一個(gè)實(shí)驗(yàn)室環(huán)境監(jiān)測系統(tǒng),能夠顯示實(shí)驗(yàn)室的溫度、濕度以及潔凈度等環(huán)境數(shù)據(jù),當(dāng)獲取到最新的環(huán)境測量數(shù)據(jù)時(shí),顯示的環(huán)境數(shù)據(jù)能夠更新現(xiàn)在采用觀察者 (observer) 模式來開發(fā)該系統(tǒng),觀察者模式的類圖如下圖 2 所示。Java 代碼 import java.uti1.*interface Obse
31、rverPublic void update(float temp,float humidity,float cleanness);interface SubjectPublic void registerObserver(Observer o);/注冊對主題感興趣的觀察者Public void removeObserver(Observer o);/刪除觀察者Public void notifyobservers0; /當(dāng)主題發(fā)生變化時(shí)通知觀察者Class EnvironmentDataimplements _Private ArrayList observers;Private float
32、 temperature,humidity,cleanness;Public EnvironmentData0observers=new ArrayList0;Public void registerObserver(Observer o) observers.add(o); Public void removeObserver(Observer o) /*代碼省略 */ public void notifyObserVers()For(int i=0;iobservers.size();i+)Observer observer=(Observer)observers.get(i);_;pub
33、lic void measurementsChanged()_;public void setMeasurements(float temperature,float humidity,float cleanness)this.temperature=temperature;this.humidity=humidity;this.cleanness=cleanness;_;Class CurrentConditionsDisplay implements _private float temperature;private float humidity;private float cleanness;private Subject envData;public CurrentConditionsDisplay(Subject envData)this.envData=envData;_;Public void update(float te
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽省滁州市2024-2025學(xué)年高一下學(xué)期期中地理試卷(含答案)
- 語文●全國甲卷丨2021年普通高等學(xué)校招生全國統(tǒng)一考試語文試卷及答案
- 2025合同范本辦公設(shè)備采購售后服務(wù)承諾及措施協(xié)議
- 2025年中國速食連鎖行業(yè)市場規(guī)模調(diào)研及投資前景研究分析報(bào)告
- 單位房屋租賃合同
- 2025辦公室租賃合同范本4
- 2025借款合同的訂立形式及要求
- 法律基礎(chǔ)民商法試題集
- 01數(shù)據(jù)要素新質(zhì)生產(chǎn)力數(shù)據(jù)資產(chǎn)全生命周期安全防護(hù)解決方案
- 農(nóng)業(yè)生產(chǎn)機(jī)械裝備采購及服務(wù)合同
- 五下音樂測試題及答案
- 考評員考試題及答案
- 2024年湖南省普通高中學(xué)業(yè)水平合格性考試地理試題(原卷版)
- 2025春季學(xué)期國開電大本科《理工英語3》一平臺(tái)在線形考綜合測試(形考任務(wù))試題及答案
- 細(xì)致解讀wps考試內(nèi)容的試題及答案
- 資質(zhì)買賣居間協(xié)議書
- 數(shù)據(jù)可視化與Python試題及答案
- 2025年兒童心理發(fā)展考試試題及答案
- 身股股權(quán)協(xié)議書
- 臺(tái)球股東合同協(xié)議書
- 新版《醫(yī)療器械經(jīng)營質(zhì)量管理規(guī)范》培訓(xùn)課件
評論
0/150
提交評論