![面向?qū)ο蠓治雠c設(shè)計第三章_第1頁](http://file4.renrendoc.com/view/d82513d538a24fa044fa68b6eed89b1e/d82513d538a24fa044fa68b6eed89b1e1.gif)
![面向?qū)ο蠓治雠c設(shè)計第三章_第2頁](http://file4.renrendoc.com/view/d82513d538a24fa044fa68b6eed89b1e/d82513d538a24fa044fa68b6eed89b1e2.gif)
![面向?qū)ο蠓治雠c設(shè)計第三章_第3頁](http://file4.renrendoc.com/view/d82513d538a24fa044fa68b6eed89b1e/d82513d538a24fa044fa68b6eed89b1e3.gif)
![面向?qū)ο蠓治雠c設(shè)計第三章_第4頁](http://file4.renrendoc.com/view/d82513d538a24fa044fa68b6eed89b1e/d82513d538a24fa044fa68b6eed89b1e4.gif)
![面向?qū)ο蠓治雠c設(shè)計第三章_第5頁](http://file4.renrendoc.com/view/d82513d538a24fa044fa68b6eed89b1e/d82513d538a24fa044fa68b6eed89b1e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
面向?qū)ο蠓治雠c設(shè)計第三章第一頁,共三十八頁,編輯于2023年,星期五3.1引言2第二頁,共三十八頁,編輯于2023年,星期五3.1引言3第三頁,共三十八頁,編輯于2023年,星期五3.1引言4第四頁,共三十八頁,編輯于2023年,星期五3.2設(shè)計類層次結(jié)構(gòu)例子:要給集合(Collection)建模,集合是可以包含其它對象的對象。需求中需要四類集合List:該集合把所有的對象按照插入的順序放置Bag:該集合中的對象沒有排序LinkedList:該集合中的對象使用序列對象來排序,每個對象指向序列中的下一個對象ArrayList:該集合中的對象使用數(shù)組來排序,數(shù)組是相鄰內(nèi)存位置的序列5第五頁,共三十八頁,編輯于2023年,星期五3.2設(shè)計類層次結(jié)構(gòu)6第六頁,共三十八頁,編輯于2023年,星期五3.2設(shè)計類層次結(jié)構(gòu)從一般類到特殊類(普通類到抽象類)首先確定層次結(jié)構(gòu)的底部有哪些類(Bag,LinkedList,ArrayList)接著找出比較一般的概念,以豐富模型,共享元素定義。因此把LinkedList,ArrayList組合到List中,把List和Bag組合到Collection中。在開發(fā)層次結(jié)構(gòu)時,要查找消息——可以放置消息的層次結(jié)構(gòu)越高越好。在查找其它類元素前,應(yīng)先查找消息,因為消息表示對象給外界顯示的接口,這是它們最重要的特性。7第七頁,共三十八頁,編輯于2023年,星期五3.2設(shè)計類層次結(jié)構(gòu)考慮下面三個消息,將消息放在已有類層次結(jié)構(gòu)中的哪個類中呢?contains(:Object):boolean//在集合中搜索對象elementAt(:int):Object//參數(shù)指定的位置檢索對象numberOfElement():int//返回集合中的對象數(shù)。8第八頁,共三十八頁,編輯于2023年,星期五添加實現(xiàn)代碼已經(jīng)有了類層次結(jié)構(gòu),還確定了消息的位置,下面必須添加實現(xiàn)元素(字段、構(gòu)造函數(shù)和方法)方法放在哪里,這會引出兩個重要的概念:抽象和重定義(與重載區(qū)別?)不可能在Collection類中編寫contains實現(xiàn)方法,因為有序集合和無序集合的搜索算法是不同的。所以,必須先在Bag上實現(xiàn)contains方法。但List類怎么辦呢?9第九頁,共三十八頁,編輯于2023年,星期五添加實現(xiàn)代碼10第十頁,共三十八頁,編輯于2023年,星期五添加實現(xiàn)代碼11第十一頁,共三十八頁,編輯于2023年,星期五添加實現(xiàn)代碼12第十二頁,共三十八頁,編輯于2023年,星期五添加實現(xiàn)代碼現(xiàn)在就能獲得繼承的好處:只編寫一個方法,它可用于List的任何直接或間接子類。對于LinkedList,ArrayList來說,elementAt消息的實現(xiàn)代碼是不同的。給numberOfElements編寫實現(xiàn)代碼:把元素數(shù)存儲為字段需要時,再計算元素數(shù)13第十三頁,共三十八頁,編輯于2023年,星期五14第十四頁,共三十八頁,編輯于2023年,星期五3.4抽象類抽象類是至少有一個抽象方法的類——抽象方法可以是該類本身的方法,也可以是從超類繼承來的。若類中包含了抽象方法,那么該類只能聲名為抽象類(或接口),抽象類中可以有抽象方法或具體方法,也可以沒有抽象方法,甚至可以什么都沒有。在抽象類中可以為部分方法提供默認(rèn)的實現(xiàn),從而避免在子類中重復(fù)實現(xiàn)它們,提高代碼的可重用性,這是抽象類的優(yōu)勢所在而接口中只能包含抽象方法,擴(kuò)展功能時,在抽象父類中加入具體方法不會影響子類;但在接口中加入抽象方法會影響到所有實現(xiàn)類。一個類只能繼承一個直接的父類,這個父類有可能是抽象類;但一個類可以實現(xiàn)多個接口,這是接口的優(yōu)勢所在。15第十五頁,共三十八頁,編輯于2023年,星期五3.4抽象類16第十六頁,共三十八頁,編輯于2023年,星期五3.4抽象類抽象類用來定義類需要執(zhí)行哪些行為而不必提供每一個行為的明確實現(xiàn)抽象類不能直接被實例化。抽象類的子類也可能仍然是一個抽象類。關(guān)鍵在于子類中是否提供了所有抽象方法的實現(xiàn)代碼。抽象類是相對于接口而言是一個更加優(yōu)秀的類的抽象模型。它除了具有接口一樣的功能之外,還能將具體類中公共的方法實現(xiàn)集中到抽象類中,而不用在每一個具體類中重復(fù)。17第十七頁,共三十八頁,編輯于2023年,星期五3.4抽象類抽象類有如下優(yōu)點它們允許更豐富、更靈活地建模它們可以共享更多的代碼,因為可以編寫具體的方法來使用抽象的方法更便于封裝變化點18第十八頁,共三十八頁,編輯于2023年,星期五3.4抽象類在設(shè)計類層次結(jié)構(gòu)是,應(yīng)記住,大多數(shù)超類都是抽象的。下面說明了繼承層次結(jié)構(gòu)是從底向上派生的:1、在問題域中查找具體的概念,推導(dǎo)出它們的知識和 行為2、在具體的類中找出共同點,以便引入更一般的超類3、把超類組合到更一般的超類中,直到找出根類在表示泛化(超類)時,我們希望它是抽象的,否則就可能表示為第1步中的具體概念。19第十九頁,共三十八頁,編輯于2023年,星期五抽象方法和虛方法抽象方法和虛方法的區(qū)別(abstract)抽象方法和(virtual)虛方法的區(qū)別在于:虛方法有一個實現(xiàn)部分可以為子類實現(xiàn)有共同的方法,并為派生提供了覆蓋該方法的選項,相反,抽象方法沒有提供實現(xiàn)部分,強制派生覆蓋方法(否則派生類不能成具體類)(abstract)抽象方法只能在抽象類中聲明,(virtual)虛方法不是。(abstract)抽象方法不能聲明方法實體,虛方法可以。包含抽象方法(只有抽象類才可以包含抽象方法)的類不能實例化(也就是說只可以使用predected和private修飾符),虛方法可以20第二十頁,共三十八頁,編輯于2023年,星期五3.5重定義方法面向?qū)ο罂梢灾匦露x繼承來的元素,重定義允許子類修改繼承方法的實現(xiàn)代碼——消息看起來是相同的,但代碼行被替換了。覆蓋(overriding)技術(shù)。重定義可以使消息在子類中的可見性更高。重定義可以改變屬性的名稱和類型。(一般沒必要這么做)21第二十一頁,共三十八頁,編輯于2023年,星期五3.5重定義方法重定義方法的三個原因:繼承的方法是抽象的,我們希望給他一些代碼,把它變成具體的。子類中的方法需要完成一些額外的工作??梢詾樽宇愄峁└玫膶崿F(xiàn)代碼(更高效更準(zhǔn)確)例如給LikedList類添加一個索引,就可以重新定義contains,使之比List使用的算法更快。為了完成額外的工作,每種面向?qū)ο蟮恼Z言都允許重定義的方法調(diào)用超類的方法。22第二十二頁,共三十八頁,編輯于2023年,星期五3.5重定義方法23第二十三頁,共三十八頁,編輯于2023年,星期五3.6實現(xiàn)棧類實現(xiàn)Stack類,它帶有如下四個消息24第二十四頁,共三十八頁,編輯于2023年,星期五25第二十五頁,共三十八頁,編輯于2023年,星期五實現(xiàn)棧類示例代碼26第二十六頁,共三十八頁,編輯于2023年,星期五繼承和組合27第二十七頁,共三十八頁,編輯于2023年,星期五繼承和組合繼承有一些獨特的優(yōu)點:它是自然的它是優(yōu)雅的它允許編寫一般的代碼,例如用于Fruit的代碼也可以用于Apple和Pear繼承也有如下問題很難做得很好在發(fā)現(xiàn)設(shè)計中的不足時很難改變客戶程序員很難理解層次結(jié)構(gòu)會“泄漏”給客戶代碼,也難以改變復(fù)用易于維護(hù)強耦合性盡量降低耦合性,提高可擴(kuò)展性28第二十八頁,共三十八頁,編輯于2023年,星期五繼承和組合組合會得到與繼承相同的結(jié)果(具體類、具體消息和復(fù)用已有的代碼)還有如下優(yōu)點:較容易開發(fā)較容易改變客戶容易理解不會泄露客戶代碼最大的優(yōu)點是代碼的安全性問題得到解決29第二十九頁,共三十八頁,編輯于2023年,星期五3.7多重繼承30第三十頁,共三十八頁,編輯于2023年,星期五3.7多重繼承31第三十一頁,共三十八頁,編輯于2023年,星期五3.7多重繼承32第三十二頁,共三十八頁,編輯于2023年,星期五3.7多重繼承33第三十三頁,共三十八頁,編輯于2023年,星期五繼承通常被定義為兩個類之間的“是一個”(“isa”)關(guān)系,如果類Y從類X中派生,那么Y確實是一個X的特例,因此可以對超類陳述的所有事實對其所有子類同樣適用3.8使用繼承的規(guī)則1.不要過度使用:不要認(rèn)為必須使用繼承,甚至總是使用繼承。2.類應(yīng)是超類的一個類型:只要從超類X中派生出Y,就要問問自己:“Y是X的一種類型嗎”。3.類應(yīng)是其超類的擴(kuò)展:在子類中,應(yīng)確保只添加新的特性,不要刪除,禁用或重新解釋特性,來分解超類。4.盡量少從具體類繼承,繼承接口或抽象類比較好。34第三十四頁,共三十八頁,編輯于2023年,星期五設(shè)計原則可維護(hù)性復(fù)用的實現(xiàn)是以設(shè)計原則和設(shè)計模式為基礎(chǔ)的。如果設(shè)計模式是“形”的話,那么設(shè)計原則就是“魂”。35第三十五頁,共三十八頁,編輯于2023年,星期五設(shè)計原則這些設(shè)計原則是:開閉原則軟件對象應(yīng)該對擴(kuò)展開放,對修改關(guān)閉里氏代換原則基類出現(xiàn)的地方,子類一定可以出現(xiàn)依賴倒轉(zhuǎn)原則要依賴于抽象,不要依賴于實現(xiàn)合成/聚合復(fù)用原則盡量使用合成/聚合,而不是繼承達(dá)到復(fù)用迪米特原則一個軟件實體與盡可能少的實體相互作用接口隔離原則為客戶端提供盡可能小的單獨的接口36第三十六頁,共三十八頁,編輯于2023年,星期五設(shè)計原則原則的英文名稱對照表:開閉原則Open-ClosedPrincipleOCP里氏代換原則LiskovSubstitutionPrincipleLSP依賴倒轉(zhuǎn)原則DependenceInversionPrincipleDIP合成/聚合復(fù)用原則C
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 親子教育項目居間合同樣本
- 電影院裝修服務(wù)合同范本
- 農(nóng)藥購銷合同樣本
- 三農(nóng)村公共環(huán)境治理體系建設(shè)指南
- 生產(chǎn)管理實務(wù)操作流程詳解
- 網(wǎng)絡(luò)教育技術(shù)運用與發(fā)展趨勢研究報告與指導(dǎo)書
- 鋼化玻璃采購合同書
- 購買豆腐的合同
- 2025年陽江b2貨運上崗證模擬考試
- 小學(xué)三年級上冊口算練習(xí)500題
- 2024年臨床醫(yī)師定期考核試題中醫(yī)知識題庫及答案(共330題) (二)
- 《住院患者身體約束的護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀課件
- 《上消化道出血診療指南》講稿
- 電商部售后客服績效考核表
- 小提琴協(xié)奏曲《梁祝》譜
- 人教版高中化學(xué)必修一第一章《物質(zhì)及其變化》教學(xué)課件
- 復(fù)工復(fù)產(chǎn)工作方案范本【復(fù)產(chǎn)復(fù)工安全工作方案】
- HyperMesh100基礎(chǔ)培訓(xùn)教程
- 化工裝置實用操作技術(shù)指南講解
- 春季高考英語《大綱短語》(218個核心詞匯相關(guān)短語)
- 護(hù)理文書書寫規(guī)范ppt課件
評論
0/150
提交評論