物件導向設計(OOD)中的單一職責原則

2021-04-12 22:04:22 字數 1193 閱讀 4792

我們知道,在物件導向設計中要做到高內聚低耦合。而單一職責原則就是實現高內聚低耦合的最好辦法。物件導向設計中單一職責原則是指:

乙個類只負責乙個功能領域中的相應職責。

如果乙個類承擔的職責過多,就等於把這些職責耦合在了一起。當其中乙個職責變化時,可能影響其他職責的運作。

下面我們用c++的例子來具體說明。

比如我們有如下的設計:

class

cshape

;class

csquare : 

public

cshape;

現在有兩個不同的應用程式用到了類csquare,乙個是有關幾何計算方面的,另乙個是有關圖形方面的。對於前者而說,程式從來不需要繪製圖形;而對於後者來說,程式也從來不需要計算圖形的面積。

在上面這種情況下,我們的設計就違反了單一職責原則。它即提供了幾何計算方面的功能,又提供了圖形繪製方面的功能。這樣,在有關幾何計算方面的應用程式中就要鏈結圖形顯示方面的庫檔案;而在有關圖形方面的應用程式中卻鏈結了數學計算方面的庫檔案。而這些多餘的鏈結其實是不必要的。它們不但會使編譯、鏈結的時間變長,而且會使應用程式占用的記憶體增加。如果我們對圖形的顯示**做了修改,那麼有關幾何計算方面的應用程式就要重新鏈結。我們為什麼要為自己不需要的功能重新鏈結自己的程式呢?因此,上面的設計是不正確的。

下面是乙個符合單一職責原則的設計。在這個設計中,把原來的類cshape分為兩個類:cgeometricshape和cgraphicalshape,來分別承擔幾何和圖形兩方面的職責。同樣,分別派生出ggeometricsquare和cgraphicalsquare。

class

cgeometricshape

;class

ggeometricsquare : 

public

cgeometricshape

;class

cgraphicalshape

;class

cgraphicalsquare : 

public

cgraphicalshape;

這樣,有關幾何計算方面的應用程式和有關圖形方面的應用程式之間就沒有一點兒耦合了。不僅應用程式中不會鏈結多餘的**,而且對其中的任意乙個類進行修改都不會影響到另外乙個應用程式。 

物件導向設計(OOD)中的單一職責原則

我們知道,在物件導向設計中要做到高內聚低耦合。而單一職責原則就是實現高內聚低耦合的最好辦法。物件導向設計中單一職責原則是指 乙個類只負責乙個功能領域中的相應職責。如果乙個類承擔的職責過多,就等於把這些職責耦合在了一起。當其中乙個職責變化時,可能影響其他職責的運作。下面我們用c 的例子來具體說明。比如...

物件導向設計原則 單一職責原則

單一職責原則是最簡單的物件導向設計原則,它用於控制類的粒度大小。單一職責原則定義如下 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領 域中的相應職責,或者可以定義為 就乙個類而言,應該只有乙個引起它變化的原因。單一職責原則告訴我們 乙個類...

物件導向設計原則 單一職責原則 SRP

晚 上在宿舍把webcast翻出來,聽了李建忠講的關於物件導向設計的幾天基本設計原則的課,半懂非懂聽了下來,聽完之後除了茫然還是茫然!也好,只有這樣才能知道自己所知甚淺,所學甚糙!革命遠未成功,吾須戒驕戒躁!ps 個人覺得李建忠講課水平一般,可能他是乙個非常好的程式設計師,但不是乙個好的講課員,大概...