2015年上半年(下午)《軟件設(shè)計(jì)師》真題
《2015年上半年(下午)《軟件設(shè)計(jì)師》真題》由會(huì)員分享,可在線閱讀,更多相關(guān)《2015年上半年(下午)《軟件設(shè)計(jì)師》真題(9頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、2015年上半年(下午)《軟件設(shè)計(jì)師》真題 注意:圖片可根據(jù)實(shí)際需要調(diào)整大小 卷面總分:6分 答題時(shí)間:240分鐘 試卷題量:6題 練習(xí)次數(shù):0次 問(wèn)答題 (共6題,共6分) 1.某圖書(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所示的類圖。 圖5-1 Visitor模式類圖 【C++代碼】 class Librar
2、yVisitor; class LibraryItemInterface{ public: (1); }; class Article:public LibraryItemInterface{ private: string?m_title;//論文名 string?m_author;//論文作者 int m_start_page; int m_end_page; public: Article(string p_author,string p_title,int p_start_page,int p_end_page); int getNumberOfPages(
3、?。? void accept(Library Visitor*visitor); }; class Book:public LibraryItemInterface{ private: string?m_title;//書(shū)名 string?m_author;//作者 int m_pages;//頁(yè)數(shù) public: Book(string p_author,string p_title,int p_pages); int getNumberOfPages( ?。? void accept(LibraryVisitor*visitor); }; class Libra
4、ryVisitor{ public: (2); (3); virtual void printSum( )=0; }; class LibrarySumPrintVisitor:public LibraryVisitor{//打印總頁(yè)數(shù) private: int sum; public: LibrarySumPrintVisitor( ?。? void visit(Book*p_book); void visit(Article*p_article); void printSum( ?。? }; //visitor.cpp int Article::getNu
5、mberOfPages( ?。﹞ retum m_end_page-m_start_page; } void Article::accept(LibraryVisitor*visitor){(4);} Book::Book(string p_author,string p_title,int p_pages){ m_title=p_title; m_author=p_author; m_pages=p_pages; } int Book::getNumberOfPages( ?。﹞return m_pages;} void Book::accept(LibraryVisit
6、or*visitor){(5);} //其余代碼省略 正確答案: 本題解析: (1)virtual void accept(LibraryVisitor*visitor)=0 (2)virtual void visit(Book*p_book)=0 (3)virtual void visit(Article*p_article)=0 (4)visitor->visit(this) (5)visitor->visit(this) 本題考查Visitor(訪問(wèn)者)模式的基本概念和應(yīng)用。 訪問(wèn)者
7、模式是行為設(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è)有V
8、isitor聲明的操作,每個(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,LibraryV
9、isitor對(duì)應(yīng)著Visitor,LibrarySumPrintVisitor對(duì)應(yīng)著ConcreteVisitor。LibraryItemInterface對(duì)應(yīng)著上圖中的元素部分。下面可以結(jié)合程序代碼來(lái)完成程序填空了。 (1)空中,LibraryItemInterface在本題中充當(dāng)著Element的作用,其中應(yīng)定義以一個(gè)訪問(wèn)者為參數(shù)的Accept操作。對(duì)照實(shí)現(xiàn)該接口的兩個(gè)子類Article和Book的代碼,可以得知該操作的原型是void accept(LibraryVisitor visitor)。由此可以得知,此處應(yīng)該定義的是accept操作,此處填寫virtual void accep
10、t(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方法。因此(2)和(3)處分別為virtual void visit(Book*
11、p_book)=0、virtual void visit(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.某大學(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)⒓涌荚嚨?/p>
12、學(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ā)送給教師。 現(xiàn)采用結(jié)構(gòu)化方法對(duì)考試系統(tǒng)進(jìn)行分析與設(shè)計(jì),獲得如圖1-1所示的上下文數(shù)據(jù)流圖和圖1-2所示的
13、0層數(shù)據(jù)流圖。 【問(wèn)題1】(2分) 使用說(shuō)明中的詞語(yǔ),繪出圖1-1中的實(shí)體E1~E2的名稱。 【問(wèn)題2】(4分) 使用說(shuō)明中的詞語(yǔ),給出圖1-2中的數(shù)據(jù)存儲(chǔ)D1~D4的名稱。 【問(wèn)題3】(4分) 根據(jù)說(shuō)明和圖中詞語(yǔ),補(bǔ)充圖1-2中缺失的數(shù)據(jù)流及其起點(diǎn)和終點(diǎn)。 【問(wèn)題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)須使用加工的名稱描述) 正確答案: 本題解析:
14、 【問(wèn)題1】 E1:教師E2:學(xué)生 【問(wèn)題2】 D1:試題D2:學(xué)生信息D3:考試信息D4:解答結(jié)果 【問(wèn)題3】 數(shù)據(jù)流名稱:題目,起點(diǎn):D1,終點(diǎn):2或顯示并接收解答。 數(shù)據(jù)流名稱:答案,起點(diǎn):D1,終點(diǎn):3或處理解答。 【問(wèn)題4】 分解為:創(chuàng)建通知;發(fā)送通知 【問(wèn)題1】 根據(jù)題干,考試系統(tǒng)中涉及到的實(shí)體有“教師“和”“學(xué)生”,及題干中其他相關(guān)信息,如“根據(jù)教師設(shè)定的考試信息,在考試有效時(shí)間內(nèi)向?qū)W生顯示考試說(shuō)明和題目”,根據(jù)1-1可知,E1為教師,E2為學(xué)生。 【問(wèn)題2】 本題要求的是數(shù)據(jù)存儲(chǔ),然后流入這四個(gè)的分別是存儲(chǔ)的信息,則可以確定其名稱。
15、“教師制定試題(題目和答案),制定考試說(shuō)明、考試時(shí)間和提醒時(shí)間等考試信息,錄入?yún)⒓涌荚嚨膶W(xué)生信息,并分別進(jìn)行存儲(chǔ)”即D1為試題,D3為考試信息,D2為學(xué)生信息。 “根據(jù)答案對(duì)接收到的解答數(shù)據(jù)進(jìn)行處理,然后將解答結(jié)果進(jìn)行存儲(chǔ)”即D4為解答結(jié)果。 【問(wèn)題3】 首先根據(jù)父圖和子圖之間的平衡、子圖內(nèi)部的輸入輸出平衡,對(duì)照?qǐng)D1-1和圖1-2的數(shù)據(jù)流是否相同,然后再根據(jù)題干說(shuō)明,仔細(xì)對(duì)照說(shuō)明與圖的對(duì)應(yīng)關(guān)系,來(lái)確定缺失的是什么。 本題首先根據(jù)子圖內(nèi)部的輸入輸出平衡,在“2顯示并接收解答”加工,輸出數(shù)據(jù)流有考試說(shuō)明、題目和題型,而其輸入缺少題目的來(lái)源,因此這里缺少數(shù)據(jù)流:題目,起點(diǎn)為D1試題,終點(diǎn)為2
16、2顯示并接收解答。 根據(jù)題干說(shuō)明和子圖,在“3處理解答”加工,輸入數(shù)據(jù)有解答數(shù)據(jù),輸出數(shù)據(jù)為解答結(jié)果,題干描述“根據(jù)答案對(duì)接收到的解答數(shù)據(jù)進(jìn)行處理”,因此這里缺少數(shù)據(jù)流答案,起點(diǎn)是D1試題,終點(diǎn)是3處理解答。 【問(wèn)題4】 本題考查對(duì)加工的分解。 根據(jù)題干描述“發(fā)送通知。根據(jù)成績(jī)報(bào)告數(shù)據(jù),創(chuàng)建通知數(shù)據(jù)并將通知發(fā)送給學(xué)生;根據(jù)成績(jī)單數(shù)據(jù),創(chuàng)建通知數(shù)據(jù)并將通知發(fā)送給教師”,可知發(fā)送通知可以分為創(chuàng)建通知和發(fā)送通知2個(gè)加工,并且,創(chuàng)建通知有2條輸入數(shù)據(jù)流,成績(jī)報(bào)告數(shù)據(jù),成績(jī)單數(shù)據(jù),它們的起點(diǎn)分別為生成成績(jī)單和生成成績(jī)報(bào)告;而發(fā)送通知的對(duì)象有學(xué)生和老師,在圖中已經(jīng)存在不用處理,為了將2個(gè)加工連接起
17、來(lái),還缺少?gòu)膭?chuàng)建通知到發(fā)送通知的數(shù)據(jù)流,名稱為通知數(shù)據(jù)。 3.某省針對(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ì)有一名主教練和若干
18、名球員。一名主教練只能受聘于一支球隊(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)比賽都記錄比分和日期。 【概念結(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)地址) 球員(
19、姓名,身份證號(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),比分,日期) 【問(wèn)題1】(6分) 補(bǔ)充圖2-1中的聯(lián)系和聯(lián)系的類型。 圖2-1中的聯(lián)系”比賽“應(yīng)具有的屬性是哪些? 【問(wèn)題2】(4分) 根據(jù)圖2-1,將邏輯結(jié)構(gòu)設(shè)計(jì)階段生成的關(guān)系模式中的空(1)~(2)補(bǔ)充完整。 【問(wèn)題3】(5分) 現(xiàn)在系統(tǒng)要增加贊助商信息,贊助商信息主要包括贊助商名稱和贊助商編號(hào)。 贊助商可以贊助某支球隊(duì),一支球隊(duì)只能有一
20、個(gè)贊助商,但贊助商可以贊助多支球隊(duì)。贊助商也可以單獨(dú)贊助某些球員,一名球員可以為多個(gè)贊助商代言。請(qǐng)根據(jù)該要求,對(duì)圖2-1進(jìn)行修改,畫(huà)出修改后的實(shí)體間聯(lián)系和聯(lián)系的類型。 正確答案: 本題解析: 【問(wèn)題1】 比賽聯(lián)系應(yīng)具有的屬性包括:比賽編碼,比分,日期。 【問(wèn)題2】 (1)球隊(duì)編號(hào)(2)球隊(duì)編號(hào) 【問(wèn)題3】 【問(wèn)題1】 根據(jù)題干需求分析中的(2)(3)(4)可以確定聯(lián)系及聯(lián)系類型。 從題干中的關(guān)系模式中可以看出“比賽”的屬性是去掉球隊(duì)和主裁判的主鍵,即剩下的是:比賽編碼,比分和日期。
21、 【問(wèn)題2】 根據(jù)題干描述和圖示可知,需要在關(guān)系模式中應(yīng)該把球隊(duì)的主鍵添上去,即添上球隊(duì)編號(hào)。 【問(wèn)題3】 此題相當(dāng)于把文字轉(zhuǎn)化為ER圖,根據(jù)關(guān)鍵字:贊助商,球隊(duì)和球員,及其聯(lián)系就可以確定了。 “一支球隊(duì)只能有一個(gè)贊助商,但贊助商可以贊助多支球隊(duì)”,因此球隊(duì)和贊助商為*:1的聯(lián)系; “一名球員可以為多個(gè)贊助商代言”,并且球員是球隊(duì)的一部分,因此球隊(duì)和贊助商為*:*的聯(lián)系。 4.某物品拍賣網(wǎng)站為參與者提供物品拍賣平臺(tái),組織拍賣過(guò)程,提供在線或線下交易服務(wù)。網(wǎng)站主要功能描述如下: (1)拍賣參與者分為個(gè)人參與者和團(tuán)體參與者兩種。不同的團(tuán)體也可以組成新的
22、團(tuán)體參與拍賣活動(dòng)。網(wǎng)站記錄每個(gè)參與者的名稱。 (2)一次拍賣中,參與者或者是買方,或者是賣方。 (3)一次拍賣只拍出來(lái)自一個(gè)賣方的一件拍賣品;多個(gè)買方可以出價(jià):賣方接受其中一個(gè)出價(jià)作為成交價(jià),拍賣過(guò)程結(jié)束。 (4)在拍賣結(jié)算階段,買賣雙方可以選擇兩種成交方式:線下成交,買賣雙方在事先約定好的成交地點(diǎn),當(dāng)面完成物價(jià)款的支付和拍賣品的交付;在線成交,買方通過(guò)網(wǎng)上支付平臺(tái)支付物價(jià)款,拍賣品由賣方通過(guò)快遞郵寄給買方。 一次拍賣過(guò)程的基本事件流描述如下: (1)賣方在網(wǎng)站上發(fā)起一次拍賣,并設(shè)置本次拍賣的起拍價(jià)。 (2)確定拍賣標(biāo)的以及拍賣標(biāo)的保留價(jià)(若在拍賣時(shí)間結(jié)束時(shí),所有出價(jià)均低于拍賣標(biāo)的
23、保留價(jià),則本次拍賣失?。?。 (3)在網(wǎng)站上發(fā)布本次拍賣品的介紹。 (4)買方參與拍賣,給出竟拍價(jià)。 (5)賣方選擇接受一個(gè)竟拍價(jià)作為成交價(jià),結(jié)束拍賣。 (6)系統(tǒng)記錄拍賣成交價(jià),進(jìn)入拍賣結(jié)算階段。 (7)賣方和買方協(xié)商拍賣品成交方式,并完成成交。 現(xiàn)采用面向?qū)ο蠓椒▽?duì)系統(tǒng)進(jìn)行分析與設(shè)計(jì),得到如表3-1所示的類列表以及如圖3-1所示的類圖,類中關(guān)鍵屬性與方法如表3-2所示。 圖3-1類圖 表3-2關(guān)鍵屬性與方法列表 【問(wèn)題1】(7分) 根據(jù)說(shuō)明中的描述,給出圖3-1中(1)~(7)所對(duì)應(yīng)的類名(類名使用表3-1中給出的序號(hào))。 【問(wèn)題2】(5分) 根據(jù)說(shuō)明中的
24、描述,確定表3-2中的屬性/方法分別屬于哪個(gè)類(類名、方法/屬性名使用表3-1、3-2中給出的序號(hào))。 【問(wèn)題3】(3分) 在圖3-1采用了何種設(shè)計(jì)模式?以100字以內(nèi)文字說(shuō)明采用這種設(shè)計(jì)模式的原因。 正確答案: 本題解析: 【問(wèn)題1】 注意:C8和C10可互換,互換后在問(wèn)題2中也必須交換對(duì)應(yīng)位置。 【問(wèn)題2】 【問(wèn)題3】 組合模式,在本題中由于拍賣者分為個(gè)人參與者和團(tuán)體參與者兩種,而團(tuán)體也可以組成新的團(tuán)體參與拍賣活動(dòng)。這樣的整體部分關(guān)系,適合于使用組合模式表達(dá)。 【問(wèn)題1】 圖
25、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(Auction Participant)、C7(OneParticipant)和C9(CompositeParticipant)。C7、C9是特殊的參與者,所以(1)處應(yīng)該為C5;(2)處應(yīng)該為C9,這個(gè)聚集關(guān)系針對(duì)著【說(shuō)明】中的“不同的團(tuán)體也可以組成新的團(tuán)體參與拍賣活動(dòng)”需求;(3)處為C7。 結(jié)
26、合【說(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)該是拍賣中的拍賣品,所以(7)處應(yīng)該是C2。 【問(wèn)題2】 在確定了所有的類之后,確定每個(gè)類的屬性和方法就比較容易了。完成本問(wèn)題需要結(jié)合【說(shuō)明】部分中所給出的拍賣過(guò)程的基本事件流描述。表3-2中的屬性/方法與類之間的對(duì)應(yīng)關(guān)系下表所示。 【問(wèn)題
27、3】 在【說(shuō)明】部分有一個(gè)很明顯的提示:“拍賣參與者分為個(gè)人參與者和團(tuán)體參與者兩種。不同的團(tuán)體也可以組成新的團(tuán)體參與拍賣活動(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ì)象的使用具有一致性。 5.某圖書(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è))。
28、采用Visitor(訪問(wèn)者)模式實(shí)現(xiàn)該要求,得到如圖6-1所示的類圖。 圖6-1 Visitor模式類圖 【Java代碼】 import java.util.*; interface LibraryVisitor{ (1); (2); void printSum( ?。? } class LibrarySumPrintVisitor implements LibraryVisitor{//打印總頁(yè)數(shù) private int sum=0; public void visit(Book p_book){ sum=sum+p_book.getNumberOfPages(
29、?。? } public void visit(Article p_article){ sum=sum+p_article.getNumberOfPages( ); } public void printSum( ?。﹞ System.out.println("SUM="+sum); } } interface LibraryItemInterface{ (3); } class?Article implements LibraryItemInterface{ private String m_title;//論文名 private String m_author
30、;//論文作者 private int?m_start_page; private int?m_end_page; public Article(String p_author,String p_title,int p_start_page,int p_end_page){ m_title=p_title; m_author=p_author; m_end_page=p_end_page; } public int getNumberOfPages( ?。﹞ return m_end_page-m_start_page; } public void accept(Libr
31、aryVisitor Visitor){ (4); } } class Book implements LibraryItemInterface{ private String m_title;//書(shū)名 private String m_author;//書(shū)作者 private int?m_pages;//頁(yè)教 public Book(String p_author,String p_title,int p_pages){ m_title=p_title; m_author=p_author; m_pages=p_pages; } public int getNumb
32、erOfPages( ?。﹞ return m_pages; } public void accept(LibraryVisitor visitor){ (5); } } 正確答案: 本題解析: (1)void visit(Book p_book) (2)void visit(Article p_article) (3)void accept(LibraryVisitor visitor) (4)visitor.visit(this) (5)visitor.visit(this)
33、本題考查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)它
34、。 ?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ú)序集合。 本
35、題中類Library對(duì)應(yīng)著上圖中的Client,LibraryVisitor對(duì)應(yīng)著Visitor,LibrarySumPrintVisitor對(duì)應(yīng)著ConcreteVisitor。LibraryItemInterface對(duì)應(yīng)著上圖中的元素部分。下面可以結(jié)合程序代碼來(lái)完成程序填空了。 (1)和(2)空與類LibraryVisitor有關(guān)。由前文分析已知,LibraryVisitor對(duì)應(yīng)著訪問(wèn)者模式中的Visitor,其作用是為類LibrarySumPrintVisitor聲明Visit操作。類LibrarySumPrintVisitor需要訪問(wèn)兩種不同的元素,每種元素應(yīng)該對(duì)應(yīng)不同的visit操
36、作。再結(jié)合類LibrarySumPrintVisitor的定義部分,可以得知(2)和(3)處應(yīng)給出分別以Book和Article為參數(shù)的visit方法。因此(1)和(2)處分別為"void visit(Book p_book)"、"void visit(Article p_article)"。 LibraryItemInterface在本題中充當(dāng)著Element的作用,其中應(yīng)定義以一個(gè)訪問(wèn)者為參數(shù)的Accept操作。對(duì)照實(shí)現(xiàn)該接口的兩個(gè)子類Article和Book的代碼,可以得知該操作的原型是void accept(LibraryVisitor visitor)。由此可以得知,(3)處應(yīng)填寫
37、“void accept(Library Visitor visitor)”。 (4)和(5)處考查的是accept接口的實(shí)現(xiàn)。由訪問(wèn)者模式的結(jié)構(gòu)圖可以看出,在Book和Article中accept方法的實(shí)現(xiàn)均為Visitor.visit(this)。 6.n-皇后問(wèn)題是在n行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è)皇
38、后;若與之前的皇后沖突,則考慮下一列;若超出最后一列,則重新確定上一個(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<stdio.h> #include<math.h> #define N4 /*判斷第k個(gè)皇后目前放置位置是否與前面的皇后沖突*/ int isplace(int pos[],int k){ int i; for(i=1;i<k;i+
39、+){ if((1)||fabs(i-k)══fabs(pos[i]-pos[k])){ return 0; } } return 1; } int main( ?。﹞ int i,j,count=1; int pos[N+1]; //初始化位置 for(i=1;i<=N;i++){ pos[i]=0; } (2); while(j>=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
40、){ 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); } } return 1; } 【問(wèn)題1】(10分) 根據(jù)以上說(shuō)明和C代碼,填充C代碼中的空(1)~(5)。 【問(wèn)題2】(2分) 根據(jù)以上說(shuō)明和C代碼,算法采用了(6)設(shè)計(jì)策略。 【問(wèn)題3】(3分) 上述C代碼的輸出為: (7)。
41、 正確答案: 本題解析: 【問(wèn)題1】 (1)pos[i]==pos[k] (2)j=1 (3)isplace(pos,j)==0 (4)j<N (5)j=j-1 【問(wèn)題2】 (6)回溯法 【問(wèn)題3】 (7) 方案1:2 4 1 3 方案2:3 1 4 2 本題考查算法設(shè)計(jì)和C程序設(shè)計(jì)語(yǔ)言的相關(guān)知識(shí)。 此類題目要求考生認(rèn)真閱讀題目,理解算法思想,并思考將算法思想轉(zhuǎn)化為具體的程序設(shè)計(jì)語(yǔ)言的代碼。 【問(wèn)題1】 根據(jù)題干描述??眨?)所在的代碼行判斷皇后合法放置的約束條件,即不在同一行,這
42、通過(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)填寫"j=1"??眨?)所在的行是判斷放置第j個(gè)皇后的位置是否合適,"pos[j]<=N"表示在該行的合法列上,但還需要進(jìn)一步判斷是否與前面的皇后有沖突,根據(jù)滿足條件后的語(yǔ)句,嘗試放入下一列,因此空(3)處填入"!isplace(pos,j)。根據(jù)
43、前面的注釋,空(4)所在的行是考慮下一個(gè)皇后,其條件是,當(dāng)前皇后找到了合適的位置,而且還存在下一個(gè)皇后,因此空(4)處應(yīng)填入"j<N"。根據(jù)下面的注釋,若當(dāng)前皇后沒(méi)有找到合適的位置,則應(yīng)回溯,即再次考慮上一個(gè)皇后的位置,因此空(5)處填入"j=j-1"。 【問(wèn)題2】 從上述題干的敘述和C代碼很容易看出,從第一個(gè)皇后開(kāi)始,對(duì)每個(gè)皇后總是從第一個(gè)位置開(kāi)始嘗試,找到可以放置的合法位置;若某個(gè)皇后在對(duì)應(yīng)的行上沒(méi)有合法位置,則回溯到上一個(gè)皇后,嘗試將上一個(gè)皇后放置另外的位置。這是典型的深度優(yōu)先的系統(tǒng)搜索方式,即回溯法的思想。 【問(wèn)題3】 四皇后問(wèn)題的答案為: 方案1:2 4 1 3 方案2:3 1 4 2 如表4-1所示: 表4-1 方案1方案2
- 溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年二年級(jí)數(shù)學(xué)上冊(cè)9總復(fù)習(xí)專題二圖形與幾何作業(yè)課件新人教版
- 2023年二年級(jí)數(shù)學(xué)上冊(cè)6表內(nèi)乘法二第4節(jié)9的乘法口訣作業(yè)課件新人教版
- 2023年二年級(jí)數(shù)學(xué)上冊(cè)4表內(nèi)乘法一22~6的乘法口訣第2節(jié)234的乘法口訣作業(yè)課件新人教版
- 2023年二年級(jí)數(shù)學(xué)上冊(cè)2100以內(nèi)的加法和減法二3連加連減和加減混合第4課時(shí)解決問(wèn)題作業(yè)課件新人教版
- 2023年二年級(jí)數(shù)學(xué)上冊(cè)1長(zhǎng)度單位單元復(fù)習(xí)提升作業(yè)課件新人教版
- 2023年三年級(jí)數(shù)學(xué)下冊(cè)第四單元綠色生態(tài)園__解決問(wèn)題信息窗1用連乘連除兩步運(yùn)算解決問(wèn)題作業(yè)課件青島版六三制
- 2023年三年級(jí)數(shù)學(xué)下冊(cè)第六單元認(rèn)識(shí)分?jǐn)?shù)第4課時(shí)分一分二2作業(yè)課件北師大版
- 2023年三年級(jí)數(shù)學(xué)下冊(cè)第二單元長(zhǎng)方形和正方形的面積第4課時(shí)長(zhǎng)方形和正方形面積的計(jì)算1作業(yè)課件西師大版
- 2023年三年級(jí)數(shù)學(xué)下冊(cè)第三單元三位數(shù)除以一位數(shù)的除法第4課時(shí)筆算除法1作業(yè)課件西師大版
- 2023年三年級(jí)數(shù)學(xué)下冊(cè)第一單元除法練習(xí)二作業(yè)課件北師大版
- 2023年三年級(jí)數(shù)學(xué)下冊(cè)第一_五單元階段性綜合復(fù)習(xí)作業(yè)課件蘇教版
- 2023年三年級(jí)數(shù)學(xué)下冊(cè)第6單元年月日第1課時(shí)年月日1作業(yè)課件新人教版
- 2023年三年級(jí)數(shù)學(xué)下冊(cè)第4單元兩位數(shù)乘兩位數(shù)拓展提升四作業(yè)課件新人教版
- 2023年三年級(jí)數(shù)學(xué)下冊(cè)第4單元兩位數(shù)乘兩位數(shù)1口算乘法第2課時(shí)口算乘法2作業(yè)課件新人教版
- 2023年三年級(jí)數(shù)學(xué)下冊(cè)第2單元除數(shù)是一位數(shù)的除法2筆算除法第4課時(shí)商中間有0的除法作業(yè)課件新人教版