程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 舉例解析Java的設計形式編程中裡氏調換准繩的意義

舉例解析Java的設計形式編程中裡氏調換准繩的意義

編輯:關於JAVA

舉例解析Java的設計形式編程中裡氏調換准繩的意義。本站提示廣大學習愛好者:(舉例解析Java的設計形式編程中裡氏調換准繩的意義)文章只能為提供參考,不一定能成為您想要的結果。以下是舉例解析Java的設計形式編程中裡氏調換准繩的意義正文


裡氏調換准繩,OCP作為OO的高層准繩,主意應用“籠統(Abstraction)”和“多態(Polymorphism)”將設計中的靜態構造改成靜態構造,保持設計的關閉性。“籠統”是說話供給的功效。“多態”由繼續語義完成。

裡氏調換准繩包括以下4層寄義:

  1. 子類可以完成父類的籠統辦法,然則不克不及籠罩父類的非籠統辦法。
  2. 子類中可以增長本身獨有的辦法。
  3. 當子類籠罩或完成父類的辦法時,辦法的前置前提(即辦法的形參)要比父類辦法的輸出參數更寬松。
  4. 當子類的辦法完成父類的籠統辦法時,辦法的後置前提(即辦法的前往值)要比父類更嚴厲。
  5.   如今我們可以對以上四層寄義停止講授。

      子類可以完成父類的籠統辦法,然則不克不及籠罩父類的非籠統辦法

      在我們做體系設計時,常常會設計接口或籠統類,然後由子類來完成籠統辦法,這裡應用的其實就是裡氏調換准繩。子類可以完成父類的籠統辦法很好懂得,現實上,子類也必需完整完成父類的籠統辦法,哪怕寫一個空辦法,不然會編譯報錯。

      裡氏調換准繩的症結點在於不克不及籠罩父類的非籠統辦法。父類中但凡曾經完成好的辦法,現實上是在設定一系列的標准和契約,固然它不強迫請求一切的子類必需服從這些標准,然則假如子類對這些非籠統辦法隨意率性修正,就會對全部繼續系統形成損壞。而裡氏調換准繩就是表達了這一層寄義。

      在面向對象的設計思惟中,繼續這一特征為體系的設計帶來了極年夜的方便性,然則由之而來的也潛伏著一些風險。上面舉例來講明繼續的風險,我們須要完成一個兩數相減的功效,由類A來擔任。

    class A{ 
      public int func1(int a, int b){ 
        return a-b; 
      } 
    } 
     
    public class Client{ 
      public static void main(String[] args){ 
        A a = new A(); 
        System.out.println("100-50="+a.func1(100, 50)); 
        System.out.println("100-80="+a.func1(100, 80)); 
      } 
    } 
    

     運轉成果:

    100-50=50
    100-80=20
    

            後來,我們須要增長一個新的功效:完成兩數相加,然後再與100乞降,由類B來擔任。即類B須要完成兩個功效:
    兩數相減。
    兩數相加,然後再加100。
            因為類A曾經完成了第一個功效,所以類B繼續類A後,只須要再完成第二個功效便可以了,代碼以下:

    class B extends A{ 
      public int func1(int a, int b){ 
        return a+b; 
      } 
       
      public int func2(int a, int b){ 
        return func1(a,b)+100; 
      } 
    } 
     
    public class Client{ 
      public static void main(String[] args){ 
        B b = new B(); 
        System.out.println("100-50="+b.func1(100, 50)); 
        System.out.println("100-80="+b.func1(100, 80)); 
        System.out.println("100+20+100="+b.func2(100, 20)); 
      } 
    } 
    

    類B完成後,運轉成果:

    100-50=150
    100-80=180
    100+20+100=220
    

            我們發明本來運轉正常的相減功效產生了毛病。緣由就是類B在給辦法起名時有意中重寫了父類的辦法,形成一切運轉相減功效的代碼全體挪用了類B重寫後的辦法,形成本來運轉正常的功效湧現了毛病。在本例中,援用基類A完成的功效,換成子類B以後,產生了異常。在現實編程中,我們經常會經由過程重寫父類的辦法來完成新的功效,如許寫起來固然簡略,然則全部繼續系統的可復用性會比擬差,特殊是應用多態比擬頻仍時,法式運轉失足的概率異常年夜。假如非要重寫父類的辦法,比擬通用的做法是:本來的父類和子類都繼續一個更淺顯的基類,原本的繼續關系去失落,采取依附、聚合,組合等關系取代。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved