




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
(優(yōu)選)設(shè)計(jì)大原則當(dāng)前1頁(yè),總共40頁(yè)。面向?qū)ο笈c面向?qū)崿F(xiàn)面向?qū)ο笤O(shè)計(jì)
面向?qū)ο笤O(shè)計(jì)的軟件是可維護(hù)和可復(fù)用的。一個(gè)好的系統(tǒng)設(shè)計(jì)應(yīng)該具備如下三個(gè)性質(zhì): 1、可擴(kuò)展性(Extensibility) 2、靈活性(Flexibility) 3、可插入性(Pluggability)面向?qū)崿F(xiàn)設(shè)計(jì)
軟件能達(dá)到業(yè)務(wù)功能的需求,不考慮可維護(hù)性和可復(fù)用性。當(dāng)前2頁(yè),總共40頁(yè)。設(shè)計(jì)7大原則單一職責(zé)原則(SingleResponsibilityPrinciple,SRP)開閉原則(Open-ClosedPrinciple,OCP)里氏代換原則(LiskovSubstitutionPrinciple,LSP)依賴倒轉(zhuǎn)原則(DependenceInversionPrinciple,DIP)接口隔離原則(InterfaceSegregationPrinciple,ISP)合成復(fù)用原則(CompositeReusePrinciple,CRP)迪米特法則(LawofDemeter,LoD)當(dāng)前3頁(yè),總共40頁(yè)。單一職責(zé)原則單一職責(zé)原則定義
一個(gè)對(duì)象應(yīng)該只包含單一的職責(zé),并且該職責(zé)被完整地封裝在一個(gè)類中。另一種定義方式
就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因。當(dāng)前4頁(yè),總共40頁(yè)。單一職責(zé)原則特點(diǎn)一個(gè)類(或者大到模塊,小到方法)承擔(dān)的職責(zé)越多,它被復(fù)用的可能性越小,而且如果一個(gè)類承擔(dān)的職責(zé)過多,就相當(dāng)于將這些職責(zé)耦合在一起,當(dāng)其中一個(gè)職責(zé)變化時(shí),可能會(huì)影響其他職責(zé)的運(yùn)作。類的職責(zé)主要包括兩個(gè)方面:數(shù)據(jù)職責(zé)和行為職責(zé),數(shù)據(jù)職責(zé)通過其屬性來體現(xiàn),而行為職責(zé)通過其方法來體現(xiàn)。單一職責(zé)原則是實(shí)現(xiàn)高內(nèi)聚、低耦合的指導(dǎo)方針,在很多代碼重構(gòu)手法中都能找到它的存在,它是最簡(jiǎn)單但又最難運(yùn)用的原則,需要設(shè)計(jì)人員發(fā)現(xiàn)類的不同職責(zé)并將其分離,而發(fā)現(xiàn)類的多重職責(zé)需要設(shè)計(jì)人員具有較強(qiáng)的分析設(shè)計(jì)能力和相關(guān)重構(gòu)經(jīng)驗(yàn)。
當(dāng)前5頁(yè),總共40頁(yè)。單一職責(zé)原則實(shí)例單一職責(zé)原則實(shí)例說明某基于Java的C/S系統(tǒng)的“登錄功能”通過如下登錄類(Login)實(shí)現(xiàn):現(xiàn)使用單一職責(zé)原則對(duì)其進(jìn)行重構(gòu)。當(dāng)前6頁(yè),總共40頁(yè)。單一職責(zé)原則實(shí)例單一職責(zé)原則實(shí)例說明當(dāng)前7頁(yè),總共40頁(yè)。開閉原則開閉原則定義
一個(gè)軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。也就是說在設(shè)計(jì)一個(gè)模塊的時(shí)候,應(yīng)當(dāng)使這個(gè)模塊可以在不被修改的前提下被擴(kuò)展,即實(shí)現(xiàn)在不修改源代碼的情況下改變這個(gè)模塊的行為。當(dāng)前8頁(yè),總共40頁(yè)。開閉原則特點(diǎn)在開閉原則的定義中,軟件實(shí)體可以指一個(gè)軟件模塊、一個(gè)由多個(gè)類組成的局部結(jié)構(gòu)或一個(gè)獨(dú)立的類。類抽象化是開閉原則的關(guān)鍵。開閉原則還可以通過一個(gè)更加具體的“對(duì)可變性封裝原則”來描述,對(duì)可變性封裝原則(PrincipleofEncapsulationofVariation,EVP)要求找到系統(tǒng)的可變因素并將其封裝起來。
當(dāng)前9頁(yè),總共40頁(yè)。開閉原則實(shí)例開閉原則實(shí)例說明某某圖形界面系統(tǒng)提供了各種不同形狀的按鈕,客戶端代碼可針對(duì)這些按鈕進(jìn)行編程,用戶可能會(huì)改變需求要求使用不同的按鈕,原始設(shè)計(jì)方案如圖所示:現(xiàn)對(duì)該系統(tǒng)進(jìn)行重構(gòu),使之滿足開閉原則的要求。當(dāng)前10頁(yè),總共40頁(yè)。開閉原則實(shí)例開閉原則實(shí)例說明當(dāng)前11頁(yè),總共40頁(yè)。里氏代換原則里氏代換原則定義
如果對(duì)每一個(gè)類型為S的對(duì)象o1,都有類型為T的對(duì)象o2,使得以T定義的所有程序P在所有的對(duì)象o1都代換成o2時(shí),程序P的行為沒有變化,那么類型S是類型T的子類型。更容易理解的定義
所有引用基類(父類)的地方必須能透明地使用其子類的對(duì)象。當(dāng)前12頁(yè),總共40頁(yè)。里氏代換原則分析里氏代換原則可以通俗表述為:在軟件中如果能夠使用基類(父類)對(duì)象,那么一定能夠使用其子類對(duì)象。把基類都替換成它的子類,程序?qū)⒉粫?huì)產(chǎn)生任何錯(cuò)誤和異常,反過來則不成立,如果一個(gè)軟件實(shí)體使用的是一個(gè)子類的話,那么它不一定能夠使用基類。里氏代換原則是實(shí)現(xiàn)開閉原則的重要方式之一,由于使用基類對(duì)象的地方都可以使用子類對(duì)象,因此在程序中盡量使用基類類型來對(duì)對(duì)象進(jìn)行定義,而在運(yùn)行時(shí)再確定其子類類型,用子類對(duì)象來替換父類對(duì)象。
當(dāng)前13頁(yè),總共40頁(yè)。里氏代換原則分析
喜歡動(dòng)物喜歡貓因?yàn)樨埵莿?dòng)物當(dāng)前14頁(yè),總共40頁(yè)。里氏代換原則實(shí)例系統(tǒng)需要實(shí)現(xiàn)對(duì)重要數(shù)據(jù)(如用戶密碼)的加密處理,在數(shù)據(jù)操作類(DataOperator)中需要調(diào)用加密類中定義的加密算法,系統(tǒng)提供了兩個(gè)不同的加密類,CipherA和CipherB,它們實(shí)現(xiàn)不同的加密方法,在DataOperator中可以選擇其中的一個(gè)實(shí)現(xiàn)加密操作。如圖所示:當(dāng)前15頁(yè),總共40頁(yè)。里氏代換原則實(shí)例需求說明如果需要更換一個(gè)加密算法類或者增加并使用一個(gè)新的加密算法類,如將CipherA改為CipherB,則需要修改客戶類Client和數(shù)據(jù)操作類DataOperator的源代碼,違背了開閉原則?,F(xiàn)使用里氏代換原則對(duì)其進(jìn)行重構(gòu),使得系統(tǒng)可以靈活擴(kuò)展,符合開閉原則。當(dāng)前16頁(yè),總共40頁(yè)。里氏代換原則實(shí)例當(dāng)前17頁(yè),總共40頁(yè)。依賴倒轉(zhuǎn)原則依賴倒轉(zhuǎn)原則定義
高層模塊不應(yīng)該依賴低層模塊,它們都應(yīng)該依賴抽象。抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。另一種定義
要針對(duì)接口編程,不要針對(duì)實(shí)現(xiàn)編程。當(dāng)前18頁(yè),總共40頁(yè)。依賴倒轉(zhuǎn)原則特點(diǎn)簡(jiǎn)單來說,依賴倒轉(zhuǎn)原則就是指:代碼要依賴于抽象的類,而不要依賴于具體的類;要針對(duì)接口或抽象類編程,而不是針對(duì)具體類編程。實(shí)現(xiàn)開閉原則的關(guān)鍵是抽象化,并且從抽象化導(dǎo)出具體化實(shí)現(xiàn),如果說開閉原則是面向?qū)ο笤O(shè)計(jì)的目標(biāo)的話,那么依賴倒轉(zhuǎn)原則就是面向?qū)ο笤O(shè)計(jì)的主要手段。依賴倒轉(zhuǎn)原則的常用實(shí)現(xiàn)方式之一是在代碼中使用抽象類,而將具體類放在配置文件中。當(dāng)前19頁(yè),總共40頁(yè)。依賴倒轉(zhuǎn)原則特點(diǎn)類之間的耦合 1、零耦合關(guān)系 2、具體耦合關(guān)系 3、抽象耦合關(guān)系依賴倒轉(zhuǎn)原則要求客戶端依賴于抽象耦合,以抽象方式耦合是依賴倒轉(zhuǎn)原則的關(guān)鍵。依賴注入 1、構(gòu)造注入(ConstructorInjection):通過構(gòu)造函數(shù)注入實(shí)例變量。 2、設(shè)值注入(SetterInjection):通過Setter方法注入實(shí)例變量。 3、接口注入(InterfaceInjection):通過接口方法注入實(shí)例變量。當(dāng)前20頁(yè),總共40頁(yè)。依賴倒轉(zhuǎn)原則實(shí)例某系統(tǒng)提供一個(gè)數(shù)據(jù)轉(zhuǎn)換模塊,可以將來自不同數(shù)據(jù)源的數(shù)據(jù)轉(zhuǎn)換成多種格式,如可以轉(zhuǎn)換來自數(shù)據(jù)庫(kù)的數(shù)據(jù)(DatabaseSource)、也可以轉(zhuǎn)換來自文本文件的數(shù)據(jù)(TextSource),轉(zhuǎn)換后的格式可以是XML文件(XMLTransformer)、也可以是XLS文件(XLSTransformer)等。當(dāng)前21頁(yè),總共40頁(yè)。依賴倒轉(zhuǎn)原則實(shí)例需求說明由于需求的變化,該系統(tǒng)可能需要增加新的數(shù)據(jù)源或者新的文件格式,每增加一個(gè)新類型的數(shù)據(jù)源或者新類型的文件格式,客戶類MainClass都需要修改源代碼,以便使用新的類,但違背了開閉原則。現(xiàn)使用依賴倒轉(zhuǎn)原則對(duì)其進(jìn)行重構(gòu)。當(dāng)前22頁(yè),總共40頁(yè)。依賴倒轉(zhuǎn)原則實(shí)例當(dāng)前23頁(yè),總共40頁(yè)。接口隔離原則接口隔離原則定義
客戶端不應(yīng)該依賴那些它不需要的接口。另一種定義
當(dāng)一個(gè)接口太大,則需要將它分割成一些更細(xì)小的接口,使用該接口的客戶端僅需知道與之相關(guān)的方法即可。當(dāng)前24頁(yè),總共40頁(yè)。接口隔離原則特點(diǎn)接口隔離原則是指使用多個(gè)專門的接口,而不使用單一的總接口。每一個(gè)接口應(yīng)該承擔(dān)一種相對(duì)獨(dú)立的角色,不多不少,不干不該干的事,該干的事都要干。 1、一個(gè)接口就只代表一個(gè)角色,每個(gè)角色都有它特定的一個(gè)接口,此時(shí)這個(gè)原則可以叫做“角色隔離原則”。 2、接口僅僅提供客戶端需要的行為,即所需的方法,客戶端不需要的行為則隱藏起來,應(yīng)當(dāng)為客戶端提供盡可能小的單獨(dú)的接口,而不要提供大的總接口。使用接口隔離原則拆分接口時(shí),首先必須滿足單一職責(zé)原則,將一組相關(guān)的操作定義在一個(gè)接口中,且在滿足高內(nèi)聚的前提下,接口中的方法越少越好??梢栽谶M(jìn)行系統(tǒng)設(shè)計(jì)時(shí)采用定制服務(wù)的方式,即為不同的客戶端提供寬窄不同的接口,只提供用戶需要的行為,而隱藏用戶不需要的行為。當(dāng)前25頁(yè),總共40頁(yè)。接口隔離原則實(shí)例下圖展示了一個(gè)擁有多個(gè)客戶類的系統(tǒng),在系統(tǒng)中定義了一個(gè)巨大的接口(胖接口)AbstractService來服務(wù)所有的客戶類??梢允褂媒涌诟綦x原則對(duì)其進(jìn)行重構(gòu)。當(dāng)前26頁(yè),總共40頁(yè)。接口隔離原則實(shí)例當(dāng)前27頁(yè),總共40頁(yè)。合成復(fù)用原則合成復(fù)用原則定義
合成復(fù)用原則(CompositeReusePrinciple,CRP)又稱為組合/聚合復(fù)用原則(Composition/AggregateReusePrinciple,CARP),其定義如下:
盡量使用對(duì)象組合,而不是繼承來達(dá)到復(fù)用的目的。當(dāng)前28頁(yè),總共40頁(yè)。合成復(fù)用原則特點(diǎn)合成復(fù)用原則就是指在一個(gè)新的對(duì)象里通過關(guān)聯(lián)關(guān)系(包括組合關(guān)系和聚合關(guān)系)來使用一些已有的對(duì)象,使之成為新對(duì)象的一部分;新對(duì)象通過委派調(diào)用已有對(duì)象的方法達(dá)到復(fù)用其已有功能的目的。簡(jiǎn)言之:要盡量使用組合/聚合關(guān)系,少用繼承。在面向?qū)ο笤O(shè)計(jì)中,可以通過兩種基本方法在不同的環(huán)境中復(fù)用已有的設(shè)計(jì)和實(shí)現(xiàn),即通過組合/聚合關(guān)系或通過繼承。 1、繼承復(fù)用:實(shí)現(xiàn)簡(jiǎn)單,易于擴(kuò)展。破壞系統(tǒng)的封裝性;從基類繼承而來的實(shí)現(xiàn)是靜態(tài)的,不可能在運(yùn)行時(shí)發(fā)生改變,沒有足夠的靈活性;只能在有限的環(huán)境中使用。(“白箱”復(fù)用) 2、組合/聚合復(fù)用:耦合度相對(duì)較低,選擇性地調(diào)用成員對(duì)象的操作;可以在運(yùn)行時(shí)動(dòng)態(tài)進(jìn)行。(“黑箱”復(fù)用)當(dāng)前29頁(yè),總共40頁(yè)。合成復(fù)用原則特點(diǎn)組合/聚合可以使系統(tǒng)更加靈活,類與類之間的耦合度降低,一個(gè)類的變化對(duì)其他類造成的影響相對(duì)較少,因此一般首選使用組合/聚合來實(shí)現(xiàn)復(fù)用;其次才考慮繼承,在使用繼承時(shí),需要嚴(yán)格遵循里氏代換原則,有效使用繼承會(huì)有助于對(duì)問題的理解,降低復(fù)雜度,而濫用繼承反而會(huì)增加系統(tǒng)構(gòu)建和維護(hù)的難度以及系統(tǒng)的復(fù)雜度,因此需要慎重使用繼承復(fù)用。當(dāng)前30頁(yè),總共40頁(yè)。合成復(fù)用原則實(shí)例某教學(xué)管理系統(tǒng)部分?jǐn)?shù)據(jù)庫(kù)訪問類設(shè)計(jì)如圖所示:當(dāng)前31頁(yè),總共40頁(yè)。合成復(fù)用原則實(shí)例需求說明如果需要更換數(shù)據(jù)庫(kù)連接方式,如原來采用JDBC連接數(shù)據(jù)庫(kù),現(xiàn)在采用數(shù)據(jù)庫(kù)連接池連接,則需要修改DBUtil類源代碼。如果StudentDAO采用JDBC連接,但是TeacherDAO采用連接池連接,則需要增加一個(gè)新的DBUtil類,并修改StudentDAO或TeacherDAO的源代碼,使之繼承新的數(shù)據(jù)庫(kù)連接類,這將違背開閉原則,系統(tǒng)擴(kuò)展性較差?,F(xiàn)使用合成復(fù)用原則對(duì)其進(jìn)行重構(gòu)。當(dāng)前32頁(yè),總共40頁(yè)。合成復(fù)用原則實(shí)例當(dāng)前33頁(yè),總共40頁(yè)。迪米特原則迪米特原則定義
迪米特原則(LawofDemeter,LoD)又稱為最少知識(shí)原則(LeastKnowledgePrinciple,LKP),它有多種定義方法,其中幾種典型定義如下:
1、不要和“陌生人”說話。 2、只與你的直接朋友通信。 3、每一個(gè)軟件單位對(duì)其他的單位都只有最少的知識(shí),而且局限于那些與本單位密切相關(guān)的軟件單位。當(dāng)前34頁(yè),總共40頁(yè)。迪米特原則特點(diǎn)簡(jiǎn)單地說,迪米特原則就是指一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少的與其他實(shí)體發(fā)生相互作用。這樣,當(dāng)一個(gè)模塊修改時(shí),就會(huì)盡量少的影響其他的模塊,擴(kuò)展會(huì)相對(duì)容易,這是對(duì)軟件實(shí)體之間通信的限制,它要求限制軟件實(shí)體之間通信的寬度和深度。在迪米特原則中,對(duì)于一個(gè)對(duì)象,其朋友包括以下幾類: 1、當(dāng)前對(duì)象本身(this); 2、以參數(shù)形式傳入到當(dāng)前對(duì)象方法中的對(duì)象; 3、當(dāng)前對(duì)象的成員對(duì)象; 4、如果當(dāng)前對(duì)象的成員對(duì)象是一個(gè)集合,那么集合中的元素也都是朋友; 5、當(dāng)前對(duì)象所創(chuàng)建的對(duì)象。任何一個(gè)對(duì)象,如果滿足上面的條件之一,就是當(dāng)前對(duì)象的“朋友”,否則就是“陌生人”。當(dāng)前35頁(yè),總共40頁(yè)。迪米特原則特點(diǎn)狹義的迪米特原則:可以降低類之間的耦合,但是會(huì)在系統(tǒng)中增加大量的小方法并散落在系統(tǒng)的各個(gè)角落,它可以使一個(gè)系統(tǒng)的局部設(shè)計(jì)簡(jiǎn)化,因?yàn)槊恳粋€(gè)局部都不會(huì)和遠(yuǎn)距離的對(duì)象有直接的關(guān)聯(lián),但是也會(huì)造成系統(tǒng)的不同模塊之間的通信效率降低,使得系統(tǒng)的不同模塊之間不容易協(xié)調(diào)。廣義的迪米特原則:指對(duì)對(duì)象之間的信息流量、流向以及信息的影響的控制,主要是對(duì)信息隱藏的控制。信息的隱藏可以使各個(gè)子系統(tǒng)之間脫耦,從而允許它們獨(dú)立地被開發(fā)、優(yōu)化、使用和修改,同時(shí)可以促進(jìn)軟件的復(fù)用,由于每一個(gè)模塊都不依賴于其他模塊而存在,因此每一個(gè)模塊都可以獨(dú)立地在其他的地方使用。一個(gè)系統(tǒng)的規(guī)模越大,信息的隱藏就越重要,而信息隱藏的重要性也就越明顯。當(dāng)前36頁(yè),總共40頁(yè)。迪米特原則特點(diǎn)迪米特原則的主要用途在于控制信息的過載: 1、在類的劃分上,應(yīng)當(dāng)盡量創(chuàng)建松耦合的類,類之間的耦合度越低,就越有利于復(fù)用,一個(gè)處在松耦合中的類一旦被修改,不會(huì)對(duì)關(guān)聯(lián)的類造成太大波及; 2、在類的結(jié)構(gòu)設(shè)計(jì)上,每一個(gè)類都應(yīng)當(dāng)盡量降低其成員變量和成員函數(shù)的訪問權(quán)限; 3、在類的設(shè)計(jì)上,只要有可能,一個(gè)類型應(yīng)當(dāng)設(shè)計(jì)成不變類; 4、在對(duì)其他類的引用上,一個(gè)對(duì)象對(duì)其他對(duì)象的引用應(yīng)當(dāng)降到最低。當(dāng)前37頁(yè),總共40頁(yè)。迪米特原則實(shí)例某系統(tǒng)界面類(如Form1、Form2等類)與數(shù)據(jù)訪問類(如DAO1、DAO2等類)之間的調(diào)用關(guān)系較為復(fù)雜,如圖所示:當(dāng)前38頁(yè),總共40頁(yè)。迪
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 購(gòu)房合同補(bǔ)充協(xié)議范本
- 財(cái)務(wù)管理系統(tǒng)實(shí)施合同
- 農(nóng)業(yè)訂單合同樣本
- 材料供應(yīng)合同書樣本
- 度室內(nèi)裝飾壁畫合同:手繪墻畫服務(wù)協(xié)議
- 農(nóng)業(yè)灌溉合同轉(zhuǎn)讓協(xié)議
- 農(nóng)業(yè)機(jī)械租賃合同(范本7)
- 期貨市場(chǎng)算法交易策略定制服務(wù)考核試卷
- 家禽飼養(yǎng)業(yè)產(chǎn)品質(zhì)量安全追溯體系構(gòu)建考核試卷
- 工業(yè)控制計(jì)算機(jī)在印刷機(jī)械控制中的實(shí)踐考核試卷
- 贏的思考與態(tài)度課件
- 2024年2月國(guó)考海關(guān)面試題目及參考答案
- TZSA 158-2023 雙引擎分布式視頻處理器技術(shù)規(guī)范
- 2型糖尿病科普講座課件
- 術(shù)中物品清點(diǎn)不清時(shí)應(yīng)急預(yù)案及流程課件
- 第1課《生存的家園》課件
- 選礦廠三級(jí)安全教育課件
- 《座社交恐懼癥》課件
- 豆角綠色防控技術(shù)方案
- 顱腦創(chuàng)傷后顱內(nèi)壓變化規(guī)律分析
- 河北省普通高校??粕究平逃x拔考試英語真題及答案解析
評(píng)論
0/150
提交評(píng)論