計(jì)算機(jī)水平考試中級(jí)軟件設(shè)計(jì)師2015年上半年下午真題_第1頁(yè)
計(jì)算機(jī)水平考試中級(jí)軟件設(shè)計(jì)師2015年上半年下午真題_第2頁(yè)
計(jì)算機(jī)水平考試中級(jí)軟件設(shè)計(jì)師2015年上半年下午真題_第3頁(yè)
計(jì)算機(jī)水平考試中級(jí)軟件設(shè)計(jì)師2015年上半年下午真題_第4頁(yè)
計(jì)算機(jī)水平考試中級(jí)軟件設(shè)計(jì)師2015年上半年下午真題_第5頁(yè)
已閱讀5頁(yè),還剩1頁(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)介

計(jì)算機(jī)水平考試中級(jí)軟件設(shè)計(jì)師2015年上半年下午真題(總分:90.00,做題時(shí)間:90分鐘)一、下午試題(總題數(shù):6,分?jǐn)?shù):90.00)試題一閱讀下列說(shuō)明和圖,回答問(wèn)題1至問(wèn)題4,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)?!菊f(shuō)明】某大學(xué)為進(jìn)一步推進(jìn)無(wú)紙化考試,欲開(kāi)發(fā)一考試系統(tǒng)。系統(tǒng)管理員能夠創(chuàng)建包括專業(yè)方向、課程編號(hào)、任課教師等相關(guān)考試基礎(chǔ)信息,教師和學(xué)生進(jìn)行考試相關(guān)的工作。系統(tǒng)與考試有關(guān)的主要功能如下。(1)考試設(shè)置。教師制定試題(題目和答案),制定考試說(shuō)明、考試時(shí)間和提醒時(shí)間等考試信息,錄入?yún)⒓涌荚嚨膶W(xué)生信息,并分別進(jìn)行存儲(chǔ)。(2)顯示并接收解答。根據(jù)教師設(shè)定的考試信息,在考試有效時(shí)間內(nèi)向?qū)W生顯示考試說(shuō)明和題目,根據(jù)設(shè)定的考試提醒時(shí)間進(jìn)行提醒,并接收學(xué)生的解答。(3)處理解答。根據(jù)答案對(duì)接收到的解答數(shù)據(jù)進(jìn)行處理,然后將解答結(jié)果進(jìn)行存儲(chǔ)。(4)生成成績(jī)報(bào)告。根據(jù)解答結(jié)果生成學(xué)生個(gè)人成績(jī)報(bào)告,供學(xué)生查看。(5)生成成績(jī)單。對(duì)解答結(jié)果進(jìn)行核算后生成課程成績(jī)單供教師查看。(6)發(fā)送通知。根據(jù)成績(jī)報(bào)告數(shù)據(jù),創(chuàng)建通知數(shù)據(jù)并將通知發(fā)送給學(xué)生;根據(jù)成績(jī)單數(shù)據(jù),創(chuàng)建通知數(shù)據(jù)并將通知發(fā)送給教師?,F(xiàn)采用結(jié)構(gòu)化方法對(duì)考試系統(tǒng)進(jìn)行分析與設(shè)計(jì),獲得如圖1-1所示的上下文數(shù)據(jù)流圖和圖1-2所示的0層數(shù)據(jù)流圖。(分?jǐn)?shù):15.00)(1).問(wèn)題:1.1(2分)使用說(shuō)明中的詞語(yǔ),給出圖1-1中的實(shí)體E1~E2的名稱。(分?jǐn)?shù):3.75)__________________________________________________________________________________________

正確答案:(E1:教師;E2:學(xué)生。)解析:(2).問(wèn)題:1.2(4分)使用說(shuō)明中的詞語(yǔ),給出圖1-2中的數(shù)據(jù)存儲(chǔ)D1~D4的名稱。(分?jǐn)?shù):3.75)__________________________________________________________________________________________

正確答案:(D1:試題(表)或題目和答案(表)D2:學(xué)生信息(表)D3:考試信息(秦)D4:解答結(jié)果(表))解析:(3).問(wèn)題:1.3(4分)根據(jù)說(shuō)明和圖中詞語(yǔ),補(bǔ)充圖1-2中缺失的數(shù)據(jù)流及其起點(diǎn)和終點(diǎn)。(分?jǐn)?shù):3.75)__________________________________________________________________________________________

正確答案:()解析:(4).問(wèn)題:1.4(5分)圖1-2所示的數(shù)據(jù)流圖中,功能(6)發(fā)送通知包含創(chuàng)建通知并發(fā)送給學(xué)生或老師。請(qǐng)分解圖1-2中加工(6),將分解出的加工和數(shù)據(jù)流填入答題紙的對(duì)應(yīng)欄內(nèi)。(注:數(shù)據(jù)流的起點(diǎn)和終點(diǎn)須使用加工的名稱描述)(分?jǐn)?shù):3.75)__________________________________________________________________________________________

正確答案:(分解為加工:發(fā)送通知和加工:創(chuàng)建通知)解析:試題二閱讀下列說(shuō)明,回答問(wèn)題1至問(wèn)題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)?!菊f(shuō)明】某省針對(duì)每年舉行的足球聯(lián)賽,擬開(kāi)發(fā)一套信息管理系統(tǒng),以方便管理球隊(duì)、球員、主教練、主裁判、比賽等信息?!拘枨蠓治觥?1)系統(tǒng)需要維護(hù)球隊(duì)、球員、主教練、主裁判、比賽等信息。球隊(duì)信息主要包括:球隊(duì)編號(hào)、名稱、成立時(shí)間、人數(shù)、主場(chǎng)地址、球隊(duì)主教練。球員信息主要包括:姓名、身份證號(hào)、出生日期、身高、家庭住址。主教練信息主要包括:姓名、身份證號(hào)、出生日期、資格證書(shū)號(hào)、級(jí)別。主裁判信息主要包括:姓名、身份證號(hào)、出生日期、資格證書(shū)號(hào)、獲取證書(shū)時(shí)間、級(jí)別。(2)每支球隊(duì)有一名主教練和若干名球員。一名主教練只能受聘于一支球隊(duì),一名球員只能效力于一支球隊(duì)。每支球隊(duì)都有自己的唯一主場(chǎng)場(chǎng)地,且場(chǎng)地不能共用。(3)足球聯(lián)賽采用主客場(chǎng)循環(huán)制,一周進(jìn)行一輪比賽,一輪的所有比賽同時(shí)進(jìn)行。(4)一場(chǎng)比賽有兩支球隊(duì)參加,一支球隊(duì)作為主隊(duì)身份、另一支作為客隊(duì)身份參與比賽。一場(chǎng)比賽只能有一名主裁判,每場(chǎng)比賽有唯一的比賽編碼,每場(chǎng)比賽都記錄比分和日期?!靖拍罱Y(jié)構(gòu)設(shè)計(jì)】根據(jù)需求分析階段的信息,設(shè)計(jì)的實(shí)體聯(lián)系圖(不完整)如圖2-1所示。【邏輯結(jié)構(gòu)設(shè)計(jì)】根據(jù)概念結(jié)構(gòu)設(shè)計(jì)階段完成的實(shí)體聯(lián)系圖,得出如下關(guān)系模式(不完整):球隊(duì)(球隊(duì)編號(hào),名稱,成立時(shí)間,人數(shù),主場(chǎng)地址)球員(姓名,身份證號(hào),出生日期,身高,家庭住址,(1))主教練(姓名,身份證號(hào),出生日期,資格證書(shū)號(hào),級(jí)別,(2))主裁判(姓名,身份證號(hào),出生日期,資格證書(shū)號(hào),獲取證書(shū)時(shí)間,級(jí)別)比賽(比賽編碼,主隊(duì)編號(hào),客隊(duì)編號(hào),主裁判身份證號(hào),比分,日期)(分?jǐn)?shù):15.00)(1).問(wèn)題:2.1(6分)補(bǔ)充圖2-1中的聯(lián)系和聯(lián)系的類型。圖2-1中的聯(lián)系“比賽”應(yīng)具有的屬性是哪些?(分?jǐn)?shù):5.00)__________________________________________________________________________________________

正確答案:(比賽聯(lián)系應(yīng)具有的屬性包括:比賽編碼,比分,日期。)解析:(2).問(wèn)題:2.2(4分)根據(jù)圖2-1,將邏輯結(jié)構(gòu)設(shè)計(jì)階段生成的關(guān)系模式中的空(1)~(2)補(bǔ)充完整。(分?jǐn)?shù):5.00)__________________________________________________________________________________________

正確答案:((1)球隊(duì)編號(hào);(2)球隊(duì)編號(hào)。)解析:(3).問(wèn)題:2.3(5分)現(xiàn)在系統(tǒng)要增加贊助商信息,贊助商信息主要包括贊助商名稱和贊助商編號(hào)。贊助商可以贊助某支球隊(duì),一支球隊(duì)只能有一個(gè)贊助商,但贊助商可以贊助多支球隊(duì)。贊助商也可以單獨(dú)贊助某些球員,一名球員可以為多個(gè)贊助商代言。請(qǐng)根據(jù)該要求,對(duì)圖2-1進(jìn)行修改,畫(huà)出修改后的實(shí)體間聯(lián)系和聯(lián)系的類型。(分?jǐn)?shù):5.00)__________________________________________________________________________________________

正確答案:()解析:解析:根據(jù)題意由“贊助商可以贊助某支球隊(duì),一支球隊(duì)只能有一個(gè)贊助商,但贊助商可以贊助多支球隊(duì)”可知贊助商和球隊(duì)之間為1:*聯(lián)系。由“贊助商也可以單獨(dú)贊助某些球員,一名球員可以為多個(gè)贊助商代言”可知贊助商和球員之間為聯(lián)系。試題三閱讀下列說(shuō)明和圖,回答問(wèn)題1至問(wèn)題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)?!菊f(shuō)明】某物品拍賣(mài)網(wǎng)站為參與者提供物品拍賣(mài)平臺(tái),組織拍賣(mài)過(guò)程,提供在線或線下交易服務(wù)。網(wǎng)站主要功能描述如下:(1)拍賣(mài)參與者分為個(gè)人參與者和團(tuán)體參與者兩種。不同的團(tuán)體也可以組成新的團(tuán)體參與拍賣(mài)活動(dòng)。網(wǎng)站記錄每個(gè)參與者的名稱。(2)一次拍賣(mài)中,參與者或者是買(mǎi)方,或者是賣(mài)方。(3)一次拍賣(mài)只拍出來(lái)自一個(gè)賣(mài)方的一件拍賣(mài)品;多個(gè)買(mǎi)方可以出價(jià):賣(mài)方接受其中一個(gè)出價(jià)作為成交價(jià),拍賣(mài)過(guò)程結(jié)束。(4)在拍賣(mài)結(jié)算階段,買(mǎi)賣(mài)雙方可以選擇兩種成交方式:線下成交,買(mǎi)賣(mài)雙方在事先約定好的成交地點(diǎn),當(dāng)面完成物價(jià)款的支付和拍賣(mài)品的交付;在線成交,買(mǎi)方通過(guò)網(wǎng)上支付平臺(tái)支付物價(jià)款,拍賣(mài)品由賣(mài)方通過(guò)快遞郵寄給買(mǎi)方。一次拍賣(mài)過(guò)程的基本事件流描述如下:(1)賣(mài)方在網(wǎng)站上發(fā)起一次拍賣(mài),并設(shè)置本次拍賣(mài)的起拍價(jià)。(2)確定拍賣(mài)標(biāo)的以及拍賣(mài)標(biāo)的保留價(jià)(若在拍賣(mài)時(shí)間結(jié)束時(shí),所有出價(jià)均低于拍賣(mài)標(biāo)的保留價(jià),則本次拍賣(mài)失?。?。(3)在網(wǎng)站上發(fā)布本次拍賣(mài)品的介紹。(4)買(mǎi)方參與拍賣(mài),給出竟拍價(jià)。(5)賣(mài)方選擇接受一個(gè)竟拍價(jià)作為成交價(jià),結(jié)束拍賣(mài)。(6)系統(tǒng)記錄拍賣(mài)成交價(jià),進(jìn)入拍賣(mài)結(jié)算階段。(7)賣(mài)方和買(mǎi)方協(xié)商拍賣(mài)品成交方式,并完成成交?,F(xiàn)采用面向?qū)ο蠓椒▽?duì)系統(tǒng)進(jìn)行分析與設(shè)計(jì),得到如表3-1所示的類列表以及如圖3-1所示的類圖,類中關(guān)鍵屬性與方法如表3-2所示。(分?jǐn)?shù):15.00)(1).問(wèn)題:3.1(7分)根據(jù)說(shuō)明中的描述,給出圖3-1中(1)~(7)所對(duì)應(yīng)的類名(類名使用表3-1中給出的序號(hào))。(分?jǐn)?shù):5.00)__________________________________________________________________________________________

正確答案:()解析:本題屬于經(jīng)典的考題,主要考查面向?qū)ο蠓治龇椒ㄅc設(shè)計(jì)的基本概念。在建模方面,本題中只涉及到了UML類圖。類圖上的考點(diǎn)也是比較常規(guī)的對(duì)類的識(shí)別以及類中屬性及方法的確定,題目難度不大。圖3-1共需要確定7個(gè)類,可以先從圖中幾個(gè)特殊關(guān)系處入手,即(1)?(3)和(4)?(6)。先來(lái)分析(1)?(3),這是一個(gè)繼承+聚集的結(jié)構(gòu),而且聯(lián)系的名稱“participants”是一個(gè)比較明顯的提示,說(shuō)明這個(gè)層次結(jié)構(gòu)是與【說(shuō)明】中的功能描述(1)相對(duì)應(yīng)的。參考表3-1,與之相關(guān)的類是C5(AuctionParticipant)、C7(OneParticipant)和C9(CompositeParticipant)。C7、C9是特殊的參與者,所以(1)處應(yīng)該為C5;(2)處應(yīng)該為C9,這個(gè)聚集關(guān)系針對(duì)著【說(shuō)明】中的“不同的團(tuán)體也可以組成新的團(tuán)體參與拍賣(mài)活動(dòng)”需求;(3)處為C7。結(jié)合【說(shuō)明】和表3-1,另外一組具有“一般-特殊”關(guān)系的類只有C6(Interchange),C8(OfflinePay)和C10(OnlinePay)。顯而易見(jiàn),C8和C10是C6的兩種具體方式,所以(4)處應(yīng)該為C6,(5)、(6)處分別為C8和C10。這樣(7)處對(duì)應(yīng)的類只能是Item了。結(jié)合【說(shuō)明】和表3-1可知,(7)處對(duì)應(yīng)的類表達(dá)的應(yīng)該是拍賣(mài)中的拍賣(mài)品,所以(7)處應(yīng)該是C2。(2).問(wèn)題:3.2(5分)根據(jù)說(shuō)明中的描述,確定表3-2中的屬性/方法分別屬于哪個(gè)類(類名、方法/屬性名使用表3-1、3-2中給出的序號(hào))。(分?jǐn)?shù):5.00)__________________________________________________________________________________________

正確答案:()解析:(3).問(wèn)題:3.3(3分)在圖3-1采用了何種設(shè)計(jì)模式?以100字以內(nèi)文字說(shuō)明采用這種設(shè)計(jì)模式的原因。(分?jǐn)?shù):5.00)__________________________________________________________________________________________

正確答案:(在圖3-1中使用了Composite模式。以樹(shù)形結(jié)構(gòu)表示個(gè)人參與者和團(tuán)體參與者之間的“部分-整體”關(guān)系,使得對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。)解析:在【說(shuō)明】部分有一個(gè)很明顯的提示:“拍賣(mài)參與者分為個(gè)人參與者和團(tuán)體參與者兩種。不同的團(tuán)體也可以組成新的團(tuán)體參與拍賣(mài)活動(dòng)”。這里很清晰地表達(dá)了一種“部分-整體”的層次關(guān)系,這種關(guān)系非常適合于采用Composite(組合)設(shè)計(jì)模式來(lái)表達(dá)。Composite設(shè)計(jì)模式將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。Composite使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。試題四閱讀下列說(shuō)明和C代碼,回答問(wèn)題1至問(wèn)題3,將解答寫(xiě)在答題紙的對(duì)應(yīng)欄內(nèi)?!菊f(shuō)明】n-皇后問(wèn)題是在n行n列的棋盤(pán)上放置n個(gè)皇后,使得皇后彼此之間不受攻擊,其規(guī)則是任意兩個(gè)皇后不在同一行、同一列和相同的對(duì)角線上。擬采用以下思路解決n-皇后問(wèn)題:第i個(gè)皇后放在第i行。從第一個(gè)皇后開(kāi)始,對(duì)每個(gè)皇后,從其對(duì)應(yīng)行(第i個(gè)皇后對(duì)應(yīng)第i行)的第一列開(kāi)始嘗試放置,若可以放置,確定該位置,考慮下一個(gè)皇后;若與之前的皇后沖突,則考慮下一列;若超出最后一列,則重新確定上一個(gè)皇后的位置。重復(fù)該過(guò)程,直到找到所有的放置方案。【C代碼】下面是算法的C語(yǔ)言實(shí)現(xiàn)。(1)常量和變量說(shuō)明pos:一維數(shù)組,pos[i]表示第i個(gè)皇后放置在第i行的具體位置count:統(tǒng)計(jì)放置方案數(shù)i,j,k:變量N:皇后數(shù)(2)C程序#include#include#defineN4/*判斷第k個(gè)皇后目前放置位置是否與前面的皇后沖突*/inisplace(intpos[],intk){inti;for(i=1;i=1){pos[j]=pos[j]+1;/*嘗試擺放第i個(gè)皇后*/while(pos[j]<=N&&(3)_){pos[j]=pos[j]+1;}/*得到一個(gè)擺放方案*/if(pos[j]<=N&&j══N){printf("方案%d:",count++);for(i=1;i<=N;i++){printf("%d",pos[i]);}printf("/n");}/*考慮下一個(gè)皇后*/if(pos[j]<=N&&(4)){j=j+1;}else{//返回考慮上一個(gè)皇后pos[j]=0;(5);}}return1;}(分?jǐn)?shù):15.00)(1).問(wèn)題:4.1(10分)根據(jù)以上說(shuō)明和C代碼,填充C代碼中的空(1)~(5)。(分?jǐn)?shù):5.00)__________________________________________________________________________________________

正確答案:((1)pos[i]==pos[k]或其等價(jià)形式(2)j=1(3)!isplace(pos,j)或其等價(jià)形式(4)j解析:此類題目要求考生認(rèn)真閱讀題目,理解算法思想,并思考將算法思想轉(zhuǎn)化為具體的程序設(shè)計(jì)語(yǔ)言的代碼。根據(jù)題干描述。空(1)所在的代碼行判斷皇后合法放置的約束條件,即不在同一行,這通過(guò)把第i個(gè)皇后放在第i行實(shí)現(xiàn),條件“fabs(i-k)==fabs(pos[i]-pos[k])”判斷的是當(dāng)前擺放的皇后是否與之前擺放的皇后在同一對(duì)角線上。因此,空(1)判斷的是當(dāng)前擺放的皇后是否和之前擺放的皇后在同一列上,即應(yīng)填入“pos[i]==pos[k]”。根據(jù)算法思想和主函數(shù)上下文,空(2)處應(yīng)該考慮第1個(gè)皇后,即初始化j為1,空(2)填寫(xiě)“j=1”??眨?)所在的行是判斷放置第j個(gè)皇后的位置是否合適,“pos[j]<=N”表示在該行的合法列上,但還需要進(jìn)一步判斷是否與前面的皇后有沖突,根據(jù)滿足條件后的語(yǔ)句,嘗試放入下一列,因此空(3)處填入“!isplace(pos,j)”。根據(jù)前面的注釋,空(4)所在的行是考慮下一個(gè)皇后,其條件是,當(dāng)前皇后找到了合適的位置,而且還存在下一個(gè)皇后,因此空(4)處應(yīng)填入“j<N”。根據(jù)下面的注釋,若當(dāng)前皇后沒(méi)有找到合適的位置,則應(yīng)回溯,即再次考慮上一個(gè)皇后的位置,因此空(5)處填入“j=j-1"。(2).問(wèn)題:4.2(2分)根據(jù)以上說(shuō)明和C代碼,算法采用了(6)設(shè)計(jì)策略。(分?jǐn)?shù):5.00)__________________________________________________________________________________________

正確答案:(回溯法)解析:從上述題干的敘述和C代碼很容易看出,從第一個(gè)皇后開(kāi)始,對(duì)每個(gè)皇后總是從第個(gè)位置開(kāi)始嘗試,找到可以放置的合法位置;若某個(gè)皇后在對(duì)應(yīng)的行上沒(méi)有合法位置,則回溯到上一個(gè)皇后,嘗試將上一個(gè)皇后放置另外的位置。這是典型的深度優(yōu)先的系統(tǒng)搜索方式,即回溯法的思想。(3).問(wèn)題:4.3(3分)上述C代碼的輸出為:(7)。(分?jǐn)?shù):5.00)__________________________________________________________________________________________

正確答案:((7)方案1:2413;方案2:3142。)解析:1.試題五閱讀下列說(shuō)明和C++代碼,將應(yīng)填入(n)處的字句寫(xiě)在答題紙的對(duì)應(yīng)欄內(nèi)?!菊f(shuō)明】某圖書(shū)管理系統(tǒng)中管理著兩種類型的文獻(xiàn):圖書(shū)和論文?,F(xiàn)在要求統(tǒng)計(jì)所有館藏文獻(xiàn)的總頁(yè)碼(假設(shè)圖書(shū)館中有一本540頁(yè)的圖書(shū)和兩篇各25頁(yè)的論文,那么館藏文獻(xiàn)的總頁(yè)碼就是590頁(yè))。采用Visitor(訪問(wèn)者)模式實(shí)現(xiàn)該要求,得到如圖5-1所示的類圖。[*]【C++代碼】classLibraryVisitor;classLibraryItemInterface{public:(1):};classArticle:publicLibraryItemInterface{private:stringm_title;//論文名stringm_author;//論文作者intm_start_page;intm_end_page;public:Article(stringp_author,stringp_title,intp_start_page,intp_end_page);intgetNumber()fPages();voidaccept(LibraryVisitor*visitor);};classBook:publicLibraryItemInterface{private:stringm_title;//書(shū)名stringm_author;//作者intm_pages;//頁(yè)數(shù)public:Book(stringp_author,stringp_title,intp_pages);intgetNumber()fPages();voidaccept(LibraryVisitor*visitor);};classLibraryVisitor{public:(2);(3);virtualvoidprintSum()=0;};classLibrarySumPrintVisitor:publicLibraryVisitor{//打印總頁(yè)數(shù)private:intsum;public:LibrarySumPrintVisitor();voidvisit(Book*p_book);voidvisit(Article*p_article);voidprintSum();};//visitor.cppintArticle::getNumber()fPages(){retumm_end_m_start_page;}voidArticle::accept(LibraryVisitor*visitor){(4);}Book::Book(stringp_author,stringp_title,intp_pages){m_title=p_title;m_author=p_author;m_pages=p_pages;}intBook::getNumberOfPages(){returnm_pages;}voidBook::accept(LibraryVisitor*visitor){(5);}//其余代碼省略

問(wèn)題:5.1(15分)閱讀上述說(shuō)明和C++代碼,將應(yīng)填入(n)處的字句寫(xiě)在答題紙的對(duì)應(yīng)欄內(nèi)。(分?jǐn)?shù):15.00)__________________________________________________________________________________________

正確答案:((1)virtualvoidaccept(LibraryVisitor*visitor)=0(2)virtualvoidvisit(Book*p_book)=0(3)virtualvoidvisit(Article*p_article)=0(4)visitor->visit(this)(5)visitor->visit(this))解析:本題考查Visitor(訪問(wèn)者)模式的基本概念和應(yīng)用。訪問(wèn)者模式是行為設(shè)計(jì)模式中的一種。行為模式不僅描述對(duì)象或類的模式,還描述它們之間的通信模式。這些模式刻畫(huà)了在運(yùn)行時(shí)難以跟蹤的復(fù)雜的控制流。訪問(wèn)者模式表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中的各元素的操作。它使在不改變各元素的類的前提下可以定義作用于這些元素的新操作。此模式的結(jié)構(gòu)圖如下圖所示。Visitor(訪問(wèn)者)為該對(duì)象結(jié)構(gòu)中ConcreteElement的每一個(gè)類聲明一個(gè)Visit操作。該操作的名字和特征標(biāo)識(shí)了發(fā)送Visit請(qǐng)求給該訪問(wèn)者的哪個(gè)類。這使得訪問(wèn)者可以確定正被訪問(wèn)元素的具體的類。這樣訪問(wèn)者就可以通過(guò)該元素的特定接口直接訪問(wèn)它。ConcreteVisitor(具體訪問(wèn)者)實(shí)現(xiàn)每個(gè)有Visitor聲明的操作,每個(gè)操作實(shí)現(xiàn)本算法的一部分,而該算法片段乃是對(duì)應(yīng)于結(jié)構(gòu)中對(duì)象的類。ConcreteVisitor為該算法提供了上下文并存儲(chǔ)它的局部狀態(tài)。這一狀態(tài)常常在遍歷該結(jié)構(gòu)的過(guò)程中累積結(jié)果。?Element(元素)定義以一個(gè)訪問(wèn)者為參數(shù)的Accept操作。ConcreteElement(具體元素)實(shí)現(xiàn)以一個(gè)訪問(wèn)者為參數(shù)的Accept操作。ObjectStructure(對(duì)象結(jié)構(gòu))能枚舉它的元素;可以提供一個(gè)高層的接口以允許該訪問(wèn)者訪問(wèn)它的元素;可以是一個(gè)組合或者一個(gè)集合,如一個(gè)列表或一個(gè)無(wú)序集合。本題中類Library對(duì)應(yīng)著上圖中的Client,LibraryVisitor對(duì)應(yīng)著Visitor,LibrarySumPrintVisitor對(duì)應(yīng)著ConcreteVisitor。Libraryltemlnterface對(duì)應(yīng)著上圖中的元素部分。下面可以結(jié)合程序代碼來(lái)完成程序填空了。Libraryltemlnterface在本題中充當(dāng)著Element的作用,其中應(yīng)定義以一個(gè)訪問(wèn)者為參數(shù)的Accept操作。對(duì)照其兩個(gè)子類Article和Book的代碼,可以得知該操作的原型是voidaccept(LibraryVisitor*visitor)。由于該操作的具體實(shí)現(xiàn)在子類Article和Book中,所以這里適用于采用C++中的純虛擬函數(shù)來(lái)實(shí)現(xiàn)。由此可以得知,(1)處應(yīng)填寫(xiě)“virtualvoidaccept(LibraryVisitor*visitor)=0”。(2)和(3)空與類LibraryVisitor有關(guān)。由前文分析已知,LibraryVisitor對(duì)應(yīng)著訪問(wèn)者模式中的Visitor,其作用是為類LibrarySumPrintVisitor聲明Visit操作。類LibrarySumPrintVisitor需要訪問(wèn)兩種不同的元素,每種元素應(yīng)該對(duì)應(yīng)不同的visit操作。再結(jié)合類LibrarySumPrintVisitor的定義部分,可以得知(2)和(3)處應(yīng)給出分別以Book和Article為參數(shù)的visit方法,同樣采用純虛擬函數(shù)機(jī)制。因此(2)和(3)處分別為“virtualvoidvisit(Book*p_book)=0”、“virtualvoidvisit(Article*p_article)=0”。(4)和(5)處考查的是accept接口的實(shí)現(xiàn)。由訪問(wèn)者模式的結(jié)構(gòu)圖可以看出,在Book和Article中accept方法的實(shí)現(xiàn)均為visitor->visit(this)。2.試題六閱讀下列說(shuō)明和Java代碼,將應(yīng)填入(n)處的字句寫(xiě)在答題紙的對(duì)應(yīng)欄內(nèi)?!菊f(shuō)明】某圖書(shū)管理系統(tǒng)中管理著兩種類型的文獻(xiàn):圖書(shū)和論文。現(xiàn)在要求統(tǒng)計(jì)所有館藏文獻(xiàn)的總頁(yè)碼(假設(shè)圖書(shū)館中有一本540頁(yè)的圖書(shū)和兩篇各25頁(yè)的論文,那么館藏文獻(xiàn)的總頁(yè)碼就是590頁(yè))。采用Visitor(訪問(wèn)者)模式實(shí)現(xiàn)該要求,得到如圖6-1所示的類圖。【Java代碼】importjava.util.*;interfaceLibraryVisitor{(1):(2):voidprintSum();}classLibrarySumPrintVisitorimplementsLibraryVisitor{//打印總頁(yè)數(shù)privateintsum=0;publicvoidvisit(Bookp_book){sum=sum+p_book.getNumberOfPages();publicvoidvisit(Articlep_article){sum=sum+p_article.getNumberOfPages0;}publicvoidprintSum(){System.out.println("SUM="+sum);}}interfaceLibraryItemInterface{(3);}classArticleimplementsLibraryItemInterface{privateStringm_title;//價(jià)侖文名。privateStringm_author;//侖文作者privateintm_start_page;privateintm_end_page;publicArticle(Stringp_author,Stringp_title,intp_start_page,intp_end_page){m_title=p_title;m_author=p_author;m_end_page=p_end_page;}publicintgetNumbelOfPages(){rctumm_end_m_start_page;}publicvoidacccpt(LibraryVisitorVisitor){(4):}}classBookimplementsLibraryItemInterface{privateStringm_title;//書(shū)名privateStringm_author;//書(shū)作者privateintm_pages;//頁(yè)教publicBook(Stringp_author,Stringp_title,intp_pages){m_title=p_title;m_author=p_author;m_pages=p_pages;}publicintgetNumberOfPages(){returnm_pages;}publicvoidaccept(LibraryVisitorvisitor){(5)___;}}

問(wèn)題:6.1(15分)閱讀上述說(shuō)明和Java代碼,將應(yīng)填入(n)處的字句寫(xiě)在答題紙的對(duì)應(yīng)欄內(nèi)。(分?jǐn)?shù):15.00)__________________________________________________________________________________________

正確答案:((1)voidvisit(Bookp_book)(2)voidvisit(Articlep_article)(3)voidaccept(LibraryVisitorvisitor)(4)visitor.visit(this)(5)visitor.visit(this))解析:本題考查Visitor(訪問(wèn)者)模式的基本概念和應(yīng)用。訪問(wèn)

溫馨提示

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