阿摩線上測驗 登入

申論題資訊

試卷:102年 - 102年專門職業及技術人員高等建築師、技師、第二次食品技師暨普通不動產經紀人、記帳士考高等_資訊技師#29217
科目:程式設計
年份:102年
排序:0

申論題內容

二、解釋子類別替代法則(sub-class substitution rule)。(14 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
子類別替代法則(Liskov Substitution Principle,簡稱 LSP)是由芭芭拉·利斯科夫(Barbara Liskov)在 1987 年提出的,是面向對象設計的 SOLID 原則之一。這個原則指出,程序中的對象應該可以在不改變程序正確性的前提下,被它的子類的實例替代。
具體來說,子類別替代法則要求一個軟體實體(如類、模組、函數等)如果使用的是一個基類(父類)的話,那麼替換為其派生類(子類)後,不應該影響軟體實體的行為。換句話說,這意味著由父類衍生出的所有子類都應該能夠替換掉其父類,而不使得系統的行為發生變化。
LSP 的遵守有助於確保類的繼承關係保持正確性和一致性,並促進了代碼的重用。當違反了 LSP 原則時,經常會導致代碼的脆弱性增加,以及在使用多態性時出現意外的行為。
舉例來說:
如果有一個類 Bird 有一個方法 fly(),然後 Penguin 是 Bird 的子類,但是企鵝不能飛。在這種情況下,如果代碼中有一個函數接受 Bird 對象並調用了 fly() 方法,那麼用 Penguin 實例去替換 Bird 對象就會違反 LSP 原則,因為它改變了程序原有的行為(企鵝不能飛)。
為了符合 LSP,一個更好的設計是將 Bird 設計成不包含 fly() 方法的更通用的基類,然後讓那些能飛的鳥類繼承自 Bird 並添加一個 Flyable 接口,該接口包含 fly() 方法。這樣,只有實現了 Flyable 的鳥類才有 fly() 方法,這樣的設計既保留了類的多態性,又遵循了 LSP。