物件導向設計 黎克特制替換原則 LSP

2021-09-11 13:27:50 字數 1843 閱讀 5783

主目錄:乙個物件導向設計(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的子型別 所用引用基類的地方必須能透明的使用期子類物件 為什麼要使用黎克特制替換原則 讓繼承中的 利 大於 弊 發揮最大作用,同時減少 弊 所帶來的麻煩 繼承的優點是什麼?缺點?黎克特制替換要求凡是使用基類的地方,子類一定適用,因此子類必須具備基類的...