![《軟件建模與實(shí)踐》課件-3-面向?qū)ο蟮脑O(shè)計(jì)原則_第1頁(yè)](http://file4.renrendoc.com/view14/M07/2C/27/wKhkGWetR1CANdb3AABnEFCiQQg397.jpg)
![《軟件建模與實(shí)踐》課件-3-面向?qū)ο蟮脑O(shè)計(jì)原則_第2頁(yè)](http://file4.renrendoc.com/view14/M07/2C/27/wKhkGWetR1CANdb3AABnEFCiQQg3972.jpg)
![《軟件建模與實(shí)踐》課件-3-面向?qū)ο蟮脑O(shè)計(jì)原則_第3頁(yè)](http://file4.renrendoc.com/view14/M07/2C/27/wKhkGWetR1CANdb3AABnEFCiQQg3973.jpg)
![《軟件建模與實(shí)踐》課件-3-面向?qū)ο蟮脑O(shè)計(jì)原則_第4頁(yè)](http://file4.renrendoc.com/view14/M07/2C/27/wKhkGWetR1CANdb3AABnEFCiQQg3974.jpg)
![《軟件建模與實(shí)踐》課件-3-面向?qū)ο蟮脑O(shè)計(jì)原則_第5頁(yè)](http://file4.renrendoc.com/view14/M07/2C/27/wKhkGWetR1CANdb3AABnEFCiQQg3975.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程內(nèi)容軟件的可維護(hù)性和可復(fù)用性面向?qū)ο蟮脑O(shè)計(jì)原則課程目的了解軟件的可維護(hù)性和可復(fù)用性掌握面向?qū)ο笤O(shè)計(jì)原則的應(yīng)用重難點(diǎn)面向?qū)ο蟮脑O(shè)計(jì)原則3.1軟件的可維護(hù)性和可復(fù)用性面向?qū)ο蟪绦蛟O(shè)計(jì)的核心思想是對(duì)于變化或不確定的部分,通過(guò)構(gòu)造抽象來(lái)隔離變化,達(dá)到解耦合的效果。為了達(dá)到更好的解耦合效果,需要在一定的設(shè)計(jì)原則指導(dǎo)下進(jìn)行。在開(kāi)發(fā)軟件時(shí),除了在軟件結(jié)構(gòu)上要做到高聚合、低耦合,還需要注意軟件的可復(fù)用性和可維護(hù)性。軟件的復(fù)用性能夠幫助開(kāi)發(fā)者在開(kāi)發(fā)新軟件時(shí)借鑒原有開(kāi)發(fā)軟件框架,節(jié)省開(kāi)發(fā)時(shí)間。軟件產(chǎn)品在使用過(guò)程中,用戶可能會(huì)提出很多修改意見(jiàn)和擴(kuò)展需求,開(kāi)發(fā)者需要在軟件設(shè)計(jì)時(shí)就適應(yīng)這種變化,否則后期可能會(huì)花費(fèi)大量成本去完成軟件的后期維護(hù),因此軟件的可維護(hù)性也尤為重要。3.1.1軟件的可維護(hù)性知名軟件大師RobertC.Martin認(rèn)為一個(gè)可維護(hù)性(Maintainability)較低的軟件設(shè)計(jì),通常是以下4個(gè)原因造成的。(1)過(guò)于僵硬(Rigidity):很難在一個(gè)軟件系統(tǒng)中添加新的功能,因?yàn)樾鹿δ艿募尤霑?huì)涉及多個(gè)模塊的修改。(2)過(guò)于脆弱(Fragility):與軟件過(guò)于僵硬同時(shí)存在的,是軟件系統(tǒng)在修改已有代碼時(shí)的過(guò)于脆弱。即對(duì)一個(gè)地方的修改,往往會(huì)導(dǎo)致表面看似沒(méi)有什么關(guān)聯(lián)的另一個(gè)地方發(fā)生故障。(3)復(fù)用率低(Immobility):當(dāng)一段代碼、函數(shù)、模塊實(shí)現(xiàn)的功能可以在新的模塊或新的系統(tǒng)中使用時(shí),程序員往往會(huì)發(fā)現(xiàn)這些已有的代碼依賴于諸多的其他東西,以至于很難將其分開(kāi)利用。導(dǎo)致程序員可能選擇不去復(fù)用這些代碼,也可能以最原始的復(fù)制方式去復(fù)用。(4)黏度(Viscosity)過(guò)高:一個(gè)系統(tǒng)設(shè)計(jì),破壞原始設(shè)計(jì)意圖和設(shè)計(jì)框架比遵守容易,就稱為黏度過(guò)高。3.1.1系統(tǒng)的可維護(hù)性軟件可維護(hù)性的決定因素主要有以下5項(xiàng):(1)可理解性。軟件可理解性表現(xiàn)為理解軟件的結(jié)構(gòu)、功能、接口和內(nèi)部處理過(guò)程的難易程度,以及模塊化(模塊結(jié)構(gòu)良好,高內(nèi)聚、松耦合)、詳細(xì)的設(shè)計(jì)文檔、結(jié)構(gòu)化設(shè)計(jì)、程序內(nèi)部的文檔和良好的高級(jí)程序設(shè)計(jì)語(yǔ)言等,都對(duì)提高軟件的可理解性有重要幫助。(2)可測(cè)試性。診斷和測(cè)試的難易程度取決于軟件可理解性的程度。(3)可修改性。軟件容易修改的程度和設(shè)計(jì)原理直接相關(guān)。(4)可移植性。軟件可移植性指把程序從一種計(jì)算環(huán)境(硬件配置和操作系統(tǒng))轉(zhuǎn)移到另一種計(jì)算環(huán)境的難易程度。(5)可復(fù)用性。所謂復(fù)用(Reuse)也就是重用,指同一事物不作修改或稍加改動(dòng)就在不同環(huán)境中多次重復(fù)使用。3.1.2軟件的可復(fù)用性可復(fù)用性一直是軟件工程的目標(biāo)之一,軟件工程界希望系統(tǒng)開(kāi)發(fā)能和其他工業(yè)領(lǐng)域一樣,能夠利用標(biāo)準(zhǔn)化的軟件模塊快速構(gòu)建特定的應(yīng)用系統(tǒng)。軟件開(kāi)發(fā)的全生命周期都有可重用的價(jià)值,包括項(xiàng)目的組織、軟件需求、設(shè)計(jì)、文檔、實(shí)現(xiàn)、測(cè)試方法等都是可以被重復(fù)利用或借鑒的有效資源。軟件的可復(fù)用性簡(jiǎn)化了開(kāi)發(fā)時(shí)的程序代碼,提高了軟件開(kāi)發(fā)的效率,是軟件產(chǎn)業(yè)興旺發(fā)展,提高軟件生產(chǎn)率的重要手段。3.1.2系統(tǒng)的可復(fù)用性軟件工程和建模大師PeterCoad認(rèn)為,一個(gè)好的系統(tǒng)設(shè)計(jì)應(yīng)該具備如下三個(gè)性質(zhì):可擴(kuò)展性(Extensibility)、靈活性(Flexibility)、可插入性(Pluggability)。(1)可擴(kuò)展性:新的性能容易被加入到系統(tǒng)中,即可擴(kuò)展性,屬于過(guò)于僵硬的反面。(2)靈活性:允許代碼修改比較平穩(wěn)地發(fā)生,而不會(huì)波及很多其他的模塊,即靈活性,屬于過(guò)于脆弱的反面。(3)可插入性:可以容易地將一個(gè)類抽出去,同時(shí)將另一個(gè)有同樣接口的類加入進(jìn)來(lái),即可插入性,屬于黏度過(guò)高的反面。3.1.2系統(tǒng)的可復(fù)用性軟件的復(fù)用或重用擁有眾多優(yōu)點(diǎn),如可以提高軟件的開(kāi)發(fā)效率,提高軟件質(zhì)量,節(jié)約開(kāi)發(fā)成本,恰當(dāng)?shù)膹?fù)用還可以改善系統(tǒng)的可維護(hù)性。面向?qū)ο笤O(shè)計(jì)復(fù)用的目標(biāo)在于實(shí)現(xiàn)支持可維護(hù)性的復(fù)用。3.2面向?qū)ο笤O(shè)計(jì)原則面向?qū)ο蟪绦蛟O(shè)計(jì)常用的7個(gè)設(shè)計(jì)原則包括:?jiǎn)我宦氊?zé)原則、開(kāi)閉原則、里氏替換原則、依賴倒置原則、接口隔離原則、合成復(fù)用原則和迪米特法則。3.2.1單一職責(zé)原則單一職責(zé)原則(SingleResponsibilityPrinciple,SRP)是面向?qū)ο蟪绦蛟O(shè)計(jì)最常用的原則之一,其定義是應(yīng)該有且僅有一個(gè)類引起類的變更,也就是一個(gè)類只擔(dān)負(fù)一個(gè)職責(zé)。3.2.1單一職責(zé)原則單一職責(zé)原則實(shí)例:某基于C/S架構(gòu)軟件系統(tǒng)的“登錄功能”由Login類實(shí)現(xiàn),如圖3-1所示。Login類的成員函數(shù)說(shuō)明如表3-1所示。圖3-1登錄類Login類的成員函數(shù)名成員函數(shù)說(shuō)明init用戶信息初始化display用戶信息顯示validate驗(yàn)證登錄狀態(tài)(成功/失敗)getConnection連接數(shù)據(jù)庫(kù)findUser根據(jù)用戶名和密碼獲取用戶信息main用戶函數(shù),控制系統(tǒng)“登錄功能”的操作流程表3-1
Login類的成員函數(shù)說(shuō)明3.2.1單一職責(zé)原則現(xiàn)使用單一職責(zé)原則對(duì)其進(jìn)行重構(gòu),如圖3-2所示。圖3-2
重構(gòu)后的登錄類3.2.2開(kāi)閉原則開(kāi)閉原則(OpenClosedPrinciple,OCP)由BertrandMeyer于1988年提出,是面向?qū)ο笤O(shè)計(jì)中最重要的原則之一。開(kāi)閉原則的定義是:一個(gè)軟件實(shí)體如類、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。也就是說(shuō),一個(gè)軟件實(shí)體應(yīng)該通過(guò)擴(kuò)展來(lái)實(shí)現(xiàn)變化,而不是通過(guò)修改已有的代碼實(shí)現(xiàn)變化。這是為軟件實(shí)體的未來(lái)事件而制定的對(duì)現(xiàn)行開(kāi)發(fā)設(shè)計(jì)進(jìn)行約束的一個(gè)原則。3.2.2開(kāi)閉原則開(kāi)閉原則實(shí)例:某圖形界面系統(tǒng)提供了各種不同形狀的按鈕,客戶端代碼可針對(duì)這些按鈕進(jìn)行編程,用戶可能會(huì)改變需求使用不同的按鈕,原始設(shè)計(jì)方案如圖3-3所示。圖3-3
原始按鈕設(shè)計(jì)方案3.2.2開(kāi)閉原則現(xiàn)對(duì)該系統(tǒng)進(jìn)行重構(gòu),如圖3-4所示,使之滿足開(kāi)閉原則的要求。圖3-4
重構(gòu)后的按鈕設(shè)計(jì)方案3.2.3里氏替換原則里氏替換原則(LiskovSubstitutionPrinciple,LSP)由BarbaraLiskov和JeannetteWing于1994年提出,其定義是:所有引用基類(父類)的地方必須能透明地使用其子類的對(duì)象。通俗點(diǎn)說(shuō),只要父類能出現(xiàn)的地方子類就可以出現(xiàn),而且替換為子類也不會(huì)產(chǎn)生任何異常;反之不可,因?yàn)樽宇惪梢詳U(kuò)展父類沒(méi)有的功能,同時(shí)子類還不能改變父類原有的功能。3.2.3里氏替換原則在使用里氏替換原則時(shí)需要注意如下問(wèn)題:(1)根據(jù)里氏替換原則,為了保證系統(tǒng)的擴(kuò)展性,子類的所有方法必須在父類中聲明,或子類必須實(shí)現(xiàn)父類中聲明的所有方法。如果一個(gè)方法只存在于子類中,在父類中不提供相應(yīng)的聲明,則無(wú)法在以父類定義的對(duì)象中使用該方法。(2)在運(yùn)用里氏替換原則時(shí),盡量把父類設(shè)計(jì)為抽象類或者接口,讓子類繼承父類或?qū)崿F(xiàn)父接口,并實(shí)現(xiàn)在父類中聲明的方法。運(yùn)行時(shí),子類實(shí)例替換父類實(shí)例,從而可以很方便地?cái)U(kuò)展系統(tǒng)的功能,同時(shí)無(wú)需修改原有子類的代碼。增加新的功能可以通過(guò)增加一個(gè)新的子類來(lái)實(shí)現(xiàn)。里氏替換原則是開(kāi)閉原則的具體實(shí)現(xiàn)手段之一。3.2.3里氏替換原則里氏替換原則實(shí)例:某系統(tǒng)需要實(shí)現(xiàn)對(duì)重要數(shù)據(jù)(如用戶密碼)進(jìn)行加密處理,在數(shù)據(jù)操作類(DataOperator)中需要調(diào)用加密類中定義的加密算法。系統(tǒng)提供了兩個(gè)不同的加密類:CipherA和CipherB,它們實(shí)現(xiàn)不同的加密方法,在DataOperator中可以選擇其中的一個(gè)實(shí)現(xiàn)加密操作,如圖3-5所示。圖3-5
某系統(tǒng)的數(shù)據(jù)加密設(shè)計(jì)方案3.2.3里氏替換原則為了讓系統(tǒng)具有更好的擴(kuò)展性,同時(shí)減少代碼重復(fù),使用里氏替換原則對(duì)其進(jìn)行重構(gòu),使其符合開(kāi)閉原則,重構(gòu)結(jié)果如圖3-6所示。圖3-6
重構(gòu)后的數(shù)據(jù)加密方案3.2.4依賴倒置原則依賴倒置原則(DependenceInversionPrinciple,DIP)由RobertC.Martin于1996年提出,其定義是:高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴抽象;抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象,其中,不可分割的原子邏輯就是底層模塊,原子邏輯的再組裝就是高層模塊。另一種表述為:要針對(duì)接口編程,不要針對(duì)實(shí)現(xiàn)編程。3.2.4依賴倒置原則依賴倒置原則實(shí)例:某系統(tǒng)提供一個(gè)數(shù)據(jù)轉(zhuǎn)換模塊,可以將來(lái)自不同數(shù)據(jù)源的數(shù)據(jù)轉(zhuǎn)換成多種格式,如可以轉(zhuǎn)換來(lái)自數(shù)據(jù)庫(kù)的數(shù)據(jù)(DatabaseSource),也可以轉(zhuǎn)換來(lái)自文本文件的數(shù)據(jù)(TextSource),轉(zhuǎn)換后的格式可以是XML文件(XMLTransformer),也可以是XLS文件(XLSTransformer)等,如圖3-7所示。圖3-7
某系統(tǒng)數(shù)據(jù)轉(zhuǎn)換模塊設(shè)計(jì)方案3.2.4依賴倒置原則現(xiàn)使用依賴倒置原則對(duì)其進(jìn)行重構(gòu),以滿足開(kāi)閉原則。重構(gòu)之后的設(shè)計(jì)方案如圖3-8所示。圖3-8
重構(gòu)某系統(tǒng)數(shù)據(jù)轉(zhuǎn)換模塊設(shè)計(jì)方案3.2.5接口隔離原則接口隔離原則(InterfaceSegregationPrinciple,ISP)的定義是:客戶端不應(yīng)該依賴它不需要的接口??蛻舳税巡恍枰慕涌谔蕹簦@就需要對(duì)接口進(jìn)行細(xì)化,保證接口的單一性。也就是說(shuō),類間的依賴關(guān)系應(yīng)該建立在最小的接口上,也就是建立單一的接口。3.2.5接口隔離原則接口隔離原則實(shí)例:圖3-9展示了一個(gè)擁有多個(gè)客戶類的系統(tǒng),在系統(tǒng)中定義了一個(gè)巨大的接口(胖接口)AbstractService來(lái)服務(wù)所有的客戶類。圖3-9
多個(gè)客戶類系統(tǒng)3.2.5接口隔離原則通過(guò)使用接口隔離原則,本實(shí)例重構(gòu)后的結(jié)構(gòu)如圖3-10所示。圖3-10
重構(gòu)后的多個(gè)客戶類系統(tǒng)3.2.6合成復(fù)用原則合成復(fù)用原則(CompositeReusePrinciple,CRP)又稱為組合/聚合復(fù)用原則(Composition/AggregateReusePrinciple,CARP),其定義是盡量使用對(duì)象組合,而不是繼承來(lái)達(dá)到復(fù)用的目的。在面向?qū)ο笤O(shè)計(jì)中,可以通過(guò)兩種方法在不同的環(huán)境中復(fù)用已有的設(shè)計(jì)和實(shí)現(xiàn),即繼承復(fù)用和組合/聚合復(fù)用。3.2.6合成復(fù)用原則合成復(fù)用原則實(shí)例:某教學(xué)管理系統(tǒng)部分?jǐn)?shù)據(jù)庫(kù)訪問(wèn)類設(shè)計(jì)如圖3-11所示。圖3-11
教學(xué)管理系統(tǒng)部分?jǐn)?shù)據(jù)庫(kù)訪問(wèn)類3.2.6合成復(fù)用原則現(xiàn)使用合成復(fù)用原則對(duì)其進(jìn)行重構(gòu),使用關(guān)聯(lián)復(fù)用來(lái)取代繼承復(fù)用,重構(gòu)后的類結(jié)構(gòu)如圖3-12所示。圖3-12
重構(gòu)后的教學(xué)管理系統(tǒng)部分?jǐn)?shù)據(jù)庫(kù)訪問(wèn)類3.2.6合成復(fù)用原則采用合成復(fù)用原則時(shí),可將已有的對(duì)象納入新對(duì)象中,使其成為新對(duì)象的一部分,新對(duì)象可以調(diào)用已有對(duì)象的功能,具體有下述優(yōu)點(diǎn):(1)維持類的封裝性。因?yàn)橐延袑?duì)象的內(nèi)部細(xì)節(jié)是新對(duì)象看不見(jiàn)的,所以這種復(fù)用又稱為“黑箱”復(fù)用。(2)新舊類的耦合度低。復(fù)用所需要的依賴較少,新對(duì)象存取已有對(duì)象的唯一方法是通過(guò)已有對(duì)象的接口。(3)復(fù)用的靈活性高。復(fù)用可以在運(yùn)行時(shí)動(dòng)態(tài)進(jìn)行,新對(duì)象可以動(dòng)態(tài)引用與已有對(duì)象類型相同的對(duì)象。3.2.7迪米特法則迪米特法則(LawofDemeter,LoD)也被稱為最少知識(shí)原則,它的定義是:一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解。也就是說(shuō),一個(gè)類應(yīng)該對(duì)自己需要耦合或調(diào)用的類知道得最少,類與類之間的關(guān)系越密切,耦合度越大,那么類的變化對(duì)其耦合的類的影響也會(huì)越大,這也是我們面向?qū)ο笤O(shè)計(jì)的核心原則:低耦合,高內(nèi)聚。3.2.7迪米特法則迪米特法則實(shí)例:某系統(tǒng)界面類(如Form1、Form2等類)與數(shù)據(jù)訪問(wèn)類(如DAO1、DAO2等類)之間的調(diào)用關(guān)系較為復(fù)雜,如圖3-13所示。圖3-13
系統(tǒng)界面類與數(shù)據(jù)訪問(wèn)類3.2.7迪米特法則現(xiàn)使用迪米特法則對(duì)其進(jìn)行重構(gòu),重構(gòu)后如圖3-14所示。圖3-14
重構(gòu)后的系統(tǒng)界面類與數(shù)據(jù)訪問(wèn)類3.2.7迪米特法則迪米特法則就是一個(gè)類對(duì)自己依賴的類知道得越少越好。也就是說(shuō),對(duì)于被依賴的類來(lái)說(shuō),無(wú)論邏輯多么復(fù)雜,都盡量地將邏輯封裝在類的內(nèi)部,對(duì)外除了提供的public方法,不泄漏任何信息。本章小結(jié)面向?qū)ο蟛粌H是一項(xiàng)技術(shù),它還是一種方法論或者說(shuō)是一種世界觀。面向?qū)ο蠓椒ㄒ呀?jīng)發(fā)展成為一種完整的方法論和系統(tǒng)化的思想體系——面向?qū)ο蠓椒▽W(xué)。面向?qū)ο蟛粌H適用于軟件設(shè)計(jì)開(kāi)發(fā),也適用于解決硬件
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 全方位保安服務(wù)合同模板2025年
- 2025年體育中心使用租賃合同書(shū)
- 2025年合伙發(fā)展戰(zhàn)略投資合同
- 2025年協(xié)議離婚權(quán)益策劃保障
- 2025年重癥監(jiān)護(hù)臨床信息系統(tǒng)項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模稿
- 2025年個(gè)人融資合同策劃(含利息標(biāo)準(zhǔn))
- 2025年產(chǎn)品質(zhì)保跟蹤服務(wù)協(xié)議范本
- 2025年小型機(jī)床項(xiàng)目提案報(bào)告模范
- 2025年專利權(quán)使用許可合同示范文本
- 2025年機(jī)動(dòng)車購(gòu)買合同簡(jiǎn)化版
- 河砂、碎石生產(chǎn)質(zhì)量保證措施方案
- 全國(guó)教育科學(xué)規(guī)劃課題申報(bào)書(shū):02.《鑄牢中華民族共同體意識(shí)的學(xué)校教育研究》
- 三位數(shù)除以兩位數(shù)過(guò)關(guān)練習(xí)口算題大全附答案
- 什么叫績(jī)效考勤管理制度
- 紅樓夢(mèng)服飾文化
- 外墻噴漆施工合同協(xié)議書(shū)
- 軟件系統(tǒng)平臺(tái)項(xiàng)目實(shí)施方案
- 陜西延長(zhǎng)石油集團(tuán)礦業(yè)公司招聘筆試題庫(kù)2024
- 湖北省2024年村干部定向考試真題
- 2024年沙石材料運(yùn)輸合同
- 遼寧省大連市莊河市2023-2024學(xué)年七年級(jí)下學(xué)期期末數(shù)學(xué)試題
評(píng)論
0/150
提交評(píng)論