主目錄:乙個物件導向設計(ood)的學習思路設計引子:
有乙隻小麻雀在大平原上,飛呀飛~。飛累了,看見前方乙個大鳥...小麻雀:
大鳥兄你好,本鳥叫麻雀!請問您怎麼稱呼?大鴕鳥:
原來是麻雀小弟呀!本鳥叫鴕鳥!小麻雀:
鴕鳥哥耶!小弟飛的累的不行!讓兄弟在您雄偉的身軀上歇歇腳麼?大鴕鳥:
不行!本鳥還走累了呢!那我咋辦?小麻雀:
你飛唄!難道我還拖著你不成?大鴕鳥:
前提是我要是能飛的起來呀!小麻雀:
開什麼玩笑!咱們都是鳥,你飛不起來?「飛」是咋們鳥類的特徵,想到飛就想到咋們鳥~。
l:芭芭拉·利斯科夫(barbara liskov)
因為提出這個原則的女士姓裡s:替換(substitution)
父類能被子類替換
①首先談談要是違反lsp
②再來看一些**(lsp的違反導致ocp的違反)
有三個類:鳥、鴕鳥、麻雀。鴕鳥和麻雀都有要去北京的方法
/**
* 鳥*/class bird
}/**
* 鴕鳥
*/class ostrich extends bird
public void tobeijing()}
/** * 麻雀
*/class sparrow extends bird
public void tobeijing()}
複製**
現在有乙個方法birdletgo,統一處理去北京的行為
public void birdletgo(bird bird) else
if (bird.istype == bird.is_sparrow)
}複製**
③結論由上面的分析可以大致的了解了遵守lsp的重要性了吧!
幾個繼承關係的類
//動物
public class animal
public string getfood
() }
//鳥class bird extends animal
}//鴕鳥
class ostrich extends bird
}//麻雀
class sparrow extends bird
}複製**
在動物園物件中呼叫吃的方法
class zoo
}複製**
分析
object food = new zoo().eatbreakfast(new animal("肉"));
複製**
string food = new zoo().eatbreakfast(new ostrich());
複製**
[^foot3]: 敏捷軟體開發 第10章 黎克特制替換原則(lsp) [^foot4]: 前置條件和後置條件是什麼? 物件導向設計原則 黎克特制替換原則 LSP
要 求 子類可以替換父類並且出現在父類能夠出現的任何地方 這個原則也是在貫徹gof倡導的面向介面程式設計!在這個原則中父類應盡可能使用介面或者抽象類來實現!子類通過實現了父類介面,能夠替父類的使用地方!通過這個原則,我們客戶端在使用父類介面的時候,通過子類實現!意思就是說我們依賴父類介面,在客戶端宣...
黎克特制替換原則,LSP
所有引用基類的地方必須能夠透明地使用其子類的物件。通俗點講,只要父類能出現的地方子類就可以出現,而且替換為子類也不會產生任務異常。我們知道物件導向語言的三大特性就是繼承 封裝 多台,黎克特制替換原則就是依賴於繼承 多型,建立抽象,通過抽象建立規範,在執行時替換成具體的物件,保證系統的拓展性 靈活性。...
設計原則之黎克特制替換原則(LSP)
lsp 黎克特制替換原則 兩種定義 型別t是型別s的子型別 所用引用基類的地方必須能透明的使用期子類物件 為什麼要使用黎克特制替換原則 讓繼承中的 利 大於 弊 發揮最大作用,同時減少 弊 所帶來的麻煩 繼承的優點是什麼?缺點?黎克特制替換要求凡是使用基類的地方,子類一定適用,因此子類必須具備基類的...