面向對象的設計原則_第1頁
面向對象的設計原則_第2頁
面向對象的設計原則_第3頁
面向對象的設計原則_第4頁
面向對象的設計原則_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、軟件工程導論陳丹琪災害信息工程系復 習n面向對象設計原則:面向對象設計原則:單一職責原則:一個類應該僅有一個職責。單一職責原則:一個類應該僅有一個職責。n此原則基本途徑就是提高內(nèi)聚性,如果一個類承擔此原則基本途徑就是提高內(nèi)聚性,如果一個類承擔的職責過多,那么這些職責就相互依賴,一個職責的職責過多,那么這些職責就相互依賴,一個職責的變化可能會影響另一個職責的履行。的變化可能會影響另一個職責的履行。n其實其實OOD的實質,就是合理的進行類的職責分配。的實質,就是合理的進行類的職責分配。 開放開放-封閉原則封閉原則:n對于擴展是開放的,對于修改是封閉的;對于擴展是開放的,對于修改是封閉的;nOCP原

2、則的關鍵是原則的關鍵是“抽象抽象”;n多態(tài)保證了擴展的開放性;多態(tài)保證了擴展的開放性;n開放意味著實現(xiàn)是可替換的。開放意味著實現(xiàn)是可替換的。復 習依賴倒置原則:依賴倒置原則:n面向接口編程;面向接口編程;n抽象不應該依賴于細節(jié),細節(jié)應該依賴于抽象;抽象不應該依賴于細節(jié),細節(jié)應該依賴于抽象;n高層模塊和低層模塊以及客戶的模塊和服務模塊都高層模塊和低層模塊以及客戶的模塊和服務模塊都應依賴于接口,而不是具體實現(xiàn);應依賴于接口,而不是具體實現(xiàn);n依賴倒置原則的核心是依賴倒置原則的核心是“抽象抽象”和和“間接間接”,抽象,抽象的穩(wěn)定性決定了系統(tǒng)的穩(wěn)定性。的穩(wěn)定性決定了系統(tǒng)的穩(wěn)定性。 本節(jié)課內(nèi)容n面向對象

3、的設計原則面向對象的設計原則接口隔離原則(接口隔離原則(Interface Segregation Principle)n包的設計原則包的設計原則包包用來包容一組類的容器。用來包容一組類的容器。通過把類組織成包,可以在更高層次的抽象上來理通過把類組織成包,可以在更高層次的抽象上來理解設計。解設計。n重用發(fā)布等價原則重用發(fā)布等價原則n共同重用原則共同重用原則n共同封閉原則共同封閉原則n無環(huán)依賴原則無環(huán)依賴原則n穩(wěn)定依賴原則穩(wěn)定依賴原則n穩(wěn)定抽象原則穩(wěn)定抽象原則包的內(nèi)聚性原則包的內(nèi)聚性原則包的耦合性原則包的耦合性原則接口隔離原則n接口隔離原則(接口隔離原則(ISP)從一個客戶類的角度來講,一個類對

4、另外一個類的從一個客戶類的角度來講,一個類對另外一個類的依賴性應當是建立在最小的接口上的。依賴性應當是建立在最小的接口上的。n不能強迫用戶去依賴那些他們不使用的接口。不能強迫用戶去依賴那些他們不使用的接口。使用多個專門的接口比使用單一的總接口要好。使用多個專門的接口比使用單一的總接口要好。接口隔離原則接口的設計原則:接口的設計原則:n接口的設計應該遵循最小接口原則,不要把用戶不使接口的設計應該遵循最小接口原則,不要把用戶不使用的方法塞進同一個接口里。用的方法塞進同一個接口里。接口的依賴(繼承)原則:接口的依賴(繼承)原則:n如果一個接口如果一個接口a依賴(繼承)另一個接口依賴(繼承)另一個接口

5、b,則接口,則接口a相當于繼承了接口相當于繼承了接口b的方法,那么繼承了接口的方法,那么繼承了接口b后的接后的接口口a也應該遵循上述原則:不應該包含用戶不使用的也應該遵循上述原則:不應該包含用戶不使用的方法。方法。n反之,則說明接口反之,則說明接口a被被b給污染了,應重新設計它們的給污染了,應重新設計它們的關系。關系。接口隔離原則例例1. 看下面的設計是否合適,如果不合適,說明原看下面的設計是否合適,如果不合適,說明原因并修正設計。因并修正設計。n自動取款機自動取款機(ATM)有存款有存款(DepositTransaction)、取款、取款(WithdrawalTransaction)、轉帳、

6、轉帳(TransferTransaction)這些操作,這些操作都需要用到用戶界面類這些操作,這些操作都需要用到用戶界面類UI。其中。其中存款要求用戶輸入希望存儲的金額,存款要求用戶輸入希望存儲的金額, DepositTransaction類要調用類要調用UI類中的類中的RequestDepositAmount方法;取款要求用戶輸入取款方法;取款要求用戶輸入取款的金額,的金額,WithdrawalTransaction類要調用類要調用RequestWithdrawalAmount方法,當余額不足時,調方法,當余額不足時,調用用InformInsufficientFunds方法通知用戶余額不足。

7、方法通知用戶余額不足。轉帳要求用戶輸入轉帳的金額,轉帳要求用戶輸入轉帳的金額, TransferTransaction類要調用類要調用UI類中的類中的RequestTransferAmount方法。方法。 interfaceIWorkablepublicvoidwork();interfaceIFeedablepublicvoideat();classWorkerimplementsIWorkable,IFeedablepublicvoidwork()/.workingpublicvoideat()/.eatinginlaunchbreakclassSuperWorkerimplementsI

8、Workable,IFeedablepublicvoidwork()/.workingmuchmorepublicvoideat()/.eatinginlaunchbreakclassRobotimplementsIWorkablepublicvoidwork()/.workingclassManagerIWorkableworker;publicvoidsetWorker(IWorkablew)worker=w;publicvoidmanage()worker.work();interfaceIWorkerpublicvoidwork();publicvoideat();classWorke

9、rimplementsIWorkerpublicvoidwork()/.workingpublicvoideat()/.eatinginlaunchbreakclassSuperWorkerimplementsIWorkerpublicvoidwork()/.workingmuchmorepublicvoideat()/.eatinginlaunchbreakclassManagerIWorkerworker;publicvoidsetWorker(IWorkerw)worker=w;publicvoidmanage()worker.work();不合適,在該設計不合適,在該設計中接口中接口U

10、I是一個胖是一個胖接口。每種操作接口。每種操作(存款、取款、轉(存款、取款、轉帳)所使用的帳)所使用的UI中中的方法,其他的操的方法,其他的操作類都不會使用。作類都不會使用。這樣,對任何一種操這樣,對任何一種操作的改動,都會涉及作的改動,都會涉及到對到對UI(用戶界面)(用戶界面)的改動,從而影響到的改動,從而影響到所有對所有對UI依賴的類。依賴的類。這樣的設計就有了僵這樣的設計就有了僵化性、脆弱性?;?、脆弱性。接口隔離原則n接口隔離原則是用來處理接口隔離原則是用來處理“胖接口胖接口”的。的。胖類會導致它們的客戶程序之間產(chǎn)生不好的耦合關胖類會導致它們的客戶程序之間產(chǎn)生不好的耦合關系。系。通過

11、把胖類的接口分解為多個特定于客戶程序的接通過把胖類的接口分解為多個特定于客戶程序的接口,然后胖類繼承這些接口,實現(xiàn)它們。這樣可以口,然后胖類繼承這些接口,實現(xiàn)它們。這樣可以解除這種耦合關系。解除這種耦合關系。包的設計原則n通過包來管理軟件的開發(fā)和發(fā)布。通過包來管理軟件的開發(fā)和發(fā)布。需要根據(jù)一些原則對應用程序的類進行劃分,然后需要根據(jù)一些原則對應用程序的類進行劃分,然后把這些劃分的類分配到包中。把這些劃分的類分配到包中。在向包中分配類時應該依據(jù)什么原則?在向包中分配類時應該依據(jù)什么原則?n包之間也會產(chǎn)生依賴關系。包之間也會產(chǎn)生依賴關系。類經(jīng)常會和其他類之間存在依賴關系,這些依賴關類經(jīng)常會和其他類

12、之間存在依賴關系,這些依賴關系經(jīng)常會跨越包的邊界。系經(jīng)常會跨越包的邊界。包之間的依賴關系展現(xiàn)了應用程序的高層組織結構,包之間的依賴關系展現(xiàn)了應用程序的高層組織結構,我們應該對這些關系進行管理。我們應該對這些關系進行管理。應該使用什么設計原則來管理包之間的關系?應該使用什么設計原則來管理包之間的關系?包的設計應該先于類(自頂向下),還是類的設計包的設計應該先于類(自頂向下),還是類的設計應該先于包(自底向上)?應該先于包(自底向上)?包的設計原則n如何把類劃分到包中如何把類劃分到包中包的內(nèi)聚性包的內(nèi)聚性當已經(jīng)存在一些類,并且它們之間的相互關系已經(jīng)當已經(jīng)存在一些類,并且它們之間的相互關系已經(jīng)確定,

13、根據(jù)確定,根據(jù)“自底向上自底向上”的觀點對類進行劃分時,的觀點對類進行劃分時,對類組包應遵循的原則:對類組包應遵循的原則:n重用發(fā)布等價原則重用發(fā)布等價原則( REP, Release Reuse Equivalency Principle )n共同重用原則共同重用原則(CRP, Common Reuse Principle)n共同封閉原則共同封閉原則( CCP, Common Closure Principle )重用發(fā)布等價原則n重用發(fā)布等價原則:解決如何確定包重用發(fā)布等價原則:解決如何確定包重用重用的粒度的粒度如果一個包是可以用來重用的,那么該包的重用粒如果一個包是可以用來重用的,那么該

14、包的重用粒度可以和發(fā)布粒度一樣大。即,以包重用的粒度作度可以和發(fā)布粒度一樣大。即,以包重用的粒度作為包發(fā)布的粒度。為包發(fā)布的粒度。n一個包中的類要么都是可重用的,要么都不是可重用一個包中的類要么都是可重用的,要么都不是可重用的。的。n一個包中的所有類對于同一類用戶來說都是可重用的。一個包中的所有類對于同一類用戶來說都是可重用的。共同重用原則n共同重用原則:保證包的內(nèi)部具有很高的聚合性共同重用原則:保證包的內(nèi)部具有很高的聚合性包的所有類被一起重用。如果你重用了其中的一個包的所有類被一起重用。如果你重用了其中的一個類,就重用全部。類,就重用全部。n對一個包的依賴就是對包里所有東西的依賴。當一個對一

15、個包的依賴就是對包里所有東西的依賴。當一個包改變時,這個包的所有使用者都必須驗證是否還能包改變時,這個包的所有使用者都必須驗證是否還能正常運行,即使它們所用到的沒有任何改變也不行。正常運行,即使它們所用到的沒有任何改變也不行。n也就是:沒有被一起重用的類不應該被組合在一起。也就是:沒有被一起重用的類不應該被組合在一起。相互之間沒有緊密關聯(lián)的類不應該放在同一包里。相互之間沒有緊密關聯(lián)的類不應該放在同一包里。共同封閉原則n共同封閉原則:解決哪些類應該放在同一個包里共同封閉原則:解決哪些類應該放在同一個包里包中的所有類對于同一類性質的變化應該是共同封包中的所有類對于同一類性質的變化應該是共同封閉的。

16、閉的。n一個變化若對一個包產(chǎn)生影響,則將對包中的所有類一個變化若對一個包產(chǎn)生影響,則將對包中的所有類產(chǎn)生影響,而對于其他的包不造成影響。產(chǎn)生影響,而對于其他的包不造成影響。n這是單一職責原則應用于包的規(guī)定。這是單一職責原則應用于包的規(guī)定。n單一職責原則規(guī)定了一個類不應該包含多個引起變化單一職責原則規(guī)定了一個類不應該包含多個引起變化的原因,共同封閉原則則規(guī)定了一個包不應該包含多的原因,共同封閉原則則規(guī)定了一個包不應該包含多個引起變化的原因。個引起變化的原因。注意:共同封閉原則中講的注意:共同封閉原則中講的“封閉封閉”也是針對常見也是針對常見的變化做出的封閉。的變化做出的封閉。包的設計原則n如何處

17、理包之間的相互關系如何處理包之間的相互關系包的耦合性包的耦合性包的耦合性原則包含包的耦合性原則包含3個:個:n無環(huán)依賴原則無環(huán)依賴原則 ( ADP, Acyclic Dependencies Principle )n穩(wěn)定依賴原則穩(wěn)定依賴原則 ( SDP, Stable Dependencies Principle )n穩(wěn)定抽象原則穩(wěn)定抽象原則 ( SAP, Stable Abstractions Principle )包的依賴:如果一個包包的依賴:如果一個包A 中的類引用了包中的類引用了包B中的類,中的類,我們稱包我們稱包A依賴包依賴包B。 無環(huán)依賴原則n無環(huán)依賴原則無環(huán)依賴原則在依賴結構中不

18、允許出現(xiàn)環(huán)(循在依賴結構中不允許出現(xiàn)環(huán)(循環(huán)依賴)。環(huán)依賴)。 無環(huán)依賴原則n解除依賴環(huán)有兩個主要的方法:解除依賴環(huán)有兩個主要的方法:方法一:建立一個新包。方法一:建立一個新包。方法二:使用依賴倒置原則。方法二:使用依賴倒置原則。n認為包結構圖是描述系統(tǒng)功能的,這是錯誤的。認為包結構圖是描述系統(tǒng)功能的,這是錯誤的。包的依賴關系結構圖和描述應用程序功能之間幾乎包的依賴關系結構圖和描述應用程序功能之間幾乎沒有關系!它是應用程序構建時的映射圖。沒有關系!它是應用程序構建時的映射圖。n在項目開始時,沒有軟件可構建,因此也無需構建映在項目開始時,沒有軟件可構建,因此也無需構建映射圖。隨著開發(fā)的進行,類越

19、來越多,需要對依賴關射圖。隨著開發(fā)的進行,類越來越多,需要對依賴關系進行管理。系進行管理。在進行面向對象的系統(tǒng)設計時,我們應先設計出系在進行面向對象的系統(tǒng)設計時,我們應先設計出系統(tǒng)中的類,然后再設計包。統(tǒng)中的類,然后再設計包。 穩(wěn)定依賴原則n穩(wěn)定依賴原則穩(wěn)定依賴原則朝著穩(wěn)定的方向進行依賴。朝著穩(wěn)定的方向進行依賴。通過遵循穩(wěn)定依賴原則,確保那些易于更改的模塊通過遵循穩(wěn)定依賴原則,確保那些易于更改的模塊不會被那些比它們難以更改的模塊所依賴。不會被那些比它們難以更改的模塊所依賴。讓不穩(wěn)定的模塊依賴穩(wěn)定的模塊。讓不穩(wěn)定的模塊依賴穩(wěn)定的模塊。什么是穩(wěn)定性:什么是穩(wěn)定性:n一個包如果被許多其它包依賴,那么

20、該包是很穩(wěn)定的,一個包如果被許多其它包依賴,那么該包是很穩(wěn)定的,因為這個包的任何一個改動都可能需要改動很多其它因為這個包的任何一個改動都可能需要改動很多其它的包。的包。穩(wěn)定依賴原則穩(wěn)定性度量:計算進出該包的依賴關系的數(shù)目,使穩(wěn)定性度量:計算進出該包的依賴關系的數(shù)目,使用這些數(shù)值來計算該包的穩(wěn)定性。用這些數(shù)值來計算該包的穩(wěn)定性。nCa輸入耦合度:指處于該包的外部并且依賴于該輸入耦合度:指處于該包的外部并且依賴于該包內(nèi)的類的類的數(shù)目。包內(nèi)的類的類的數(shù)目。nCe 輸出耦合度:指處于該包的內(nèi)部并且依賴于該輸出耦合度:指處于該包的內(nèi)部并且依賴于該包外的類的類的數(shù)目包外的類的類的數(shù)目nI不穩(wěn)定性:不穩(wěn)定性

21、: I = Ce / (Ca+ Ce)如果沒有輸出耦合,則如果沒有輸出耦合,則 I 為為 0,包是穩(wěn)定的。,包是穩(wěn)定的。如果沒有輸入耦合,則如果沒有輸入耦合,則 I 為為 1,包是不穩(wěn)定的。,包是不穩(wěn)定的。Pc的穩(wěn)定性:的穩(wěn)定性:Ca = 3Ce = 1I = 1/4穩(wěn)定抽象原則n穩(wěn)定抽象原則穩(wěn)定抽象原則穩(wěn)定的包應該是抽象的包。穩(wěn)定的包應該是抽象的包。 一個穩(wěn)定的包應該是抽象的,這樣它的穩(wěn)定性就不一個穩(wěn)定的包應該是抽象的,這樣它的穩(wěn)定性就不會使它無法擴展;會使它無法擴展;一個不穩(wěn)定的包應該是具體的,它的不穩(wěn)定性使它一個不穩(wěn)定的包應該是具體的,它的不穩(wěn)定性使它內(nèi)部的具體代碼易于更改。內(nèi)部的具體代

22、碼易于更改。一個包的抽象程度越高,它的穩(wěn)定性就越高。反之,一個包的抽象程度越高,它的穩(wěn)定性就越高。反之,它的穩(wěn)定性就越低。它的穩(wěn)定性就越低。 一個穩(wěn)定的包必須是抽象的,反之,不穩(wěn)定的包必一個穩(wěn)定的包必須是抽象的,反之,不穩(wěn)定的包必須是具體的。須是具體的。 穩(wěn)定抽象原則n包的抽象性度量:包的抽象性度量:A是一個測量包抽象程度的度量標準。它的值就是是一個測量包抽象程度的度量標準。它的值就是包中抽象類的數(shù)目和全部類的數(shù)目的比值。包中抽象類的數(shù)目和全部類的數(shù)目的比值。nNc包中類的總數(shù)包中類的總數(shù)nNa包中抽象類的數(shù)目包中抽象類的數(shù)目一個抽象類是一個至少具有一個純接口的類,并且不一個抽象類是一個至少具有一個純接口的類,并且不能被實例化。能被實例化。nA包的抽象性度量值包的抽象性度量值 A = Na / NcA的取值范圍的取值范圍0,1。0意味著沒有任何抽象類,意味著沒有任何抽象類,1意意味著包中只包含抽象類。味著包中只包含抽象類。穩(wěn)定抽象原則n穩(wěn)定性(穩(wěn)定性(I)和抽象性()和抽象性(A)之間的關系)之間的關系創(chuàng)建一個以創(chuàng)建一個以I為橫軸,為橫軸,A為縱軸的坐標圖。為縱軸的坐標圖。n位于位于“主序列主序列”上的包,既上的包,既不是太抽象,因為它具有穩(wěn)不是太抽象,因為它具有穩(wěn)定性,又不是太不穩(wěn)定,因定性,又不是太不穩(wěn)定,因為它具

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論