面向?qū)ο笤O(shè)計(jì)原則實(shí)驗(yàn)?zāi)0錩第1頁(yè)
面向?qū)ο笤O(shè)計(jì)原則實(shí)驗(yàn)?zāi)0錩第2頁(yè)
面向?qū)ο笤O(shè)計(jì)原則實(shí)驗(yàn)?zāi)0錩第3頁(yè)
面向?qū)ο笤O(shè)計(jì)原則實(shí)驗(yàn)?zāi)0錩第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

實(shí)驗(yàn)1面向?qū)ο笤O(shè)計(jì)原則實(shí)驗(yàn)實(shí)驗(yàn)學(xué)時(shí):4每組人數(shù):1實(shí)驗(yàn)類(lèi)型:3(1;基礎(chǔ)型2:綜合型3:設(shè)計(jì)型4:研究型)實(shí)驗(yàn)要求;1(1:必修2:選修3:其他)實(shí)驗(yàn)類(lèi)別:3(1;基礎(chǔ)2:專(zhuān)業(yè)基礎(chǔ)3:專(zhuān)業(yè)4:其他)1.1實(shí)驗(yàn)?zāi)康?.通過(guò)實(shí)例深入理解和掌握所學(xué)的面向?qū)ο笤O(shè)計(jì)原則。2.熟練使用面向?qū)ο笤O(shè)計(jì)原則對(duì)系統(tǒng)進(jìn)行重構(gòu)。3.熟練繪制重構(gòu)后的結(jié)構(gòu)圖(類(lèi)圖)。1.2實(shí)驗(yàn)內(nèi)容1.在某繪圖軟件中提供了多種大小不同的畫(huà)筆(Pen),并且可以給畫(huà)筆指定不同顏色,某設(shè)計(jì)人員針對(duì)畫(huà)筆的結(jié)構(gòu)設(shè)計(jì)了如圖1-1所示的初始類(lèi)圖,通過(guò)仔細(xì)分析,設(shè)計(jì)人員發(fā)現(xiàn)該類(lèi)圖存在非常嚴(yán)重的問(wèn)題,即如果需要增加一種新的大小或顏色的筆,就需要增加很多子類(lèi),例如增加一種綠色的筆,則對(duì)應(yīng)每一種大小的筆都需要增加一支綠色筆,系統(tǒng)中類(lèi)的個(gè)數(shù)急劇增加。試根據(jù)依賴(lài)倒轉(zhuǎn)原則和合成復(fù)用原則對(duì)該設(shè)計(jì)方案進(jìn)行重構(gòu),使得增加新的大小或顏色的筆都較為方便,請(qǐng)繪制重構(gòu)之后的結(jié)構(gòu)圖(類(lèi)圖)。2.在某公司財(cái)務(wù)系統(tǒng)的初始設(shè)計(jì)方案中存在如圖1-2所示的Employee類(lèi),該類(lèi)包含員工編號(hào)(ID)、姓名(name)、年齡(age)、性別(gender)、薪水(salary),每月工作時(shí)數(shù)(workHoursPerMonth)、每月請(qǐng)假天數(shù)(leaveDaysPerMonth)等屬性,該公司的員工包括全里和兼職兩類(lèi),其中每月工作時(shí)數(shù)用于存儲(chǔ)兼職員工每個(gè)月工作的小時(shí)數(shù),每月請(qǐng)假天數(shù)用于存儲(chǔ)全職員工每個(gè)月請(qǐng)假的天數(shù)。系統(tǒng)中兩類(lèi)員工計(jì)算工資的方法也不一樣,全職工按照工作日數(shù)計(jì)算工資,兼職員工按照工作時(shí)數(shù)計(jì)算工資,因此在Employee類(lèi)中提供兩個(gè)方法calculateSalaryByDays()和calculateSalaryByHours(),分別用于按照天數(shù)和時(shí)計(jì)算工資,此外,還提供了方法displaySalary()用于顯示工資。試采用所學(xué)面向?qū)ο笤O(shè)計(jì)原則分析圖1-2中Employee類(lèi)存在的問(wèn)題并對(duì)其進(jìn)行重構(gòu)繪制重構(gòu)之后的類(lèi)圖。在某圖形界面中存在如下代碼片段,組件類(lèi)之間有較為復(fù)雜的相互引用關(guān)系://按鈕類(lèi)publicclassButton(privateListlist;privateComboBoxcb;privateTextBoxtb;privateLabellabel;//...publicvoidchange()(List.update();cb.update();tb.update(),label,update();publicvoidupdate(){//...}//...}//列表框類(lèi)publicclassList{privateComboBoxcb;privateTextBoxtb;//...publicvoidchange(){cb.update();tbupdate();}publicvoidupdate(){//...}//...}//組合框類(lèi)publicclassComboBox{privateListlist;privateTextBoxtb;//...publicvoidchange(){listupdate();tbupdate();}publicvoidupdate(){//...}//...}//文本框類(lèi)publicclassTextBox{privateListlist;privateComboBoxcb;//...publicvoidchange(){list.update();cb.update();}publievotdupdate()(//...}//...}//文本標(biāo)簽類(lèi)publicclassLabel{//...publicvoidupdate()(//...}//...}如果在上述系統(tǒng)中增加一個(gè)新的組件類(lèi),則必須修改與之交互的其他組件類(lèi)的源代碼。將導(dǎo)致多個(gè)類(lèi)的源代碼需要修改?;谏鲜龃a,請(qǐng)結(jié)合所學(xué)知識(shí)完成以下兩道練習(xí)題:(1)繪制上述代碼對(duì)應(yīng)的類(lèi)圖。(2)根據(jù)迪米特法則對(duì)所繪制的類(lèi)圖進(jìn)行重構(gòu),以降低組件之間的耦合度,繪制重構(gòu)后的類(lèi)圖。PenPenMiddlePenSmallPenLargerPenBlackSmallPenRedSmallPenBlackMiddlelPenRedMiddlelPenBlackLargerlPenRedLargerlPen圖1-1畫(huà)筆結(jié)構(gòu)初始類(lèi)圖EmployeeEmployee-ID:String-namc:String-age:int-gender:String-salary:double-workHoursPerMonth:int-leaveDaysPerMonth:int+calculateSalaryByDays():double+calculateSalaryByHours():double+displaySalary():void圖1-2Employee類(lèi)初始類(lèi)圖在某圖形庫(kù)API中提供了多種矢量圖模板,用戶(hù)可以基于這些矢量圖創(chuàng)建不同的圖形,圖形庫(kù)設(shè)計(jì)人員設(shè)計(jì)的初始類(lèi)圖如圖1-3所示。圖1-圖1-3圖形庫(kù)初始類(lèi)圖ClientTriangle+init():void+setColor():void+fill0:void+setSize():void+displayO:voidCircle+init():void+setColor():void+fill0:void+setSize():void+displayO:voidRectangle+init():void+setColor():void+fill0:void+setSize():void+displayO:void在該圖形庫(kù)中,每個(gè)圖形類(lèi)(例如Circle、Triangle等)的init()方法用于初始化所創(chuàng)建的圖形,setColor()方法用于給圖形設(shè)置邊框顏色,fill()方法用于給圖形設(shè)置填充顏色,setSize()方法用于設(shè)置圖形的大小,display()方法用于顯示圖形。用戶(hù)在客戶(hù)類(lèi)(Client)中使用該圖形庫(kù)時(shí)發(fā)現(xiàn)存在如下問(wèn)題:由于在創(chuàng)建窗口時(shí)每次只需要使用圖形庫(kù)中的一種圖形,因此在更換圖形時(shí)需要修改客戶(hù)類(lèi)源代碼。在圖形庫(kù)中增加并使用新的圖形時(shí),需要修改客戶(hù)類(lèi)源代碼??蛻?hù)類(lèi)在每次使用圖形對(duì)象之前需要先創(chuàng)建圖形對(duì)象,有些圖形的創(chuàng)建過(guò)程較為復(fù)雜,導(dǎo)致客戶(hù)類(lèi)代碼冗長(zhǎng)且難以維護(hù)?,F(xiàn)需要根據(jù)面向?qū)ο笤O(shè)計(jì)原則對(duì)該系統(tǒng)進(jìn)行重構(gòu),要求如下:隔離圖形的創(chuàng)建和使用,將圖形的創(chuàng)建過(guò)程封裝在專(zhuān)門(mén)的類(lèi)中,客戶(hù)類(lèi)在使用圖形時(shí)無(wú)須直接創(chuàng)建圖形對(duì)象,甚至不需要關(guān)心具體圖形類(lèi)類(lèi)名。客戶(hù)類(lèi)能夠方便地更換圖形或使用新增圖形,無(wú)須針對(duì)具體圖形類(lèi)編程,符合開(kāi)閉原則。請(qǐng)繪制重構(gòu)后的結(jié)構(gòu)圖(類(lèi)圖)。1.3實(shí)驗(yàn)要求1.選擇合適的面向?qū)ο笤O(shè)計(jì)原則對(duì)系統(tǒng)進(jìn)行重構(gòu)。2.繪制重構(gòu)之后的類(lèi)圖。1.4實(shí)驗(yàn)步驟練習(xí)1:分析初始設(shè)計(jì)方案存在的問(wèn)題,根據(jù)依賴(lài)倒轉(zhuǎn)原則和合成復(fù)用原則對(duì)初始設(shè)計(jì)方案進(jìn)行重構(gòu),繪制重構(gòu)之后的結(jié)構(gòu)圖(類(lèi)圖

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論