偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

面向?qū)ο缶幊讨蓄愒O計的幾個原則

開發(fā) 開發(fā)工具
在面向?qū)ο笤O計中,如何通過很小的設計改變就可以應對設計需求的變化,這是令設計者極為關注的問題。為此不少OO先驅(qū)提出了很多有關面向?qū)ο蟮脑O計原則用于指導OO的設計和開發(fā)。下面是幾條與類設計相關的設計原則。

1. 開閉原則(the Open Closed Principle OCP)

一個模塊在擴展性方面應該是開放的而在更改性方面應該是封閉的。因此在進行面向?qū)ο笤O計時要盡量考慮接口封裝機制、抽象機制和多態(tài)技術。該原則同樣適合于非面向?qū)ο笤O計的方法,是軟件工程設計方法的重要原則之一。我們以收音機的例子為例,講述面向?qū)ο蟮拈_閉原則。我們收聽節(jié)目時需要打開收音機電源,對準電臺頻率和進行音量調(diào)節(jié)。但是對于不同的收音機,實現(xiàn)這三個步驟的細節(jié)往往有所不同。比如自動收縮電臺的收音機和按鈕式收縮在操作細節(jié)上并不相同。因此,我們不太可能針對每種不同類型的收音機通過一個收音機類來實現(xiàn)(通過重載)這些不同的操作方式。但是我們可以定義一個收音機接口,提供開機、關機、增加頻率、降低頻率、增加音量、降低音量六個抽象方法。不同的收音機繼承并實現(xiàn)這六個抽象方法。這樣新增收音機類型不會影響其它原有的收音機類型,收音機類型擴展極為方便。此外,已存在的收音機類型在修改其操作方法時也不會影響到其它類型的收音機。

2. 替換原則 (the Liskov Substitution Principle LSP)

子類應當可以替換父類并出現(xiàn)在父類能夠出現(xiàn)的任何地方。這個原則是Liskov于1987年提出的設計原則。它同樣可以從Bertrand Meyer 的DBC (Design by Contract) 的概念推出。

我們以學生為例,夜校生為學生的子類,因此在任何學生可以出現(xiàn)的地方,夜校生均可出現(xiàn)。這個例子有些牽強,一個能夠反映這個原則的例子時圓和橢圓,圓是橢圓的一個特殊子類。因此任何出現(xiàn)橢圓的地方,圓均可以出現(xiàn)。但反過來就可能行不通。

運用替換原則時,我們盡量把類B設計為抽象類或者接口,讓C類繼承類B(接口B)并實現(xiàn)操作A和操作B,運行時,類C實例替換B,這樣我們即可進行新類的擴展(繼承類B或接口B),同時無須對類A進行修改。

3. 依賴原則 (the Dependency Inversion Principle DIP)

在進行業(yè)務設計時,與特定業(yè)務有關的依賴關系應該盡量依賴接口和抽象類,而不是依賴于具體類。具體類只負責相關業(yè)務的實現(xiàn),修改具體類不影響與特定業(yè)務有關的依賴關系。

在結構化設計中,我們可以看到底層的模塊是對高層抽象模塊的實現(xiàn)(高層抽象模塊通過調(diào)用底層模塊),這說明,抽象的模塊要依賴具體實現(xiàn)相關的模塊,底層模塊的具體實現(xiàn)發(fā)生變動時將會嚴重影響高層抽象的模塊,顯然這是結構化方法的一個"硬傷"。

面向?qū)ο蠓椒ǖ囊蕾囮P系剛好相反,具體實現(xiàn)類依賴于抽象類和接口。

為此,我們在進行業(yè)務設計時,應盡量在接口或抽象類中定義業(yè)務方法的原型,并通過具體的實現(xiàn)類(子類)來實現(xiàn)該業(yè)務方法,業(yè)務方法內(nèi)容的修改將不會影響到運行時業(yè)務方法的調(diào)用。

4. 接口分離原則(the Interface Segregation Principle ISP)

采用多個與特定客戶類有關的接口比采用一個通用的涵蓋多個業(yè)務方法的接口要好。

ISP原則是另外一個支持諸如COM等組件化的使能技術。缺少ISP,組件、類的可用性和移植性將大打折扣。

這個原則的本質(zhì)相當簡單。如果你擁有一個針對多個客戶的類,為每一個客戶創(chuàng)建特定業(yè)務接口,然后使該客戶類繼承多個特定業(yè)務接口將比直接加載客戶所需所有方法有效。

以上四個原則是面向?qū)ο笾谐3S玫降脑瓌t。此外,除上述四原則外,還有一些常用的經(jīng)驗諸如類結構層次以三到四層為宜、類的職責明確化(一個類對應一個具體職責)等可供我們在進行面向?qū)ο笤O計參考。但就上面的幾個原則看來,我們看到這些類在幾何分布上呈現(xiàn)樹型拓撲的關系,這是一種良好、開放式的線性關系、具有較低的設計復雜度。一般說來,在軟件設計中我們應當盡量避免出現(xiàn)帶有閉包、循環(huán)的設計關系,它們反映的是較大的耦合度和設計復雜化。

【編輯推薦】

  1. 面向?qū)ο蟮乃季S過程
  2. Java EE面向?qū)ο髮崙?zhàn)之道
  3. PHP面向?qū)ο缶幊痰?個好習慣
責任編輯:佚名 來源: 網(wǎng)絡轉(zhuǎn)載
相關推薦

2013-04-17 10:46:54

面向?qū)ο?/a>

2012-06-07 10:11:01

面向?qū)ο?/a>設計原則Java

2010-07-20 09:13:55

Perl面向?qū)ο缶幊?/a>

2009-06-30 15:29:00

Java面向?qū)ο?/a>

2020-06-09 07:00:00

面向?qū)ο?/a>編程編程原則

2009-09-27 14:12:12

面向?qū)ο笤O計單一職責

2024-05-10 09:28:57

Python面向?qū)ο?/a>代碼

2012-05-08 10:14:45

設計原則

2011-07-12 17:53:21

PHP

2018-05-03 15:54:19

2023-09-27 23:28:28

Python編程

2012-03-14 10:48:05

C#

2021-07-02 14:14:14

Python對象設計

2021-07-16 10:23:47

Python設計對象

2010-01-20 09:48:44

面向?qū)ο?/a>

2017-04-21 09:07:39

JavaScript對象編程

2012-01-17 09:34:52

JavaScript

2022-09-28 07:31:03

SOLID對象設計

2023-04-19 08:43:52

Python面向?qū)ο缶幊?/a>

2023-11-02 07:55:31

Python對象編程
點贊
收藏

51CTO技術棧公眾號