




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο蠓治雠c設(shè)計(jì)第三章第一頁(yè),共三十八頁(yè),編輯于2023年,星期五3.1引言2第二頁(yè),共三十八頁(yè),編輯于2023年,星期五3.1引言3第三頁(yè),共三十八頁(yè),編輯于2023年,星期五3.1引言4第四頁(yè),共三十八頁(yè),編輯于2023年,星期五3.2設(shè)計(jì)類(lèi)層次結(jié)構(gòu)例子:要給集合(Collection)建模,集合是可以包含其它對(duì)象的對(duì)象。需求中需要四類(lèi)集合List:該集合把所有的對(duì)象按照插入的順序放置Bag:該集合中的對(duì)象沒(méi)有排序LinkedList:該集合中的對(duì)象使用序列對(duì)象來(lái)排序,每個(gè)對(duì)象指向序列中的下一個(gè)對(duì)象ArrayList:該集合中的對(duì)象使用數(shù)組來(lái)排序,數(shù)組是相鄰內(nèi)存位置的序列5第五頁(yè),共三十八頁(yè),編輯于2023年,星期五3.2設(shè)計(jì)類(lèi)層次結(jié)構(gòu)6第六頁(yè),共三十八頁(yè),編輯于2023年,星期五3.2設(shè)計(jì)類(lèi)層次結(jié)構(gòu)從一般類(lèi)到特殊類(lèi)(普通類(lèi)到抽象類(lèi))首先確定層次結(jié)構(gòu)的底部有哪些類(lèi)(Bag,LinkedList,ArrayList)接著找出比較一般的概念,以豐富模型,共享元素定義。因此把LinkedList,ArrayList組合到List中,把List和Bag組合到Collection中。在開(kāi)發(fā)層次結(jié)構(gòu)時(shí),要查找消息——可以放置消息的層次結(jié)構(gòu)越高越好。在查找其它類(lèi)元素前,應(yīng)先查找消息,因?yàn)橄⒈硎緦?duì)象給外界顯示的接口,這是它們最重要的特性。7第七頁(yè),共三十八頁(yè),編輯于2023年,星期五3.2設(shè)計(jì)類(lèi)層次結(jié)構(gòu)考慮下面三個(gè)消息,將消息放在已有類(lèi)層次結(jié)構(gòu)中的哪個(gè)類(lèi)中呢?contains(:Object):boolean//在集合中搜索對(duì)象elementAt(:int):Object//參數(shù)指定的位置檢索對(duì)象numberOfElement():int//返回集合中的對(duì)象數(shù)。8第八頁(yè),共三十八頁(yè),編輯于2023年,星期五添加實(shí)現(xiàn)代碼已經(jīng)有了類(lèi)層次結(jié)構(gòu),還確定了消息的位置,下面必須添加實(shí)現(xiàn)元素(字段、構(gòu)造函數(shù)和方法)方法放在哪里,這會(huì)引出兩個(gè)重要的概念:抽象和重定義(與重載區(qū)別?)不可能在Collection類(lèi)中編寫(xiě)contains實(shí)現(xiàn)方法,因?yàn)橛行蚣虾蜔o(wú)序集合的搜索算法是不同的。所以,必須先在Bag上實(shí)現(xiàn)contains方法。但List類(lèi)怎么辦呢?9第九頁(yè),共三十八頁(yè),編輯于2023年,星期五添加實(shí)現(xiàn)代碼10第十頁(yè),共三十八頁(yè),編輯于2023年,星期五添加實(shí)現(xiàn)代碼11第十一頁(yè),共三十八頁(yè),編輯于2023年,星期五添加實(shí)現(xiàn)代碼12第十二頁(yè),共三十八頁(yè),編輯于2023年,星期五添加實(shí)現(xiàn)代碼現(xiàn)在就能獲得繼承的好處:只編寫(xiě)一個(gè)方法,它可用于List的任何直接或間接子類(lèi)。對(duì)于LinkedList,ArrayList來(lái)說(shuō),elementAt消息的實(shí)現(xiàn)代碼是不同的。給numberOfElements編寫(xiě)實(shí)現(xiàn)代碼:把元素?cái)?shù)存儲(chǔ)為字段需要時(shí),再計(jì)算元素?cái)?shù)13第十三頁(yè),共三十八頁(yè),編輯于2023年,星期五14第十四頁(yè),共三十八頁(yè),編輯于2023年,星期五3.4抽象類(lèi)抽象類(lèi)是至少有一個(gè)抽象方法的類(lèi)——抽象方法可以是該類(lèi)本身的方法,也可以是從超類(lèi)繼承來(lái)的。若類(lèi)中包含了抽象方法,那么該類(lèi)只能聲名為抽象類(lèi)(或接口),抽象類(lèi)中可以有抽象方法或具體方法,也可以沒(méi)有抽象方法,甚至可以什么都沒(méi)有。在抽象類(lèi)中可以為部分方法提供默認(rèn)的實(shí)現(xiàn),從而避免在子類(lèi)中重復(fù)實(shí)現(xiàn)它們,提高代碼的可重用性,這是抽象類(lèi)的優(yōu)勢(shì)所在而接口中只能包含抽象方法,擴(kuò)展功能時(shí),在抽象父類(lèi)中加入具體方法不會(huì)影響子類(lèi);但在接口中加入抽象方法會(huì)影響到所有實(shí)現(xiàn)類(lèi)。一個(gè)類(lèi)只能繼承一個(gè)直接的父類(lèi),這個(gè)父類(lèi)有可能是抽象類(lèi);但一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,這是接口的優(yōu)勢(shì)所在。15第十五頁(yè),共三十八頁(yè),編輯于2023年,星期五3.4抽象類(lèi)16第十六頁(yè),共三十八頁(yè),編輯于2023年,星期五3.4抽象類(lèi)抽象類(lèi)用來(lái)定義類(lèi)需要執(zhí)行哪些行為而不必提供每一個(gè)行為的明確實(shí)現(xiàn)抽象類(lèi)不能直接被實(shí)例化。抽象類(lèi)的子類(lèi)也可能仍然是一個(gè)抽象類(lèi)。關(guān)鍵在于子類(lèi)中是否提供了所有抽象方法的實(shí)現(xiàn)代碼。抽象類(lèi)是相對(duì)于接口而言是一個(gè)更加優(yōu)秀的類(lèi)的抽象模型。它除了具有接口一樣的功能之外,還能將具體類(lèi)中公共的方法實(shí)現(xiàn)集中到抽象類(lèi)中,而不用在每一個(gè)具體類(lèi)中重復(fù)。17第十七頁(yè),共三十八頁(yè),編輯于2023年,星期五3.4抽象類(lèi)抽象類(lèi)有如下優(yōu)點(diǎn)它們?cè)试S更豐富、更靈活地建模它們可以共享更多的代碼,因?yàn)榭梢跃帉?xiě)具體的方法來(lái)使用抽象的方法更便于封裝變化點(diǎn)18第十八頁(yè),共三十八頁(yè),編輯于2023年,星期五3.4抽象類(lèi)在設(shè)計(jì)類(lèi)層次結(jié)構(gòu)是,應(yīng)記住,大多數(shù)超類(lèi)都是抽象的。下面說(shuō)明了繼承層次結(jié)構(gòu)是從底向上派生的:1、在問(wèn)題域中查找具體的概念,推導(dǎo)出它們的知識(shí)和 行為2、在具體的類(lèi)中找出共同點(diǎn),以便引入更一般的超類(lèi)3、把超類(lèi)組合到更一般的超類(lèi)中,直到找出根類(lèi)在表示泛化(超類(lèi))時(shí),我們希望它是抽象的,否則就可能表示為第1步中的具體概念。19第十九頁(yè),共三十八頁(yè),編輯于2023年,星期五抽象方法和虛方法抽象方法和虛方法的區(qū)別(abstract)抽象方法和(virtual)虛方法的區(qū)別在于:虛方法有一個(gè)實(shí)現(xiàn)部分可以為子類(lèi)實(shí)現(xiàn)有共同的方法,并為派生提供了覆蓋該方法的選項(xiàng),相反,抽象方法沒(méi)有提供實(shí)現(xiàn)部分,強(qiáng)制派生覆蓋方法(否則派生類(lèi)不能成具體類(lèi))(abstract)抽象方法只能在抽象類(lèi)中聲明,(virtual)虛方法不是。(abstract)抽象方法不能聲明方法實(shí)體,虛方法可以。包含抽象方法(只有抽象類(lèi)才可以包含抽象方法)的類(lèi)不能實(shí)例化(也就是說(shuō)只可以使用predected和private修飾符),虛方法可以20第二十頁(yè),共三十八頁(yè),編輯于2023年,星期五3.5重定義方法面向?qū)ο罂梢灾匦露x繼承來(lái)的元素,重定義允許子類(lèi)修改繼承方法的實(shí)現(xiàn)代碼——消息看起來(lái)是相同的,但代碼行被替換了。覆蓋(overriding)技術(shù)。重定義可以使消息在子類(lèi)中的可見(jiàn)性更高。重定義可以改變屬性的名稱(chēng)和類(lèi)型。(一般沒(méi)必要這么做)21第二十一頁(yè),共三十八頁(yè),編輯于2023年,星期五3.5重定義方法重定義方法的三個(gè)原因:繼承的方法是抽象的,我們希望給他一些代碼,把它變成具體的。子類(lèi)中的方法需要完成一些額外的工作??梢詾樽宇?lèi)提供更好的實(shí)現(xiàn)代碼(更高效更準(zhǔn)確)例如給LikedList類(lèi)添加一個(gè)索引,就可以重新定義contains,使之比List使用的算法更快。為了完成額外的工作,每種面向?qū)ο蟮恼Z(yǔ)言都允許重定義的方法調(diào)用超類(lèi)的方法。22第二十二頁(yè),共三十八頁(yè),編輯于2023年,星期五3.5重定義方法23第二十三頁(yè),共三十八頁(yè),編輯于2023年,星期五3.6實(shí)現(xiàn)棧類(lèi)實(shí)現(xiàn)Stack類(lèi),它帶有如下四個(gè)消息24第二十四頁(yè),共三十八頁(yè),編輯于2023年,星期五25第二十五頁(yè),共三十八頁(yè),編輯于2023年,星期五實(shí)現(xiàn)棧類(lèi)示例代碼26第二十六頁(yè),共三十八頁(yè),編輯于2023年,星期五繼承和組合27第二十七頁(yè),共三十八頁(yè),編輯于2023年,星期五繼承和組合繼承有一些獨(dú)特的優(yōu)點(diǎn):它是自然的它是優(yōu)雅的它允許編寫(xiě)一般的代碼,例如用于Fruit的代碼也可以用于Apple和Pear繼承也有如下問(wèn)題很難做得很好在發(fā)現(xiàn)設(shè)計(jì)中的不足時(shí)很難改變客戶程序員很難理解層次結(jié)構(gòu)會(huì)“泄漏”給客戶代碼,也難以改變復(fù)用易于維護(hù)強(qiáng)耦合性盡量降低耦合性,提高可擴(kuò)展性28第二十八頁(yè),共三十八頁(yè),編輯于2023年,星期五繼承和組合組合會(huì)得到與繼承相同的結(jié)果(具體類(lèi)、具體消息和復(fù)用已有的代碼)還有如下優(yōu)點(diǎn):較容易開(kāi)發(fā)較容易改變客戶容易理解不會(huì)泄露客戶代碼最大的優(yōu)點(diǎn)是代碼的安全性問(wèn)題得到解決29第二十九頁(yè),共三十八頁(yè),編輯于2023年,星期五3.7多重繼承30第三十頁(yè),共三十八頁(yè),編輯于2023年,星期五3.7多重繼承31第三十一頁(yè),共三十八頁(yè),編輯于2023年,星期五3.7多重繼承32第三十二頁(yè),共三十八頁(yè),編輯于2023年,星期五3.7多重繼承33第三十三頁(yè),共三十八頁(yè),編輯于2023年,星期五繼承通常被定義為兩個(gè)類(lèi)之間的“是一個(gè)”(“isa”)關(guān)系,如果類(lèi)Y從類(lèi)X中派生,那么Y確實(shí)是一個(gè)X的特例,因此可以對(duì)超類(lèi)陳述的所有事實(shí)對(duì)其所有子類(lèi)同樣適用3.8使用繼承的規(guī)則1.不要過(guò)度使用:不要認(rèn)為必須使用繼承,甚至總是使用繼承。2.類(lèi)應(yīng)是超類(lèi)的一個(gè)類(lèi)型:只要從超類(lèi)X中派生出Y,就要問(wèn)問(wèn)自己:“Y是X的一種類(lèi)型嗎”。3.類(lèi)應(yīng)是其超類(lèi)的擴(kuò)展:在子類(lèi)中,應(yīng)確保只添加新的特性,不要?jiǎng)h除,禁用或重新解釋特性,來(lái)分解超類(lèi)。4.盡量少?gòu)木唧w類(lèi)繼承,繼承接口或抽象類(lèi)比較好。34第三十四頁(yè),共三十八頁(yè),編輯于2023年,星期五設(shè)計(jì)原則可維護(hù)性復(fù)用的實(shí)現(xiàn)是以設(shè)計(jì)原則和設(shè)計(jì)模式為基礎(chǔ)的。如果設(shè)計(jì)模式是“形”的話,那么設(shè)計(jì)原則就是“魂”。35第三十五頁(yè),共三十八頁(yè),編輯于2023年,星期五設(shè)計(jì)原則這些設(shè)計(jì)原則是:開(kāi)閉原則軟件對(duì)象應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉里氏代換原則基類(lèi)出現(xiàn)的地方,子類(lèi)一定可以出現(xiàn)依賴(lài)倒轉(zhuǎn)原則要依賴(lài)于抽象,不要依賴(lài)于實(shí)現(xiàn)合成/聚合復(fù)用原則盡量使用合成/聚合,而不是繼承達(dá)到復(fù)用迪米特原則一個(gè)軟件實(shí)體與盡可能少的實(shí)體相互作用接口隔離原則為客戶端提供盡可能小的單獨(dú)的接口36第三十六頁(yè),共三十八頁(yè),編輯于2023年,星期五設(shè)計(jì)原則原則的英文名稱(chēng)對(duì)照表:開(kāi)閉原則Open-ClosedPrincipleOCP里氏代換原則LiskovSubstitutionPrincipleLSP依賴(lài)倒轉(zhuǎn)原則DependenceInversionPrincipleDIP合成/聚合復(fù)用原則C
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人防工程制式銷(xiāo)售合同范本
- 分散采購(gòu)服務(wù)合同范本
- 農(nóng)村燃?xì)獍惭b合同范例
- 協(xié)助寵物國(guó)際托運(yùn)合同范本
- 農(nóng)田租賃合同范本
- 專(zhuān)利轉(zhuǎn)讓入股合同范本
- 養(yǎng)魚(yú)合作轉(zhuǎn)讓合同范本
- 公版采購(gòu)合同范本
- 單位解聘教師合同范本
- 買(mǎi)賣(mài)中介公司合同范本
- 人教版小學(xué)數(shù)學(xué)一年級(jí)下冊(cè)教案
- 《住院患者身體約束的護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀課件
- 新版人音版小學(xué)音樂(lè)一年級(jí)下冊(cè)全冊(cè)教案
- 2024年黑龍江建筑職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)全面
- 公因數(shù)、最大公因數(shù)的應(yīng)用
- CBT主要技術(shù)精品課件
- 常用液壓元件型號(hào)對(duì)照表230
- 項(xiàng)目章程模板范文
- 泰山產(chǎn)業(yè)領(lǐng)軍人才工程系統(tǒng)
- 輪扣架支模體系材料量計(jì)算
- 主題班會(huì)教案《讀書(shū)好讀好書(shū)好讀書(shū)》班會(huì)方案
評(píng)論
0/150
提交評(píng)論