2011(下半年)試題及答案(下午).doc_第1頁
2011(下半年)試題及答案(下午).doc_第2頁
2011(下半年)試題及答案(下午).doc_第3頁
2011(下半年)試題及答案(下午).doc_第4頁
2011(下半年)試題及答案(下午).doc_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第8章 軟件設(shè)計師下午試題分析與解答試題一閱讀下列說明和圖,回答問題1至問題4,將解答填入答題紙的對應(yīng)欄內(nèi)。說明某公司欲開發(fā)招聘系統(tǒng)以提高招聘效率,其主要功能如下:(1)接受申請驗證應(yīng)聘者所提供的自身信息是否完整,是否說明了應(yīng)聘職位,受理驗證合格的申請,給應(yīng)聘者發(fā)送致謝信息。(2)評估應(yīng)聘者根據(jù)部門經(jīng)理設(shè)置的職位要求,審查已經(jīng)受理的申請;對未被錄用的應(yīng)聘者進行謝絕處理,將未被錄用的應(yīng)聘者信息存入未錄用的應(yīng)聘者表,并給其發(fā)送謝絕決策;對錄用的應(yīng)聘者進行職位安排評價,將評價結(jié)果存入評價結(jié)果表,并給其發(fā)送錄用決策,發(fā)送錄用職位和錄用者信息給工資系統(tǒng)?,F(xiàn)采用結(jié)構(gòu)化方法對招聘系統(tǒng)進行分析與設(shè)計,獲得如圖1-1所示的頂層數(shù)據(jù)流圖、圖1-2所示0層數(shù)據(jù)流圖和圖1-3所示1層數(shù)據(jù)流圖。問題1使用說明中的術(shù)語,給出圖中E1E3所對應(yīng)的實體名稱。答:E1:應(yīng)聘者 E2: 部門經(jīng)理 E3: 工資系統(tǒng)問題2 使用說明中的術(shù)語,給出圖中D1D2所對應(yīng)的數(shù)據(jù)存儲答:D1: 未錄用的應(yīng)聘者表 D2: 評價結(jié)果表問題3使用說明和圖中的術(shù)語,給出圖1-3中加工P1P3的名稱。答:P1:驗證申請 P2: 審查申請 P3: 職位安排評價問題4解釋說明圖1-2和圖1-3是否保持平衡,若不平衡請按如下格式補充圖1-3中數(shù)據(jù)流的名稱以及數(shù)據(jù)流的起點或終點,使其平衡(使用說明中的術(shù)語或圖中符號)。 答:數(shù)據(jù)流名稱起 點錄用職位P3 或 2.3職位安排評價已受理的申請1.2受理申請謝絕決策2.2謝絕應(yīng)聘者試題二閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對應(yīng)欄內(nèi)。說明某物流公司為了整合上游供應(yīng)商與下游客戶,縮短物流過程,降低產(chǎn)品庫存,需要構(gòu)建一個信息系統(tǒng)以方便管理其業(yè)務(wù)運作活動。需求分析結(jié)果(1)物流公司包含若干部門,部門信息包括部門號、部門名稱、經(jīng)理、電話和郵箱。一個部門可以有多名員工處理部門的日常事務(wù),每名員工只能在一個部門工作。每個部門有一名經(jīng)理,只需負責(zé)管理本部門的事務(wù)和人員。(2)員工信息包括員工號、姓名、職位、電話號碼和工資;其中,職位包括:經(jīng)理、業(yè)務(wù)員等。業(yè)務(wù)員根據(jù)托運申請負責(zé)安排承運貨物事宜,例如:裝貨時間、到達時間等。一個業(yè)務(wù)員可以安排多個托運申請,但一個托運申請只由一個業(yè)務(wù)員處理。(3)客戶信息包括客戶號、單位名稱、通信地址、所屬省份、聯(lián)系人、聯(lián)系電話、銀行賬號,其中,客戶號唯一標(biāo)識客戶信息的每一個元組。每當(dāng)客戶要進行貨物托運時,先要提出貨物托運申請。托運申請信息包括申請?zhí)?、客戶號、貨物名稱、數(shù)量、運費、出發(fā)地、目的地。其中,一個申請?zhí)枌?yīng)唯一的一個托運申請;一個客戶可以有多個貨物托運申請,但一個托運申請對應(yīng)唯一的一個客戶號。概念模型設(shè)計根據(jù)需求階段收集的信息,設(shè)計的實體聯(lián)系圖和關(guān)系模式(不完整)如圖2-1所示。關(guān)系模式設(shè)計部門(部門號,部門名稱,經(jīng)理,電話,郵箱)員工(員工號,姓名,職位,電話號碼,工資, (a) 部門號 )客戶( (b) ,單位名稱,通信地址,所屬省份,聯(lián)系人,聯(lián)系電話,銀行賬號)托運申請( (c) ,貨物名稱,數(shù)量,運費,出發(fā)地,目的地) 申請?zhí)枴⒖蛻籼?、貨物名稱、數(shù)量、運費、出發(fā)地、目的地安排承運( (d) ,裝貨時間,到達時間,業(yè)務(wù)員)問題1根據(jù)問題描述,補充四個聯(lián)系、聯(lián)系的類型,以及實體與子實體的聯(lián)系,完善圖2-1所示的實體聯(lián)系圖。答:托運申請客戶員工部門處理申請安排管理業(yè)務(wù)員經(jīng)理nn11n111問題2根據(jù)實體聯(lián)系圖,將關(guān)系模式中的空(a)(d)補充完整。分別指出部門、員工和安排承運關(guān)系模式的主鍵和外鍵。答:(1)a: 部門號 b: 客戶號c: 申請?zhí)枴⒖蛻籼?d: 申請?zhí)枺?)部門: 主鍵:部門號 外鍵:無員工: 主鍵:員工號 外鍵:部門號安排承運:主鍵:申請?zhí)?外鍵:無問題3若系統(tǒng)新增需求描述如下:為了數(shù)據(jù)庫信息的安全性,公司要求對數(shù)據(jù)庫操作設(shè)置權(quán)限管理功能,當(dāng)員工登錄系統(tǒng)時,系統(tǒng)需要檢查員工的權(quán)限。權(quán)限的設(shè)置人是部門經(jīng)理。為滿足上述需要,應(yīng)如何修改(或補充)圖2-1所示的實體聯(lián)系圖,請給出修改后的實體聯(lián)系圖和關(guān)系模式。權(quán)限客戶員工部門處理申請安排管理業(yè)務(wù)員經(jīng)理設(shè)置托運申請答:1nnn11111n試題二分析本題考查數(shù)據(jù)庫系統(tǒng)中實體聯(lián)系模型(E-R模型)和關(guān)系模式設(shè)計方面的應(yīng)用知識。問題1兩個實體集之間的聯(lián)系類型分為三類:一對一(1:1)聯(lián)系、一對多(1:n)聯(lián)系和多對多(m:n)聯(lián)系。根據(jù)題意,每名員工只能在一個部門工作,所以部門和員工之間有一個1:n的“所屬”聯(lián)系;由于每個部門有一名經(jīng)理,只需負責(zé)管理本部門的事務(wù)和人員,因此部門和經(jīng)理之間有一個1:1的“管理”聯(lián)系;由于一個業(yè)務(wù)員可以安排多個托運申請,但一個托運申請只由一個業(yè)務(wù)員處理,故業(yè)務(wù)員和托運申請之間有一個1:n的“托運”聯(lián)系;又由于一個客戶可以有多個貨物托運申請,但一個托運申請對應(yīng)唯一的一個客戶號,故客戶和托運申請之間有一個1:n的“申請”聯(lián)系。根據(jù)上述分析,完善圖2-1所示的實體聯(lián)系圖可參見參考答案。問題2根據(jù)題意,部門和員工之間有一個1:n的“所屬”聯(lián)系需要將一端的碼并入多端,故員工關(guān)系模式中的空(a)應(yīng)填寫部門號;在客戶關(guān)系模式中,客戶號為主鍵,故空(b)應(yīng)填寫客戶號;在托運申請關(guān)系模式中,申請?zhí)?、客戶號為主鍵,故空(c)應(yīng)填寫申請?zhí)枴⒖蛻籼?;又由于一個業(yè)務(wù)員可以安排多個托運申請,但一個托運申請只由一個業(yè)務(wù)員處理,因此在安排承運關(guān)系模式中,申請?zhí)枮橹麈I,故空(d)應(yīng)填寫申請?zhí)枴2块T關(guān)系模式中的部門號為主鍵,經(jīng)理為外鍵;因為經(jīng)理來自員工關(guān)系。員工關(guān)系模式中的員工號為主鍵,部門號為外鍵,因為部門號來自部門關(guān)系。安排承運關(guān)系模式中的申請?zhí)枮橹麈I,業(yè)務(wù)員為外鍵,因為業(yè)務(wù)員來自員工關(guān)系。問題3根據(jù)題意,權(quán)限的設(shè)置人是部門經(jīng)理,因此,需要建立一個權(quán)限關(guān)系模式,以及經(jīng)理到權(quán)限之間的1:n的“設(shè)置”聯(lián)系。修改后的實體聯(lián)系圖和關(guān)系模式參見參考答案。參考答案問題1問題2(a)部門號(b)客戶號(c)申請?zhí)枺蛻籼?d)申請?zhí)柌块T主鍵:部門號外鍵:經(jīng)理員工主鍵:員工號外鍵:部門號安排承運主鍵:申請?zhí)柾怄I:業(yè)務(wù)員問題3關(guān)系模式:權(quán)限(員工號,權(quán)限,設(shè)置人)或權(quán)限(員工號,權(quán)限,部門經(jīng)理)試題三閱讀下列說明和圖,回答問題1至問題3,將解答填入答題紙的對應(yīng)欄內(nèi)。說明Pay&Drive系統(tǒng)(開多少付多少)能夠根據(jù)駕駛里程自動計算應(yīng)付的費用。系統(tǒng)中存儲了特定區(qū)域的道路交通網(wǎng)的信息。道路交通網(wǎng)由若干個路段(RoadSegment)構(gòu)成,每個路段由兩個地理坐標(biāo)點(Node)標(biāo)定,其里程數(shù)(Distance)是已知的。在某些地理坐標(biāo)點上安裝了訪問控制(Access Control)設(shè)備,可以自動掃描行駛卡(Card)。行程(Trajectory)由一組連續(xù)的路段構(gòu)成。行程的起點(Entry)和終點(Exit)都裝有訪問控制設(shè)備。系統(tǒng)提供了3種行駛卡。常規(guī)卡(Regular Card)有效期(Valid Period)為一年,可以在整個道路交通網(wǎng)內(nèi)使用。季卡(Season Card)有效期為三個月,可以在整個道路交通網(wǎng)內(nèi)使用。單次卡(Minitrip Card)在指定的行程內(nèi)使用,且只能使用一次。其中,季卡和單次卡都是預(yù)付卡(Prepaid Card),需要客戶(Customer)預(yù)存一定的費用。系統(tǒng)的主要功能有:客戶注冊、申請行駛卡、使用行駛卡行駛等。使用常規(guī)卡行駛,在進入行程起點時,系統(tǒng)記錄行程起點、進入時間(Date Of Entry)等信息。在到達行程終點時,系統(tǒng)根據(jù)行駛的里程數(shù)和所持卡的里程單價(Unit Price)計算應(yīng)付費用,并打印費用單(Invoice)。季卡的使用流程與常規(guī)卡類似,但是不需要打印費用單,系統(tǒng)自動從卡中扣除應(yīng)付費用。單次卡的使用流程與季卡類似,但還需要在行程的起點和終點上檢查行駛路線是否符合該卡所規(guī)定的行駛路線。現(xiàn)采用面向?qū)ο蠓椒ㄩ_發(fā)該系統(tǒng),使用UML進行建模。構(gòu)建出的用例圖和類圖分別如圖3-1和圖3-2所示。問題1根據(jù)說明中的描述,給出圖3-1中U1和U2所對應(yīng)的用例,以及(1)所對應(yīng)的關(guān)系。答:U1:使用常規(guī)卡行駛 U2:使用單次卡行駛(1):問題2根據(jù)說明中的描述,給出圖3-2中缺少的C1C6所對應(yīng)的類名以及(2)(3)處所對應(yīng)的多重度(類名使用說明中給出的英文詞匯)。答:C1: RoadSegment C2: TrajectoryC3: Card C4: Regular CardC5: Prepaid Card C6: Minitrip Card(2):1(3):13問題3根據(jù)說明中的描述,給出Road Segment、Trajectory和Card所對應(yīng)的類的關(guān)鍵屬性(屬性名使用說明中給出的英文詞匯)。答:RoadSegment的屬性:DistanceTrajectory的屬性:Entry、Exit、DateOfEntryCard的屬性:UnitPrice、ValidPeriod試題三分析本題屬于經(jīng)典的考題,主要考查面向?qū)ο蠓治龇椒ㄒ约癠ML的用例圖和類圖的相關(guān)知識。問題1本問題要求將圖3-1所給出的用例圖補充完整。用例圖的構(gòu)成要素有:參與者、用例以及用例之間的關(guān)系。圖中缺少了兩個用例,以及一個用例關(guān)系。解答此題時,首先應(yīng)從說明中找到所有的用例。用例表示系統(tǒng)的一個單一業(yè)務(wù)功能。從題目的描述中可以看出,系統(tǒng)的主要功能就是申請行駛卡,以及使用行駛卡行駛。由于行駛卡分為三種,所以在說明中詳細描述了三種行駛卡的使用方法。再結(jié)合用例圖來看,缺少的兩個用例與用例“使用季卡行駛”有關(guān)聯(lián)關(guān)系,由此可以推斷出,需要補充的這兩個用例必定與另外兩種行駛卡相關(guān),分別為“使用常規(guī)卡行駛”和“使用單次卡行駛”。下面需要解決的問題是這兩個用例與U1和U2的對應(yīng)關(guān)系。這就需要仔細考查一下用例圖所給出的用例關(guān)系。由圖3-1可知,U1和“使用季卡行駛”之間是泛化(generalization)關(guān)系。當(dāng)多個用例共同擁有一種類似的結(jié)構(gòu)和行為時,可以將它們的共性抽象為父用例,其他的用例作為泛化關(guān)系中的子用例。在用例的泛化關(guān)系中,子用例是父用例的一種特殊形式,子用例繼承了父用例所有的結(jié)構(gòu)、行為和關(guān)系。根據(jù)說明中的“季卡的使用流程與常規(guī)卡類似,但是不需要打印費用單,系統(tǒng)自動從卡中扣除應(yīng)付費用”可知,U1應(yīng)該對應(yīng)著用例“使用常規(guī)卡行駛”。由此不難得出U2對應(yīng)著用例“用單次卡行駛”?,F(xiàn)在圖中只剩下(1)處的用例關(guān)系沒有確定。用例之間的關(guān)系在用例圖上只有三種:包含(include)、擴展(extend)和泛化(generalization)。包含關(guān)系是指當(dāng)多個用例中存在相同事件流時,可以把這些公共事件流抽象成為公共用例,這個公共用例稱為抽象用例,而原始用例稱為基礎(chǔ)用例。基礎(chǔ)用例和抽象用例之間是包含關(guān)系。如果一個用例明顯地混合了兩種或兩種以上的不同場景,則可以將這個用例分為一個基本用例和多個擴展用例。擴展關(guān)系用“extend”表示,箭頭指向基本用例。包含關(guān)系和擴展關(guān)系的區(qū)別在于,抽象用例中的事件流一定要插入到基本用例中去,并且插入點只有一個,通常抽象用例不能脫離基本用例而獨立存在。擴展用例的事件流往往可以抽象為基本用例的備選事件流,在擴展關(guān)系中,可以根據(jù)一定的條件來決定是否將擴展用例的事件流插入到基本用例的事件流中,并且插入點可以有多個。根據(jù)以上分析可知,(1)處的用例關(guān)系選擇“extend”最為合適。問題2本問題考查的是類圖建模。解題的重點在于根據(jù)類圖中提供的類及類之間的關(guān)聯(lián)關(guān)系,推斷出剩余的類。可以先觀察一下類圖??梢钥吹剑枰a充的類基本上集中在兩個結(jié)構(gòu)上:聚集結(jié)構(gòu)(類C1和C2)以及繼承結(jié)構(gòu)(類C3C6)。繼承結(jié)構(gòu)是比較容易辨識的類之間的關(guān)聯(lián)關(guān)系,圖上給出了其中的一個子類SeasonCard。以這個類為線索,回到說明中尋找與類SeasonCard相關(guān)的其他類。從說明中可知,“系統(tǒng)提供了3種卡”,常規(guī)卡、季卡、單次卡,而“季卡和單次卡都是預(yù)付卡”。這些描述暗示,“季卡”、“單次卡”與“預(yù)付卡”之間存在著特殊/一般關(guān)系,即“is-a”關(guān)系,這是繼承結(jié)構(gòu)的典型標(biāo)志。由此可以得出類C5和C6應(yīng)該分別對應(yīng)PrepaidCard(預(yù)付卡)和MinitripCard(單次卡)。根據(jù)C5和C6所對應(yīng)的類,可以推斷出,C4和C3必定也是與行駛卡相關(guān)的類。三種卡中,已經(jīng)有兩種卡有了對應(yīng)的類,還剩下一種卡即“常規(guī)卡”。而“常規(guī)卡”只能是與“預(yù)付卡”同層次的概念,所以只能對應(yīng)于C4,C3表示的是能代表所有這幾種卡的公共概念。所以C3和C4應(yīng)分別對應(yīng)于Card和RegularCard。確定了C3之后,就可以識別出(2)和(3)處的多重度。Customer和Card之間是持有和被持有的關(guān)系,由于系統(tǒng)中只有3種卡,所以一個客戶最多只能有3種卡,所以(3)處應(yīng)填1.3。而對于任何一張卡來說,只能有唯一地一個所屬人,因此(2)處應(yīng)填1?,F(xiàn)在還剩下類C1和C2沒有確定。由于這兩個類之間是聚集關(guān)系,所以需要在說明中尋找具有“部分一整體”關(guān)系的概念。由說明中的“行程(Trajectory)由一組連續(xù)的路段構(gòu)成”可知,C1和C2應(yīng)分別對應(yīng)于RoadSegment和Trajectory。問題3本問題考查類的關(guān)鍵屬性的識別。由說明中給出的描述可知,類RoadSegment的屬性至少應(yīng)包括Distance;類Trajectory的屬性至少應(yīng)包括Entry、Exit和DateOfEntry;類Card的屬性至少應(yīng)包括UnitPrice、ValidPeriod。參考答案問題1U1:使用常規(guī)卡行駛 U2:使用單次卡行駛 (1):extend問題2C1:RoadSegment C2:Trajectory C3:CardC4:RegularCard C5:PrepaidCard C6:MinitripCard(2)1 (3)1.3問題3RoadSegment的屬性:DistanceTrajectory的屬性:Entry、Exit、DateOfEntryCard的屬性:UnitPrice、ValidPeriod試題四閱讀下列說明和C代碼,將應(yīng)填入 (n) 處的字句寫在答題紙的對應(yīng)欄內(nèi)。說明設(shè)某一機器由n個部件組成,每一個部件都可以從m個不同的供應(yīng)商處購得。供應(yīng)商j供應(yīng)的部件i具有重量wij和價格cij。設(shè)計一個算法,求解總價格不超過上限cc的最小重量的機器組成。采用回溯法來求解該問題:首先定義解空間。解空間由長度為n的向量組成,其中每個分量取值來自集合1,2,m),將解空間用樹形結(jié)構(gòu)表示。接著從根結(jié)點開始,以深度優(yōu)先的方式搜索整個解空間。從根結(jié)點開始,根結(jié)點成為活結(jié)點,同時也成為當(dāng)前的擴展結(jié)點。向縱深方向考慮第一個部件從第一個供應(yīng)商處購買,得到一個新結(jié)點。判斷當(dāng)前的機器價格(c11)是否超過上限(cc),重量(w11)是否比當(dāng)前已知的解(最小重量)大,若是,應(yīng)回溯至最近的一個活結(jié)點;若否,則該新結(jié)點成為活結(jié)點,同時也成為當(dāng)前的擴展結(jié)點,根結(jié)點不再是擴展結(jié)點。繼續(xù)向縱深方向考慮第二個部件從第一個供應(yīng)商處購買,得到一個新結(jié)點。同樣判斷當(dāng)前的機器價格(c11+c21)是否超過上限(cc),重量(w11+w21)是否比當(dāng)前已知的解(最小重量)大。若是,應(yīng)回溯至最近的一個活結(jié)點;若否,則該新結(jié)點成為活結(jié)點,同時也成為當(dāng)前的擴展結(jié)點,原來的結(jié)點不再是擴展結(jié)點。以這種方式遞歸地在解空間中搜索,直到找到所要求的解或者解空間中已無活結(jié)點為止。C代碼下面是該算法的C語言實現(xiàn)。(1)變量說明n:機器的部件數(shù)m:供應(yīng)商數(shù)cc:價格上限w:二維數(shù)組,wij表示第j個供應(yīng)商供應(yīng)的第i個部件的重量c:二維數(shù)組,cij表示第j個供應(yīng)商供應(yīng)的第i個部件的價格bestW:滿足價格上限約束條件的最小機器重量bestC:最小重量機器的價格bestX:最優(yōu)解,一維數(shù)組,bestXi表示第i個部件來自哪個供應(yīng)商cw:搜索過程中機器的重量cp:搜索過程中機器的價格x:搜索過程中產(chǎn)生的解,xi表示第i個部件來自哪個供應(yīng)商i:當(dāng)前考慮的部件,從0到n-1j:循環(huán)變量(2)函數(shù)backtrackint n=3;int m=3;int cc=4;int w33=1,2,3,3,2,1,2,2,2;int c33=1,2,3,3,2,1,2,2,2;int bestW=8;int bestC=0;int bestX3=0,0,0;int cw=0;int cp=0;int x3=0,0,0;int backtrack (int i)int j=0;int found=0;if(in-1) /*得到問題解*/bestW=cw;bestC=cp;for(j=0; jn; j+)(1) ; /bestXj=xjreturn 1;if (cp=cc)(/*有解*/found=1;for(j=0; (2) ; j+) /jm/*第i個部件從第j個供應(yīng)商購買*/(3) ; /xi=jcw=cw+wi j;cp=cp+ci j;if (cp=cc& (4) )/*深度搜索,擴展當(dāng)前結(jié)點*/cw0投入2元錢有2元錢沒有投幣售出紙巾紙巾售完按下取紙巾按鈕紙巾數(shù)0 圖5-1 紙巾售賣機的狀態(tài)圖采用狀態(tài)(State)模式來實現(xiàn)該紙巾售賣機,得到如圖5-2所示的類圖。其中類State為抽象類,定義了投幣、退幣、出紙巾等方法接口。類SoldState、SoldOutState、NoQuarterState和HasQuarterState分別對應(yīng)圖5-1中紙巾售賣機的4種狀態(tài):售出紙巾、紙巾售完、沒有投幣、有2元錢。C+代碼#include iostreamusing namespace std;/以下為類的定義部分 class TissueMachine; /類的提前引用 class State public: virtual void insertQuarter()=0; /投幣 virtual void ejectQuarter()=0; /退幣 virtual void turnCrank()=0; /按下“出紙巾”按鈕 virtual void dispense()=0; /出紙巾 ; /*類SoldOutState、NoQuarterState、HasQuarterState、SoldState的定義省略,每個類中均定義了私有數(shù)據(jù)成員TissueMachine*tissueMachine;*/ class TissueMachine private: (1)*soldOutState,*noQuarterState,*hasQuarterState,*soldState,*state; /(1) Stateint count; /紙巾數(shù) public: TissueMachine(int numbers); void setState(State* state); State* getHasQuarterState(); State* getNoQuarterState(); State* getSoldState(); State* getSoldOutState(); int getCount(); /其余代碼省略; /以下為類的實現(xiàn)部分 void NoQuarterState :insertQuarter() tissueMachine-setState( (2) ); /(2) tissueMachine-getHasQuarterState() void HasQuarterState :ejectQuarter()tissueMachine-setState( (3) ); / (3)tissueMachine-getNoQuarterState() void SoldState :dispense() if(tissueMachine-getCount()0) tissueMachine-setState( (4) ); ) /(4)tissueMachine-getNoQuarterState()else tissueMachine-setState( (5) ); ) /(5)tissueMachine- getSoldOutState() /其余代碼省略(1) State(2) tissueMachine-getHasQuarterState()(3) tissueMachine-getNoQuarterState()(4) tissueMachine-getNoQuarterState()(5) tissueMachine-getSoldoutState()試題五分析本題考查狀態(tài)(State)模式的概念及應(yīng)用。狀態(tài)模式是一種對象的行為型模式,允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為,對象看起來似乎修改了它的類。狀態(tài)模式的類圖如下所示:狀態(tài)模式主要解決的是控制一個對象轉(zhuǎn)換的條件表達式過于復(fù)雜的情況。把狀態(tài)的判斷邏輯轉(zhuǎn)移到表示不同狀態(tài)的一系列類當(dāng)中,可以把復(fù)雜的判斷邏輯簡化。狀態(tài)模式的好處是將與特定狀態(tài)相關(guān)的行為局部化,并且將不同狀態(tài)的行為分割開來。題目利用狀態(tài)模式來實現(xiàn)一個簡易的紙巾售賣機。售賣機的狀態(tài)轉(zhuǎn)換圖已經(jīng)在題目中給出,類S01dState、SoldoutState、NoQuarterState和HasQuaerState分別用來表示售賣機的4種不同狀態(tài),對應(yīng)于狀態(tài)模式中的ConcreteState1,.ConcreteStateN。題目所設(shè)置的填空,主要集中在狀態(tài)轉(zhuǎn)換上。因此解答該題時,要求在理解狀態(tài)模式內(nèi)涵的基礎(chǔ)上,依據(jù)紙巾售賣機的狀態(tài)轉(zhuǎn)換原則,給出正確的狀態(tài)設(shè)置???1)出現(xiàn)在類TissueMachine的數(shù)據(jù)成員定義部分。狀態(tài)模式封裝了狀態(tài)的轉(zhuǎn)換過程,但是它需要枚舉可能的狀態(tài),因此需要確定狀態(tài)種類。因此在類TissueMachine中需定義出所有可能的狀態(tài)對象。根據(jù)所給出的對象名稱及說明中的描述,可知(1)處應(yīng)填入的類名為State???2)(5)都是與狀態(tài)轉(zhuǎn)換相關(guān)的,要求填寫類TissueMachine中的方法setState在不同調(diào)用處的實際參數(shù)。根據(jù)方法的名稱及調(diào)用方式,可以推斷出這個方法的功能就是設(shè)置自動售賣機的當(dāng)前狀態(tài)。要填出這些空,只要對照圖5.1的狀態(tài)轉(zhuǎn)換圖,根據(jù)狀態(tài)轉(zhuǎn)換的條件確定出當(dāng)前狀態(tài)及下一狀態(tài)即可???2)出現(xiàn)在方法insertQuaner內(nèi),即給紙巾售賣機投入2元錢。根據(jù)狀態(tài)圖,“投入2元錢”之后,售賣機應(yīng)轉(zhuǎn)換到“有2元錢”的狀態(tài)?!坝?元錢”對應(yīng)的狀態(tài)的類為“HasQuanerState”,所以空(2)處應(yīng)填類HasQuanerState的對象。由于hasQuanerState是類TissueMachine的私有數(shù)據(jù)成員,不能直接訪問,所以只能通過調(diào)用相關(guān)的get方法來獲取該對象。由此得出(2)應(yīng)填tissueMachine-getHasQuarterState();同理,空(3)表示的狀態(tài)是從“有2元錢”狀態(tài),經(jīng)歷“退回2元錢”事件之后的狀態(tài),及“沒有投幣”狀態(tài)。所以空(3)處應(yīng)填tissueMachine-getNoQuanerState()。空(4)和(5)處分別表示賣出一包紙巾之后,售賣機應(yīng)該轉(zhuǎn)換到的下一個狀態(tài)。這個跟售賣機中的紙巾數(shù)有關(guān),如果還有紙巾,則轉(zhuǎn)換到“沒有投幣”狀態(tài),如果沒有紙巾了,則轉(zhuǎn)換到“紙巾售完”狀態(tài),因此,空(4)處應(yīng)填tissueMachine-getNoQuarterState(),空(5)處應(yīng)填tissueMachine-getSoldOutState()。參考答案(1) State(2) tissueMachine-getHasQuarterState()(3) tissueMachine-getNoQuarterState()(4) tissueMachine-getNoQuarterState()(5) tissueMachine-getSoldoutState()試題六閱讀下列說明和Java代碼,將應(yīng)填入(n)處的字句寫在答題紙的對應(yīng)欄內(nèi)。說明某大型商場內(nèi)安裝了多個簡易的紙巾售賣機,自動出售2元錢一包的紙巾,且每次僅售出一包紙巾。紙巾售賣機的狀態(tài)圖如圖6-1所示。圖6-1退回2元錢紙巾數(shù)0投入2元錢有2元錢沒有投幣售出紙巾紙巾售完按下取紙巾按鈕紙巾數(shù)0 紙巾售賣機的狀態(tài)圖采用狀態(tài)(State)模式來實現(xiàn)該紙巾售賣機,得到如圖6-2所示的類圖。其中類State為抽象類,定義了投幣、退幣、出紙巾等方法接口。類SoldState、SoldOutState、NoQuarterState和HasQuarterState分別對應(yīng)圖6-1中紙巾售賣機的4種狀態(tài):售出紙巾、紙巾售完、沒有投幣、有2元錢。Java代碼import java.util.*;interface Statepublic void insertQuarter(); /投幣public void ejectQuarter(); /退幣public void turnCrank(); /按下“出紙巾”按鈕public void dispense(); /出紙巾class TissueMachine(1)soldOutState,noQuarterState,hasQuarterState,soldState,state;/ (1) Statestate=soldOutState;int count=0; /紙巾數(shù)public TissueMachine(int numbers) /*實現(xiàn)代碼省略*/)public State getHasQuarterState() return hasQuarterState;public State getNoQuarterState() return noQuarterState; public State getSoldState() return soldState; public State getSoldOutState() return soldOutState; public int getCount() retum count; /其余代碼省略class NoQuarterState implements StateTissueMachine tissueMachine;public void insertQuarter()tissueMachine.setState( (2) );/(2) tissueMachine. getHasQuarterState()/構(gòu)造方法以及其余代碼省略class HasQuarterState implements StateTissueMachine tissueMachine;public void ejectQuarter()tissueMachine.setState( (3) ); /(3)tissueMachine.getNoQuarterState()/構(gòu)造方法以及其余代碼省略class SoldState implements StateTissueMachine tissueMachine;public void dispense()if(tissueMachine.getCount()0)tissueMachine.setState( (4) ); / (4)tissueMachine.getNoQuarterState()elsetissueMachine.setState( (5) );/ (5)tissueMachine.getSoldOutState()試題六分析本題考查狀態(tài)(State)模式的概念及應(yīng)用。狀態(tài)模式是一種對象的行為型模式,允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為,對象看起來似乎修改了它的類。狀態(tài)模式的類圖如下所示:狀態(tài)模式主要解決的是控制一個對象轉(zhuǎn)換的條件表達式過于復(fù)雜的情況。把狀態(tài)的判斷邏輯轉(zhuǎn)移到表示不同狀態(tài)的一系列類當(dāng)中,可以把復(fù)雜的判斷邏輯簡化。狀態(tài)模式的好處是將與特定狀態(tài)相關(guān)的行為局部化,并且將不同狀態(tài)的行為分割開來。題目利用狀態(tài)模式來實現(xiàn)一個簡易的紙巾售賣機。售賣機的狀態(tài)轉(zhuǎn)換圖已經(jīng)在題目中給出,類SoldState、SoldOutState、NoQuarterState和HasQuarterState分別用來表示售賣機的4種不同狀態(tài),對應(yīng)于狀態(tài)模式中的ConcreteStatel,.ConcreteStateN。題目所設(shè)置的填空,主要集中在狀態(tài)轉(zhuǎn)換上。因此解答該題時,要求在理解狀態(tài)模式內(nèi)涵的基礎(chǔ)上,依據(jù)紙巾售賣機的狀態(tài)轉(zhuǎn)換原則,給出正確的狀態(tài)設(shè)置???1)出現(xiàn)在類Tissu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論