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