軟件設(shè)計(jì)師-30_第1頁
軟件設(shè)計(jì)師-30_第2頁
軟件設(shè)計(jì)師-30_第3頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、軟件設(shè)計(jì)師-30(總分:100.00,做題時間:90分鐘)、試題一(總題數(shù):1,分?jǐn)?shù):20.00)1.閱讀下列說明和Java代碼,將應(yīng)填入的字句寫在下面。說明現(xiàn)要求實(shí)現(xiàn)一個能夠自動生成求職簡歷的程序,簡歷的基本內(nèi)容包括求職者的姓名、性別、年齡及工作經(jīng) 歷。希望每份簡歷中的工作經(jīng)歷有所不同,并盡量減少程序中的重復(fù)代碼?,F(xiàn)采用原型模式(Prototype)來實(shí)現(xiàn)上述要求,得到如下圖所示的類圖。類圖Java代碼Class workExperienceCloneable / 工作簡歷Private String workDate;Private String company;Public Object

2、 Clone() obj.workDate=this.workDate;Opany-pany;Return obj;Class ResumeCloneable / 簡歷Private String name;Private String sex;Private String age;Private WorkExperience work;Public Resume(String name)T=name;work=new WorkExperience。;Private Resume(WorkExperience work)This.woek=;Public void SetPer

3、sonallnfo(String sex,String age) /*代碼省略 */Public void SetWorkExperience(String workDate,String company)/*代碼省略 */ Public Object Clone()Resume obj=;/其余代碼省略Return obj;Class WorkResumePublic Static void main(String args)Resume a=new Resume ("張三");a.SetPersonallnfo("男","29")

4、;a.setworkExperience("1998 2000","XXX 公司");Resume b=;b.setworkExperience("2001 2006","YYY 公司"); (分?jǐn)?shù):20.00 ) 正確答案:()解析:implements WorkExperience obj=new WorkExperience()implements (WorkExperence)work.Clone()new Resume(this.work) a.Clone() 解析本題考查原型模式的概念及應(yīng)用,原型模型是

5、一種對象創(chuàng)建模型,用原型實(shí)體指定創(chuàng)建對象的種類,并且通過復(fù)制這些原型創(chuàng)建新的對象。原型模型允許一個對象再創(chuàng) 建另一個可訂制的對象,無需知道任何創(chuàng)建的細(xì)節(jié)。所有的Java類都繼承自,而object類提供一個Clone()方法,可以將一個Java對象復(fù) 制一份。因此在Java中可以直接使用 Object提供的Clone()方法來實(shí)現(xiàn)對象的克隆。能夠?qū)崿F(xiàn)克隆的java 類必須實(shí)現(xiàn)一個標(biāo)識接口 Cloneable,表示這個java類支持復(fù)制。題中 WorkExperience 類和Resume類需要實(shí)現(xiàn) Cloneable 接口,故第一個空和第三個空為implements,WorkExperience

6、中需要實(shí)現(xiàn)Clone方法,并將自身復(fù)制一份,由下面的代碼可知第二個空為WorkExperienceobj=newWorkExperience() 。Resume類中的私有構(gòu)造方法實(shí)現(xiàn) WorkExpefience的深復(fù)制,故第四處中為 (Work Experence)work.Clone() ,而Resume類中Clone方法實(shí)現(xiàn)自身的復(fù)制,故第五處中為“newResume(this.work) ”。在main中實(shí)現(xiàn)Resume b對a的復(fù)制,故第六處中為“ a.Clone() ”。二、試題二(總題數(shù):1,分?jǐn)?shù):20.00)2.閱讀以下說明和Java代碼,將應(yīng)填入的字句寫在下面。說明欲開發(fā)一個

7、繪圖軟件,要求使用不同的繪圖程序繪制不同的圖形。以繪制直線和圓形為例,對應(yīng)的繪圖程 序如下表所示。不同的繪圖程序DP1DP2繪制直線draw a lin e(x1,y1,x2,y2)drawli ne(x1,x2,y1,y2)繪制圓draw a circle(x,y,r)drawcircle(x,y,r)該繪圖軟件的擴(kuò)展性要求,將不斷擴(kuò)充新的圖形和新的繪圖程序。為了避免岀現(xiàn)類爆炸的情況,現(xiàn)采用橋 接(Bridge)模式來實(shí)現(xiàn)上述要求,得到如下圖所示的類圖。某繪圖軟件類圖Java代碼Drawi ngclassDP1static public void draw_aline(double x1,d

8、ouble y1,double x2,double y2)/*代碼省略*/static public void draw_a_circle(double x,double y,double r)/*代碼省略 */;classDP2(代碼省略 */代碼省略 */代碼省略 */static public void drawline(double x1,double x2,double y1,double y2) /* 代碼省略 */static public void drawcircle(double x,double y,double r)/*;class V1Drawing implemen

9、ts Drawingpublic void drawLine(double x1,double y1,double x2,double y2)/* public void drawCircle(double x,double y,double r););class V2Drawing implements DrawingDublic void drawLine(double x1,double y1,double x2,double y2) /*public void drawCircle(double x,double y,double r) ;abstract class Shape( p

10、rivate Drawing_dp;Shape(Drawing dp)_dp=dp;public void drawLine(double x1,double y1,double x2,double y2) _dp.drawLine(x1,y1,x2,y2);public void drawCircle(double x,double y,doubler)dp.drawCircle(x,y,r);class Rectangle extends Shapeprivate double_x1,_x2,_y1,_y2;public Rectangle(Drawing dp,double x1,dou

11、ble y1,double x2,double y2)/* 代碼省略 */public void draw()/* 代碼省略 */ ;class Circle extends Shapeprivate double_x,_y,_r;public Circle(Drawing dp,double x,double y,double r) /* 代碼省略 */) public void draw()drawCircle(_x,_y,_r); ;(分?jǐn)?shù): 20.00 ) 正確答案: ()解析: interface;void drawLine(double x1,double y1,double x2

12、,double y2);void drawCircle(double x,double y,double r);DP1.draw_a circle(x,y,r);DP2.drawCircle(x,y,r);abstract public void draw(); 解析 本題考查 Bridge 橋接模式的概念及應(yīng)用,將抽象與其實(shí)現(xiàn)解耦, 使它們都可以獨(dú)立地變化。大致意思是說:將一組實(shí)現(xiàn)與另一組使用他們的對象分離。 Java 語言中聲明抽 象函數(shù)時可利用 abstract ,且每個函數(shù)都需要聲明訪問類型。對照試題五的代碼我們可以看出:第一個空 為 interface ,這里的實(shí)現(xiàn)指的是抽象類及其派

13、生類用來實(shí)現(xiàn)自己的對象 ( 而不是抽象類的派生類,這些派 生類被稱為具體類 ) , Drawing 是一個虛擬基類,里面包含了希望利用不同策略實(shí)現(xiàn)的算法,派生類 V1Drawing ,V2Drawing 都派生自 Drawing ,對基類中希望實(shí)現(xiàn)的算法都作了具體實(shí)現(xiàn),且它們都含有 drawLine 和 drawCircle 函數(shù),所以 Draw 類中缺失的應(yīng)該是這兩個算法,于是第二處為“voiddrawLine(double x1,doubley1,doublex2,double y2); ”,第三處為“voiddrawCircle(doublex,doubley,double r);”,

14、DPI和 DP2中包含了繪制 Line 和 Circle 的具體實(shí)現(xiàn)Static的方法,因此在 VIDrawing、V2Drawing類中可以直接調(diào)用它們,第四處為“DP1.draw_a_circle(x,y,r) 第五處 DP2.drawCircle(x,y,r); ”,Shape類派生出 Rectangle 和 Circle 類, 里面都含有draw方法,但是具體draw方法的實(shí)現(xiàn)卻不相同,所以第六處為“ abstractpublicvoiddraw”。三、試題三(總題數(shù):1,分?jǐn)?shù):20.00)3. 閱讀下列說明Java代碼,將應(yīng)填入 處的字句寫在下面。說明現(xiàn)欲開發(fā)一個軟件系統(tǒng),要求能夠同

15、時支持多種不同的數(shù)據(jù)庫,為此采用抽象工廠模式設(shè)計(jì)該系統(tǒng)。以SQLServer和Access兩種數(shù)據(jù)庫以及系統(tǒng)中的數(shù)據(jù)庫表Department為例,其類圖如圖1所示。圖1類圖Java代碼class Department/*代碼省略 */interface IDepartmentclass sqlserVerDepartment:public:void Insert(Department departments/其余代碼省略public Department GetDepartment(int id)/*代碼省略*/class AccessDepartment:public void Insert

16、(Department departments/其余代碼省略public Department GetDepartment(int id)/*代碼省略*/;class SqlServerFactory implements IFactorypublic IDepartment CreateDepartment()return new SqlserverDepartment();/其余代碼省略;class AccessFactory implements IFactorypublic IDepartment CreateDepartment()return new AccessDepartmen

17、t();/其余代碼省略;(分?jǐn)?shù):20.00 )正確答案:()解析:void Insert(Department department)Department GetDepartment(int id)implements IDepartmentimplements Departmentinterface IFactoryIDepartment CreateDepartment() 解析本題考查抽象工廠設(shè)計(jì)模式的概念及其應(yīng)用。其類圖如圖2所示。圖2抽象工廠設(shè)計(jì)模式類圖抽象工廠設(shè)計(jì)模式的意圖是:提供一個創(chuàng)建一系列相關(guān)或相互依賴的對象,而無須指岀它們具體的類。在如下情況下應(yīng)當(dāng)考慮使用抽象工廠模式:當(dāng)一

18、個系統(tǒng)要獨(dú)立于它的產(chǎn)品的創(chuàng)建、組合和表示時。當(dāng)一個系統(tǒng)要由多個產(chǎn)品系列中的一個來配置時。當(dāng)需強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對象的設(shè)計(jì)以便進(jìn)行聯(lián)合使用時。想提供一組對象而不顯示它們的實(shí)現(xiàn)過程,只顯示它們的接口時。抽象工廠設(shè)計(jì)模式的類圖如下所示,其中:AbstractFactoryN抽象工廠,聲明抽象產(chǎn)品的方法。 ConcreteFactory 為具體工廠,執(zhí)行生成抽象產(chǎn)品的方法,生成一個具體的產(chǎn)品。Abstractproduct為抽象產(chǎn)品,為一種產(chǎn)品聲明接口。 Product為具體產(chǎn)品,定義具體工廠生成的具體產(chǎn)品的對象,實(shí)現(xiàn)產(chǎn)品接口。圖 1 中的 IFactory 對應(yīng)類圖中的 AbstractFacto

19、ry , Sqlserverfactory 和 Accessfactory 對應(yīng)類圖中的 ConcreteFactory ,SqlserverDepartment 和 AccessDepartment 對應(yīng)類圖中的 Product ,而 IDepartment 對 應(yīng)類圖中的 AbstractProduct 。第一空和第二空考查接口IDepartment中方法的定義。由其子類SqlserverDepartment 和AccessDepartment中方法的定義,可知第一空處應(yīng)填入void Insert(Department department),第二空處應(yīng)填入DepartmentGetDep

20、artment(int id) 。第三空和第四空考查接口IDepartment的實(shí)現(xiàn)。接口的實(shí)現(xiàn)是在一個類的聲明中使用關(guān)鍵字“implements ”來表示該類使用某個已經(jīng)定義的接口,然后即可在該類體中使用接口中定義的常量,而且必須實(shí)現(xiàn)接口中 定義的所有方法。因此,第三空和第四空都應(yīng)填入implements IDepartment 。由于所給程序中缺少接口IFactory 的定義,因此第五空應(yīng)為定義接口IFactory,應(yīng)填入interfaceIFactory。由于類 Sqlserverfactory 和Accessfactory中必須實(shí)現(xiàn)接口 Ifactory中定義的所有方法,觀察這兩個類中

21、的方法可知,第六空應(yīng)填入 IDepartment CreateDepartment() 。四、試題四(總題數(shù):1,分?jǐn)?shù):20.00)4. 閱讀下列說明和Java代碼,將應(yīng)填入的字句寫在下面。說明某咖啡店當(dāng)賣咖啡時,可以根據(jù)顧客的要求在其中加入各種配料,咖啡店會根據(jù)所加入的配料來計(jì)算費(fèi)用。咖啡店所供應(yīng)的咖啡及配料的種類和價(jià)格如下表所示??Х葍r(jià)格/杯(¥)配料價(jià)格/杯(¥)蒸餾咖啡(Espresso)25摩卡(Mocha)10深度烘焙咖啡(DarkRoast)20奶泡(Whip)81現(xiàn)采用裝飾器(Decorator)模式來實(shí)現(xiàn)計(jì)算費(fèi)用的功能,得到如下圖所示的類圖Java代碼cl

22、ass Beverage飲料String description="Unknown Beverage"public()return description;public;abstract class condimentDecorator extends Beverage /酉己料class Espresso extends Beverage蒸餾咖啡private final int ESPRESSO PRICE=25;publiC Espresso()description="Espresso"public int cost()return ESPRES

23、SO PRICE;class DarkRoast extends Beverage(深度烘焙咖啡private finalint DARKROAST PRICE=20;public DarkRoast()description="DarkRoast"public int cost()rcturn DARKROAST PRICE;class Mocha extends CondimentDecorator 摩卡 private final int MOCHA PRICE=10;public Mocha(Beverage beverage)this.beverage=bever

24、age;public String getDescription() return beverage.getDeScriptionO+",Mocha"public int cost()return MOCHA_PRICE+beverage.cost();class Whip extends CondimentDecorator奶泡private finalint WHIP PRICE=8;public Whip(Beverage beverage)this.beverage=beverage; public String getDescription() return be

25、verage.getDescription()+",Whip"public int cost()return WHIP_PRICE+beverage.cost();public class Coffee public static void main(String args)Beverage beverage=new DarkRoast();beverage=new Mocha();beverage=new Whip ();¥ "+beverage.cost();編譯運(yùn)行上述程序,其輸岀結(jié)果為:DarkRoast , Mocha, Whip¥

26、38(分?jǐn)?shù):20.00 ) 正確答案:()解析:abstract String getDescription abstractirt cost()Beverage beverage beverage beverage 解析裝飾器模式描述了如何動態(tài)地為一個對象添加職責(zé)。該模 式采用遞歸方式組合對象,從而允許添加任意多的對象職責(zé)。在下列情況下可以使用裝飾器模式:(1) 在不影響其他對象的情況下,以動態(tài)、透明的方式給單個對象添加職責(zé)。(2) 處理那些可以撤銷的職責(zé)。(3) 當(dāng)不能采用生成子類的方法進(jìn)行擴(kuò)充時。一種情況是,可能有大量獨(dú)立的擴(kuò)展,為支持每一種組合將產(chǎn)生大量的子類,使得子類數(shù)目呈爆炸性增長

27、。另一種情況可能是因?yàn)轭惗x被隱藏,或類定義不能用于生成子類。裝飾器模式的結(jié)構(gòu)如圖2所示。其中:圖2抽象組件角色(Component):定義一個對象接口,以規(guī)范準(zhǔn)備接受附加責(zé)任的對象,即可以給這些對象動態(tài)地添加職責(zé)。具體組件角色(ConcreteComponent):被裝飾者,定義一個將要被裝飾增加功能的類??梢越o這個類的對象添加一些職責(zé)。抽象裝飾器(Decorator):維持一個指向構(gòu)件 Component對象的實(shí)例,并定義一個與抽象組件角色Component 接口一致的接口。具體裝飾器角色(ConcreteDecorator):向組件添加職責(zé)。圖1中的Beverage對應(yīng)的就是上圖中的抽象

28、類Component, Espresso和DarkRoast對應(yīng)的是ConcreteComponent,CondimentDecorator 對應(yīng)抽象裝飾器 Decorator ,Mocha和 Whip 扮演的是類 CondimentDecorator 的具體裝飾器角色 ConcreteDecorator 。由于類Beverage為其子類提供了統(tǒng)一的操作接口,所以將其定義為抽象類。通過可以在類名前加 Wabstract關(guān)鍵字來定義抽象類,因此第一空應(yīng)填入abstract。第二和三空考查構(gòu)造函數(shù)的定義。從第二空構(gòu)造函數(shù)體中返回值的類型及后續(xù)的子類繼承程序可知,第二處應(yīng)填入 String getD

29、escription ;從 public int cost()return ESPRESSO_PRiCE; 可以看出,cost() 函數(shù)的返回值為常量,因此第三處應(yīng)填入abstractint cost() 。第四處考查對 CondimentDecorator 的定義,在該類中聲明一類成員變量,并在this.beverage=beverage和 return beverage.getDescription0+",Mocha"加I以使用。因此第四空應(yīng)填入Beverage beverage;。第五處和第六處考查實(shí)例化類模板的方法。類模板必須在實(shí)例化后才能使用。實(shí)例化類模板時,要給

30、岀類 型實(shí)參。從類圖可知,第五處和第六處均應(yīng)填入beverage。五、試題五(總題數(shù):1,分?jǐn)?shù):20.00)5. 閱讀下列說明和Java代碼,將應(yīng)填入的字句寫在下面。說明某大型商場內(nèi)安裝了多個簡易的紙巾售賣機(jī),自動售出2元錢一包的紙巾,且每次僅售出一包紙巾。紙巾售賣機(jī)的狀態(tài)如圖1所示。圖1紙巾售賣機(jī)狀態(tài)圖采用狀態(tài)(State)模式來實(shí)現(xiàn)該紙巾售賣機(jī),得到如圖2所示的類圖。其中類 退幣、出紙巾等方法接口。類SoldState、SoldOutState、NoQuarterState圖2類圖Java代碼Import java.util.*interface Statepublic void inse

31、rtQuarter(); / public void ejectQuarter(); / public void turnCrank(); / public void dispense(); / Class TiSsueMachine投幣退幣按下、岀紙巾”按鈕出紙巾State為抽象類,定義了投幣、和HasQuanerState分別對應(yīng)圖1中紙巾售賣機(jī)的4中狀態(tài):售出紙巾、紙巾售完、沒有投幣、有2元錢。SoldOutState,noQuarterState,hasQuarterState,SoldState,State; State=soldOutState;int count=0; / 紙巾數(shù)

32、public TissueMachine(int number)/*實(shí)現(xiàn)代碼省略 */) public State getHasQuarterState() return hasQuarterState; public State getNoQuarterState() return noQuarterState; public State getSoldState() return soldState;public State getSoldOutState() return soldOutState; int getCount return count;/其余代碼省略 ;Class NoQ

33、uarterState implement State TissueMachine tissueMachine;public void insertQuarter() tissureMachine.SetState();/構(gòu)造方法以及其余代碼省略 Class HasQuarterState implement State TissueMachine tissueMachine;public void ejectQuarter() tissureMachine.setState();/構(gòu)造方法以及其余代碼省略Class SoldState implement StateTissueMachime tissueMachine;public void dispense() if(tissueMachine.getCount()

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論