里氏替換原則 – PHP面向對象編程(OOP)

    PHP面向對象編程(OOP)用里氏替換原則來規范自己的行為

    我的理解,父類有的,子類也得有。父類提供了地基,子類繼承地基,繼續建房子即可,玩玩不可在子類上取破壞父類提供的地基。

    為什么叫里氏替換原則?

    里氏替換原則在SOLID這五個設計原則中是比較特殊的存在:

    • 如果違反了里氏替換原則,不只是降低軟件設計的優雅性,很可能會導致Bug
    • 只有里氏替換原則是以人名命令的

    里氏替換原則譯自Liskov substitution principle。Liskov是一位計算機科學家,也就是Barbara Liskov,麻省理工學院教授,也是美國第一個計算機科學女博士,師從圖靈獎得主John McCarthy教授,人工智能概念的提出者。

    里氏替換原則最初由Barbara Liskov在1987年的一次學術會議中提出,而真正正式發表是在1994年,Barbara Liskov 和 Jeannette Wing發表的一篇學術論文《A behavioral notion of subtyping》.

    什么是里氏替換原則?

    里氏替換原則在1994年Barbara Liskov 和 Jeannette Wing發表論文中的描述是:

    If S is a declared subtype of T, objects of type S should behave as objects of type T are expected to behave, if they are treated as objects of type T

    從字面上翻譯:如果S是T的子類型,對于S類型的任意對象,如果將他們看作是T類型的對象,則對象的行為也理應與期望的行為一致。

    而另一種關于里氏替換原則的描述為Robert Martin在《敏捷軟件開發:原則、模式與實踐》一書中對原論文的解讀:子類型(subtype)必須能夠替換掉他們的基類型(base type)。這個是更簡明的一種表述。

    如何理解里氏替換原則?

    不管是Barbara Liskov論文中的表述,還是Robert Martin的解讀,都是比較抽象的表達。要理解里氏替換原則,其實就是要理解兩個問題:

    • 什么是替換?
    • 什么是與期望行為一致的替換(Robert Martin所說的“必須能夠替換”)?

    什么是替換

    替換的前提是面向對象語言所支持的多態特性,同一個行為具有多個不同表現形式或形態的能力。

    什么是與期望行為一致的替換?

    在不了解派生類的情況下,僅通過接口或基類的方法,即可清楚的知道方法的行為,而不管哪種派生類的實現,都與接口或基類方法的期望行為一致?;蛘哒f接口或基類的方法是一種契約,使用方按照這個契約來使用,派生類也按照這個契約來實現。這就是與期望行為一致的替換。

    違反里氏替換原則的危害

    當我們違反了這一原則會帶來有一些危害:

    • 反直覺。期望所有子類行為是一致的,但如果不一致可能需要文檔記錄,或者在代碼跑失敗后漲此知識;
    • 不可讀。如果子類行為不一致,可能需要不同的邏輯分支來適配不同的行為,徒增代碼復雜度;
    • 不可用。可能出錯的地方終將會出錯。

    如何避免違反里氏替換原則

    談到如何避免,當然要基于里氏替換原則的定義,與期望行為一致的替換。

    • 從行為出發來設計。在做抽象或設計時,不只是要從模型概念出發,還要從行為出發,比如一個經典的例子,正方形和長方形,從現實的概念中正方形是一個長方形,但是在計算其面積的行為上是不一致的。
    • 基于契約設計。這個契約即是基類方法簽名、功能描述、參數類型、返回值等。在派生類的實現時,時刻保持派生類與基類的契約不被破壞。

    參考文章

    給TA贊賞
    共{{data.count}}人
    人已贊賞
    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    ?
    購物車
    優惠劵
    搜索
    主站蜘蛛池模板: 国产AV一区二区三区传媒| 日韩电影一区二区三区| 一区二区三区高清视频在线观看 | 久夜色精品国产一区二区三区| 一级特黄性色生活片一区二区| 久久精品国产一区二区三区| 国产凹凸在线一区二区| 人妻天天爽夜夜爽一区二区| 成人免费一区二区无码视频| 亚洲国产精品一区二区第四页 | 无码精品人妻一区二区三区人妻斩 | 免费一本色道久久一区| 无码日韩精品一区二区人妻| 国产成人无码一区二区在线观看| 亚洲福利视频一区| 秋霞日韩一区二区三区在线观看| 国产精品主播一区二区| 国产成人精品日本亚洲专一区| 国产成人久久一区二区三区| 精品一区二区三区免费 | 动漫精品专区一区二区三区不卡| 国产精品无码一区二区三级| 国产精品无码一区二区三区毛片| 国产高清在线精品一区二区三区 | 一区二区三区四区电影视频在线观看| 亚洲一区二区女搞男| 国产香蕉一区二区三区在线视频 | 国产情侣一区二区三区| 国产成人精品第一区二区| 肥臀熟女一区二区三区| 亚洲一区二区三区在线观看网站| 久久无码精品一区二区三区| 亚洲国产一区在线观看| 少妇人妻偷人精品一区二区| 免费看AV毛片一区二区三区| 一区二区三区午夜视频| 亚洲国产精品一区二区第四页| 在线观看一区二区精品视频| 亚洲国产老鸭窝一区二区三区| 一区二区高清在线| 无码人妻aⅴ一区二区三区|