




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
關(guān)于對象設(shè)計(jì)你愿或者不愿,需求就在那里,日新月異你想或者不想,設(shè)計(jì)創(chuàng)新就在那里,始終持續(xù)你測或者不測,Bug都在那里,多多少少結(jié)束或者不結(jié)束,干系人在那里,決策終不由己來,面向?qū)ο蟮年嚑I里,或者,讓對象思想駐進(jìn)你的心里,默然,領(lǐng)會。由衷,歡喜 ……關(guān)于對象設(shè)計(jì)你愿或者不愿,需求就在那里,日新月異1關(guān)于對象設(shè)計(jì)其實(shí),真相是:面向?qū)ο蠓椒ū旧聿⒉荒鼙WC你的設(shè)計(jì)成為優(yōu)秀的設(shè)計(jì)YoucancreateaverybadOOdesignjustaseasilyasyoucancreateaverybadnon--‐OOdesign...關(guān)于對象設(shè)計(jì)其實(shí),真相是:2面向?qū)ο笤O(shè)計(jì)過程進(jìn)行適當(dāng)?shù)念I(lǐng)域分析撰寫問題描述,確定系統(tǒng)的開發(fā)任務(wù)基于問題描述抽取需求開發(fā)用戶界面原型識別對象類定義每個(gè)類的職責(zé)確定類之間的交互關(guān)系建立系統(tǒng)的設(shè)計(jì)模型面向?qū)ο笤O(shè)計(jì)過程進(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抽象的接口抽
象
的
接
口師傅,請送我去機(jī)場抽象的接口抽象的接口師傅,請送我去機(jī)場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é)越少越好:只給看必須的只看公開的只為用戶的業(yè)務(wù)需求考慮最
小
用
戶
負(fù)
擔(dān)
原
則抽象的接口:向用戶暴露10確
定
用
戶用戶是誰 ? 重要程度高達(dá)50%面向服務(wù)的原則
(Services
Principle)提供服務(wù):只要能賺錢就好使
用
服
務(wù):不要太貴喔確定用戶用戶是誰 ? 重要程度高達(dá)50%提供服11識別環(huán)境約束環(huán)境對對象的行為施加約束限制條件前置條件/后置條件/例外條件…識別環(huán)境約束環(huán)境對對象的行為施加約束限制條件前置條件/后置12公共接口的識別用戶
使
用
出
租
車
對
象
的
時(shí)
候,需
要以下功
能
告知司機(jī)終點(diǎn)付錢下
車用戶
要
用
出
租
?
的時(shí)候:有出
行地點(diǎn)召喚
出租
車付錢公共接口的識別用戶使用出租車對象的13確定實(shí)現(xiàn)細(xì)節(jié)公共接口以外的內(nèi)容都可以看做是實(shí)現(xiàn)相關(guān)的用戶永遠(yuǎn)無需關(guān)注實(shí)現(xiàn)細(xì)節(jié)方法的命名和參數(shù)定義
(nameandparameterlist)編碼實(shí)現(xiàn)對實(shí)現(xiàn)的修改無須牽涉接?實(shí)現(xiàn)為用戶的期望提供解決?方案接口從用戶的角度看待對象,實(shí)現(xiàn)則是對象的果核和果肉實(shí)現(xiàn)中包含有描述對象狀態(tài)的代碼確定實(shí)現(xiàn)細(xì)節(jié)公共接口以外的內(nèi)容都可以看做是實(shí)現(xiàn)相關(guān)的14開閉原則(Open/Closed
Principle,
OCP)最初由Bertrand
Meyer提出軟件實(shí)體在擴(kuò)展性?方?面應(yīng)該是開放的,而在更改性方面應(yīng)該是
封閉
的。例:打印輸出設(shè)計(jì)設(shè)計(jì)1設(shè)計(jì)2開閉原則(Open/ClosedPrinciple,OC15Liskov替換原則
(Liskov
Substitution
Principle,
LSP)最早由Liskov于1987年在OOPSLA會議上提出子類可以替換父類出現(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;}}問題:如果將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類型的對象,則沒有問題,如果是Square類型的對象,則出錯(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ò)展可移植可伸縮可重用…簡單性:實(shí)現(xiàn)簡單,使
用簡單,理解簡單,維護(hù)簡單軟件老化的特征修改難很脆弱移植難重
用難粘性強(qiáng)
(設(shè)計(jì)+環(huán)境)需求變更好的系統(tǒng)設(shè)計(jì)的特征用戶友好簡單性:實(shí)現(xiàn)簡單,使用簡單,理解24OO設(shè)計(jì)時(shí)要注意的一些問題不同類中相似方法的名字應(yīng)該相同遵守已有的約定俗成的習(xí)慣盡量減少消息模式的數(shù)目。只要可能,就使消息具有一致的模式,以利于理解。設(shè)計(jì)簡單的類。類的職責(zé)要明確,應(yīng)該從類名就可以較容易地推斷出類的用途。定義簡單的操作、方法定義簡單的交互協(xié)議泛化結(jié)構(gòu)的深度要適當(dāng)把設(shè)計(jì)變動的副作用減至最少OO設(shè)計(jì)時(shí)要注意的一些問題不同類中相似方法的名字應(yīng)該相同25關(guān)于對象設(shè)計(jì)你愿或者不愿,需求就在那里,日新月異你想或者不想,設(shè)計(jì)創(chuàng)新就在那里,始終持續(xù)你測或者不測,Bug都在那里,多多少少結(jié)束或者不結(jié)束,干系人在那里,決策終不由己來,面向?qū)ο蟮年嚑I里,或者,讓對象思想駐進(jìn)你的心里,默然,領(lǐng)會。由衷,歡喜 ……關(guān)于對象設(shè)計(jì)你愿或者不愿,需求就在那里,日新月異26關(guān)于對象設(shè)計(jì)其實(shí),真相是:面向?qū)ο蠓椒ū旧聿⒉荒鼙WC你的設(shè)計(jì)成為優(yōu)秀的設(shè)計(jì)YoucancreateaverybadOOdesignjustaseasilyasyoucancreateaverybadnon--‐OOdesign...關(guān)于對象設(shè)計(jì)其實(shí),真相是:27面向?qū)ο笤O(shè)計(jì)過程進(jìn)行適當(dāng)?shù)念I(lǐng)域分析撰寫問題描述,確定系統(tǒng)的開發(fā)任務(wù)基于問題描述抽取需求開發(fā)用戶界面原型識別對象類定義每個(gè)類的職責(zé)確定類之間的交互關(guān)系建立系統(tǒng)的設(shè)計(jì)模型面向?qū)ο笤O(shè)計(jì)過程進(jìn)行適當(dāng)?shù)念I(lǐng)域分析28面向?qū)ο蠼:诵睦砟顓^(qū)分接口與實(shí)現(xiàn)從具體到抽象最小接口原則面向?qū)ο蠼:诵睦砟顓^(qū)分接口與實(shí)現(xiàn)29區(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)的演化30接口
用戶代碼接口OracleDB2SQLAny用戶代碼接口用戶代碼接口OracleDB2SQLAny用戶代碼31UsingAbstractThinkingWhenDesigning
Interfaces設(shè)計(jì)抽象的接口UsingAbstractThinkingWhenD32抽象的接口抽
象
的
接
口師傅,請送我去機(jī)場抽象的接口抽象的接口師傅,請送我去機(jī)場33不太抽象的接口不
夠
抽
象
的
接
口右轉(zhuǎn)右轉(zhuǎn)左轉(zhuǎn)左轉(zhuǎn)左轉(zhuǎn)不太抽象的接口不夠抽象的接口34抽象的接口:向
用
戶
暴
露
盡
可
能
少
的
實(shí)
現(xiàn)
細(xì)
節(jié)讓用戶知道的關(guān)于類的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)越少越好:只給看必須的只看公開的只為用戶的業(yè)務(wù)需求考慮最
小
用
戶
負(fù)
擔(dān)
原
則抽象的接口:向用戶暴露35確
定
用
戶用戶是誰 ? 重要程度高達(dá)50%面向服務(wù)的原則
(Services
Principle)提供服務(wù):只要能賺錢就好使
用
服
務(wù):不要太貴喔確定用戶用戶是誰 ? 重要程度高達(dá)50%提供服36識別環(huán)境約束環(huán)境對對象的行為施加約束限制條件前置條件/后置條件/例外條件…識別環(huán)境約束環(huán)境對對象的行為施加約束限制條件前置條件/后置37公共接口的識別用戶
使
用
出
租
車
對
象
的
時(shí)
候,需
要以下功
能
告知司機(jī)終點(diǎn)付錢下
車用戶
要
用
出
租
?
的時(shí)候:有出
行地點(diǎn)召喚
出租
車付錢公共接口的識別用戶使用出租車對象的38確定實(shí)現(xiàn)細(xì)節(jié)公共接口以外的內(nèi)容都可以看做是實(shí)現(xiàn)相關(guān)的用戶永遠(yuǎn)無需關(guān)注實(shí)現(xiàn)細(xì)節(jié)方法的命名和參數(shù)定義
(nameandparameterlist)編碼實(shí)現(xiàn)對實(shí)現(xiàn)的修改無須牽涉接?實(shí)現(xiàn)為用戶的期望提供解決?方案接口從用戶的角度看待對象,實(shí)現(xiàn)則是對象的果核和果肉實(shí)現(xiàn)中包含有描述對象狀態(tài)的代碼確定實(shí)現(xiàn)細(xì)節(jié)公共接口以外的內(nèi)容都可以看做是實(shí)現(xiàn)相關(guān)的39開閉原則(Open/Closed
Principle,
OCP)最初由Bertrand
Meyer提出軟件實(shí)體在擴(kuò)展性?方?面應(yīng)該是開放的,而在更改性方面應(yīng)該是
封閉
的。例:打印輸出設(shè)計(jì)設(shè)計(jì)1設(shè)計(jì)2開閉原則(Open/ClosedPrinciple,OC40Liskov替換原則
(Liskov
Substitution
Principle,
LSP)最早由Liskov于1987年在OOPSLA會議上提出子類可以替換父類出現(xiàn)在父類能出現(xiàn)的任何地方Liskov替換原則(LiskovSubstitutio41違反LSP的例子publicclassRectangle
{privateinttopLe5X;privateinttopLe5Y;intwidth;int
height;publicvoidsetWidth(intwidth){this.width=width;}publicvoidsetHeight(intheight){this.height=
height;}publicintgetWidth(){return
width;}publicintgetHeight(){returnheight;}}問題:如果將Square作為Rectangle的子類,則如何定義Square類的setWidth和setHeight方法??違反LSP的例子publicclassRectangle42解決方法:publicclassSquareextendsRectangle{publicvoidsetWidth(intwidth){super.setWidth(width);super.setHeight(width);}publicvoidsetHeight(intheight){super.setHeight(height);super.setWidth(height);}}這種解決方法是否可行??解決方法:publicclassSquareexten43考
慮
下
面
的
代
碼: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類型的對象,則沒有問題,如果是Square類型的對象,則出錯(cuò)。}?考慮下面的代碼:publicclassTes44思考題:如
何
知
道
子
類
的
行
為
符
合
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度股東致行動協(xié)議:董事會席位調(diào)整與決策權(quán)分配
- 二零二五年度汽車充電樁場地租賃及維護(hù)服務(wù)合同
- 旅游景區(qū)服務(wù)質(zhì)量提升策略手冊
- 汽車配件銷售及售后支持協(xié)議
- 企業(yè)級軟件系統(tǒng)開發(fā)合作協(xié)議
- 水滸傳經(jīng)典人物宋江征文
- 租賃房屋補(bǔ)充協(xié)議
- 關(guān)于提高工作效率的研討會紀(jì)要
- 文化創(chuàng)意產(chǎn)業(yè)發(fā)展規(guī)劃策略
- 融資租賃資產(chǎn)轉(zhuǎn)讓協(xié)議
- 大學(xué)物理馬文蔚版PPT
- 內(nèi)蒙古自治區(qū)高層建筑工程結(jié)構(gòu)抗震基本參數(shù)表(2022年版)
- FZ/T 07010-2021綠色設(shè)計(jì)產(chǎn)品評價(jià)技術(shù)規(guī)范針織服裝
- 2023年北京市中學(xué)生數(shù)學(xué)競賽高一年級復(fù)賽試題及解答
- 乙?;蚁┩p烯酮;二乙烯酮;雙乙烯酮)的理化性質(zhì)及危險(xiǎn)特性表
- 酒店機(jī)房巡視簽到表
- API-650-1鋼制焊接石油儲罐
- 鼠疫演練腳本
- 變壓器試驗(yàn)精品課件
- 煤礦機(jī)電運(yùn)輸類臺賬(各種記錄匯編)
- 危險(xiǎn)化學(xué)品從業(yè)單位安全生產(chǎn)標(biāo)準(zhǔn)化宣貫
評論
0/150
提交評論