系統(tǒng)分析與設(shè)計(jì)IBM-43面向?qū)ο笤O(shè)計(jì)的原則課件_第1頁(yè)
系統(tǒng)分析與設(shè)計(jì)IBM-43面向?qū)ο笤O(shè)計(jì)的原則課件_第2頁(yè)
系統(tǒng)分析與設(shè)計(jì)IBM-43面向?qū)ο笤O(shè)計(jì)的原則課件_第3頁(yè)
系統(tǒng)分析與設(shè)計(jì)IBM-43面向?qū)ο笤O(shè)計(jì)的原則課件_第4頁(yè)
系統(tǒng)分析與設(shè)計(jì)IBM-43面向?qū)ο笤O(shè)計(jì)的原則課件_第5頁(yè)
已閱讀5頁(yè),還剩20頁(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)介

關(guān)于對(duì)象設(shè)計(jì)你愿或者不愿,需求就在那里,日新月異你想或者不想,設(shè)計(jì)創(chuàng)新就在那里,始終持續(xù)你測(cè)或者不測(cè),Bug都在那里,多多少少結(jié)束或者不結(jié)束,干系人在那里,決策終不由己來(lái),面向?qū)ο蟮年嚑I(yíng)里,或者,讓對(duì)象思想駐進(jìn)你的心里,默然,領(lǐng)會(huì)。由衷,歡喜 ……關(guān)于對(duì)象設(shè)計(jì)你愿或者不愿,需求就在那里,日新月異1關(guān)于對(duì)象設(shè)計(jì)其實(shí),真相是:面向?qū)ο蠓椒ū旧聿⒉荒鼙WC你的設(shè)計(jì)成為優(yōu)秀的設(shè)計(jì)YoucancreateaverybadOOdesignjustaseasilyasyoucancreateaverybadnon--‐OOdesign...關(guān)于對(duì)象設(shè)計(jì)其實(shí),真相是:2面向?qū)ο笤O(shè)計(jì)過(guò)程進(jìn)行適當(dāng)?shù)念I(lǐng)域分析撰寫(xiě)問(wèn)題描述,確定系統(tǒng)的開(kāi)發(fā)任務(wù)基于問(wèn)題描述抽取需求開(kāi)發(fā)用戶界面原型識(shí)別對(duì)象類定義每個(gè)類的職責(zé)確定類之間的交互關(guān)系建立系統(tǒng)的設(shè)計(jì)模型面向?qū)ο笤O(shè)計(jì)過(guò)程進(jìn)行適當(dāng)?shù)念I(lǐng)域分析3面向?qū)ο蠼:诵睦砟顓^(qū)分接口與實(shí)現(xiàn)從具體到抽象最小接口原則面向?qū)ο蠼:诵睦砟顓^(qū)分接口與實(shí)現(xiàn)4區(qū)分接口與實(shí)現(xiàn)接口的標(biāo)準(zhǔn)化

vs.

實(shí)現(xiàn)的演化publicvoidopen(stringname)

{/*someapplication-specificprocessing

*//*calltheOracleAPItoopentheDB*//*moreapplicationspecificprocessing

*/}publicvoidopen(stringname)

{/*someapplication-specificprocessing

*//*calltheSQLAnywheretoopentheDB*//*moreapplicationspecificprocessing*/}區(qū)分接口與實(shí)現(xiàn)接口的標(biāo)準(zhǔn)化vs.實(shí)現(xiàn)的演化5接口

用戶代碼接口OracleDB2SQLAny用戶代碼接口用戶代碼接口OracleDB2SQLAny用戶代碼6UsingAbstractThinkingWhenDesigning

Interfaces設(shè)計(jì)抽象的接口UsingAbstractThinkingWhenD7抽象的接口抽

口師傅,請(qǐng)送我去機(jī)場(chǎng)抽象的接口抽象的接口師傅,請(qǐng)送我去機(jī)場(chǎng)8不太抽象的接口不

口右轉(zhuǎn)右轉(zhuǎn)左轉(zhuǎn)左轉(zhuǎn)左轉(zhuǎn)不太抽象的接口不夠抽象的接口9抽象的接口:向

實(shí)

現(xiàn)

細(xì)

節(jié)讓用戶知道的關(guān)于類的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)越少越好:只給看必須的只看公開(kāi)的只為用戶的業(yè)務(wù)需求考慮最

負(fù)

擔(dān)

則抽象的接口:向用戶暴露10確

戶用戶是誰(shuí) ? 重要程度高達(dá)50%面向服務(wù)的原則

(Services

Principle)提供服務(wù):只要能賺錢就好使

務(wù):不要太貴喔確定用戶用戶是誰(shuí) ? 重要程度高達(dá)50%提供服11識(shí)別環(huán)境約束環(huán)境對(duì)對(duì)象的行為施加約束限制條件前置條件/后置條件/例外條件…識(shí)別環(huán)境約束環(huán)境對(duì)對(duì)象的行為施加約束限制條件前置條件/后置12公共接口的識(shí)別用戶

使

對(duì)

時(shí)

候,需

要以下功

告知司機(jī)終點(diǎn)付錢下

車用戶

?

的時(shí)候:有出

行地點(diǎn)召喚

出租

車付錢公共接口的識(shí)別用戶使用出租車對(duì)象的13確定實(shí)現(xiàn)細(xì)節(jié)公共接口以外的內(nèi)容都可以看做是實(shí)現(xiàn)相關(guān)的用戶永遠(yuǎn)無(wú)需關(guān)注實(shí)現(xiàn)細(xì)節(jié)方法的命名和參數(shù)定義

(nameandparameterlist)編碼實(shí)現(xiàn)對(duì)實(shí)現(xiàn)的修改無(wú)須牽涉接?實(shí)現(xiàn)為用戶的期望提供解決?方案接口從用戶的角度看待對(duì)象,實(shí)現(xiàn)則是對(duì)象的果核和果肉實(shí)現(xiàn)中包含有描述對(duì)象狀態(tài)的代碼確定實(shí)現(xiàn)細(xì)節(jié)公共接口以外的內(nèi)容都可以看做是實(shí)現(xiàn)相關(guān)的14開(kāi)閉原則(Open/Closed

Principle,

OCP)最初由Bertrand

Meyer提出軟件實(shí)體在擴(kuò)展性?方?面應(yīng)該是開(kāi)放的,而在更改性方面應(yīng)該是

封閉

的。例:打印輸出設(shè)計(jì)設(shè)計(jì)1設(shè)計(jì)2開(kāi)閉原則(Open/ClosedPrinciple,OC15Liskov替換原則

(Liskov

Substitution

Principle,

LSP)最早由Liskov于1987年在OOPSLA會(huì)議上提出子類可以替換父類出現(xiàn)在父類能出現(xiàn)的任何地方Liskov替換原則(LiskovSubstitutio16違反LSP的例子publicclassRectangle

{privateinttopLe5X;privateinttopLe5Y;intwidth;int

height;publicvoidsetWidth(intwidth){this.width=width;}publicvoidsetHeight(intheight){this.height=

height;}publicintgetWidth(){return

width;}publicintgetHeight(){returnheight;}}問(wèn)題:如果將Square作為Rectangle的子類,則如何定義Square類的setWidth和setHeight方法??違反LSP的例子publicclassRectangle17解決方法:publicclassSquareextendsRectangle{publicvoidsetWidth(intwidth){super.setWidth(width);super.setHeight(width);}publicvoidsetHeight(intheight){super.setHeight(height);super.setWidth(height);}}這種解決方法是否可行??解決方法:publicclassSquareexten18考

碼:publicclassTest

{publicstaGcvoidmain(String[]args){Testt=new

Test();Rectangler=new

Rectangle();Squares=newSquare();t.g(r);// t.g(s);}}privatevoidg(Rectangler)

{r.setWidth(10);r.setHeight(20);assert(r.getWidth()*r.getHeight()==

200);如果傳給方法g的參數(shù)是Rectangle類型的對(duì)象,則沒(méi)有問(wèn)題,如果是Square類型的對(duì)象,則出錯(cuò)。}?考慮下面的代碼:publicclassTes19思考題:如

求?契約式設(shè)計(jì)

(DesignbyContract)為了滿足Liskov替換原則,設(shè)計(jì)時(shí)要求:子類中方法的前置條件不能強(qiáng)于父類中相應(yīng)方法的前置條件。子類中方法的后置條件不能弱于父類中相應(yīng)方法的后置條件。Liskov

替換原則要求子類寬

入嚴(yán)出!思考題:如何知道子類的行為符合父20依賴倒置原則

(DependencyInversionPrinciple,

DIP)依賴倒置原則指的是依賴關(guān)系應(yīng)該是盡量依賴接口(或抽象類),而不是依賴于具體類。?結(jié)構(gòu)化設(shè)計(jì)中模塊間的依賴關(guān)系依賴倒置原則(DependencyInversionP21面向?qū)ο笤O(shè)計(jì)中的依賴關(guān)系OOD中的依賴關(guān)系面向?qū)ο笤O(shè)計(jì)中的依賴關(guān)系OOD中的依賴關(guān)系22接口分離原則(InterfaceSegrega:on

Principle,

ISP)在設(shè)計(jì)時(shí)采用多個(gè)和特定客戶類(client)有關(guān)的接口要比采用一個(gè)通用的接口要好。使用通用接口的設(shè)計(jì)使用分離接口的設(shè)計(jì)接口分離原則(InterfaceSegrega:onPr23好的系統(tǒng)設(shè)計(jì)的特征用戶友好易理解可靠可擴(kuò)展可移植可伸縮可重用…簡(jiǎn)單性:實(shí)現(xiàn)簡(jiǎn)單,使

用簡(jiǎn)單,理解簡(jiǎn)單,維護(hù)簡(jiǎn)單軟件老化的特征修改難很脆弱移植難重

用難粘性強(qiáng)

(設(shè)計(jì)+環(huán)境)需求變更好的系統(tǒng)設(shè)計(jì)的特征用戶友好簡(jiǎ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)論