葉落知秋

          一葉落而知天下秋

          統計

          留言簿(1)

          Java相關

          閱讀排行榜

          評論排行榜

          Liskov替換原則(LSP)


          發表時間: 2008年01月15日



          注:摘自《敏捷軟件開發:原則、模式與實踐》(Robert C. Martin)
          對于LSP可以做如下解釋:
          子類型(subtype)必須能夠替換掉它們的基類型(base type)

          Barbara Liskov首次寫下這個原則是在1988年。她說到,
          這里需要如下替換性質: 若對每個類型S的對象o1,都存在一個類型T的對象o2,使得在所有針對T編寫的程序P中,用o1替換o2后,程序P行為功能不變,則S是T的子類型。

          OOD中IS-A關系是就行為方式而言的,行為方式是可以進行合理假設的,是客戶程序所依賴的。

          基于契約設計(Design By Contract DBC),類的編寫者顯式的規定針對類的契約。客戶代碼的編寫者通過該契約獲悉可以依賴的。契約是通過為每個方法聲明的前置條件(preconditions)和后置條件(postconditions)來指定的。要使一個方法得以執行,前置條件必須為真。執行完畢后,該方法要保證后置條件為真。

          OCP是OOD中很多說法的核心。如果這個原則應用得有效,應用程學就會具有更多的可維護、可重用性以及健壯性。LSP是使OCP成為可能的主要原則之一。正是子類型的可替換性才使得使用基類型的模塊在無需修改的情況下就可以擴展。這種可替換性必需是開發人員可以隱式依賴的東西。因此,如果沒有顯式的強制基類類型的契約,那么代碼就必須良好的并且明顯的表達出這一點。

          術語“IS-A”的含意過于寬泛以至于不能作為子類型的定義。子類型的正確定義是“可替換性”的,這里的可替換性可以通過顯式或者隱式的契約來定義。

          posted on 2008-01-15 11:45 飛雪連天 閱讀(459) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 加查县| 湘阴县| 旺苍县| 买车| 泾源县| 噶尔县| 兴安盟| 金沙县| 收藏| 蓝田县| 泾源县| 徐水县| 邓州市| 高邮市| 崇明县| 忻州市| 澳门| 五常市| 汝城县| 宝丰县| 林西县| 大荔县| 古丈县| 安国市| 札达县| 赣榆县| 朝阳县| 岳池县| 二连浩特市| 昌乐县| 榆中县| 阿城市| 漯河市| 蓬溪县| 高雄县| 顺平县| 延庆县| 东乌珠穆沁旗| 容城县| 繁峙县| 正镶白旗|