就乙個類而言,應該僅有乙個引起它變化的原因(職責)
主要根據不同的角度劃分職責,比如,
1、從類的組成,劃分為屬性操作和行為操作兩種。
2、從資料庫操作的不同作用,劃分為資料庫的連線操作和增刪改查
基本操作。
例如:交通工具類
//方式1
class vehicle }
public class singleresponsibility
}方案1的分析:
1.在方式1的run方法中,違反
了單一職責原則
2.解決方案:根據交通工具執行
方法不同,分解成不同類
//方式2:根據交通工具執行方法不同,分解成不同類
class roadvehicle }
class airvehicle }
class watervehicle }
public class singleresponsibility
public void runair(string vehicle)
public void runwater(string vehicle) }
public class singleresponsibility }
方案3的分析
1.這種修改方法沒有對原來的類做大的修改,只是增加方法;
2.增加的部分不影響原有部分,降低了變更引起的風險;
3.這裡在類這個級別上沒有遵守單一職責原則,但是在方法級
別上,仍然是遵守單一職責
注意事項和細節:
1)降低類的複雜度,乙個類只負責一項職責。
2)提高類的可讀性,可維護性
3)降低變更引起的風險
4)通常情況下,
應當遵守單一職責原則。
只有邏輯足夠簡單,才可以在**級違反單一職責原則:
只有類中方法數量足夠少,可以在方法級別保持單一職責
原則。開閉原則(open closed principle)是程式設計中最基礎、
最重要的設計原則——物件導向設計的終極目標
實現乙個畫圖類
方式1class rectangle }
class circle }
class ******** }
class graphicdraw
else if(type2)
else if(type==3)
} }public class graphdraw }
方式1的優缺點:
1)優點是比較好理解,簡單易操作。
2)缺點是違反了開閉原則(對擴充套件(提供方)開放,對
修改(使用方)關閉):需要給類增加新功能的時候,
盡量不要修改**,或者盡可能少修改**。
3)本例,需要新增乙個圖形種類時,修改的地方比較多
方式2:
//shape類,基類
abstract class shape
class graphicdraw }
class rectangle extends shape }
class circle extends shape }
class ******** extends shape }
public class graphdraw }
黎克特制代換原則使得開放-封閉成為可能
liskov於2023年提出關於繼承的原則「inheritance
should ensure that any property proved about supertype
objects also holds for subtype objects.」——「繼承必須確
保超類所擁有的性質在子類中仍然成立。」也就是說,
當乙個子類的例項能夠替換任何其超類的例項時,它們
之間才具有is-a關係。
該原則稱為liskov substitution principle——黎克特制代換
原則:依賴倒轉原則(dependence inversion principle)是指: 1)高層模組不應該依賴低層模組,二者都應該依賴其抽象
2)抽象不應該依賴細節,細節應該依賴抽象
3)依賴倒轉(倒置)的中心思想是面向介面程式設計
4)依賴倒轉原則是基於這樣的設計理念:
實現person接收訊息方式1
物件導向設計原則
oo原則 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合而努力 類應該對擴充套件開放,對修改關閉 依賴抽象,不要依賴具體類 只和朋友交談 別找我,我會找你 類應該只有乙個改變的理由 從設計原則到設計模式 針對介面程式設計,而不是針對實現程式設計 客戶無需知...
物件導向設計原則
物件設計原則 物件導向設計原則 物件導向設計的基石是 開 閉 原則。開一閉 原則講的是 乙個軟體實體應當對擴充套件開放,對修改關閉。這個規則說的是,在設計乙個模組的時候,應當使這個模組可以在不被修改的前提下被擴充套件。從另外乙個角度講,就是所謂的 對可變性封裝原則 對可變性封裝原則 意味著兩點 1 ...
物件導向設計原則
oo原則 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合而努力 類應該對擴充套件開放,對修改關閉 依賴抽象,不要依賴具體類 只和朋友交談 別找我,我會找你 類應該只有乙個改變的理由 從設計原則到設計模式 針對介面程式設計,而不是針對實現程式設計 客戶無需知...