亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

為什么extends是有害的(二)

2019-11-18 13:18:43
字體:
來源:轉載
供稿:網友

  有一天,有人也許運行這個代碼并且注重到Stack沒有運行的如想象的那么快,并且能夠在重負荷下使用。你能夠重寫Stack,以至于它不用ArrayList并且繼續提高Stack的效率。這是新的傾向的和有意義的版本:
  [/代碼]
  class Stack
  {
     PRivate int stack_pointer = -1;
     private Object[] stack = new Object[1000];
  
     public void push( Object article )
  {
       assert stack_pointer < stack.length;
      
       stack[ ++stack_pointer ] = article;
     }
  
     public Object pop()
     {
        assert stack_pointer >= 0;
        return stack[ stack_pointer-- ];
      }
    
      public void push_many( Object[] articles )
      {
        assert ( stack_pointer + articles.length ) < stack.length;
      
        System.arraycopy( articles, 0, stack, stack_pointer + 1, articles.length );
        Stack_pointer += articles.length;
      }
  }
  [/代碼]
  
  注重到push_many不再多次調用push()—它做塊傳輸。新的Stack運行正常;事實上,比前一個版本更好。不幸的是,派生類Monitorable_stack不再運行,因為假如push_many()被調用,它不正確的跟蹤堆棧的使用(push()的派生類版本不再通過繼續的push_many()方法調用,所以push_many()不再更新high_water_mark)。Stack是一個脆弱的類。與關閉它一樣,事實上不可能通過小心來消滅這些類型的錯誤。
  
  注重假如你用接口繼續,你就沒有這個問題,因為你沒有繼續對你有害的函數。假如Stack是接口,由Simple_stack和Monitorable_stack實現,那么代碼就是更加健壯的。
  
  我提供了一個基于接口的方法在Listing 0.1。這個解決方法和繼續實現的方法一樣的靈活:你能夠用Stack抽象術語來寫代碼而不必擔心你事實上在操作那種具體的堆棧。因為兩個實現必須提供公共接口的所有東西,它很難使事情變糟。我仍然有和寫基類的代碼一樣的只寫一次,因為我用封裝而不是繼續。在底層,我不得不通過封裝類中的瑣碎的訪問器方法來訪問缺省的實現。(例如,Monitorable_Stack.push(…)(在41行)不得不調用在Simple_stack等價的方法).程序員埋怨寫所有這些行,但是寫這非凡行代碼同消除重要的潛在bug是非常小的成本。
  
  [/代碼]
  Listing 0.1. 用接口消除脆弱基類
  
    1 import java.util.*;
    2
    3 interface Stack
    4 {
    5   void push( Object o );
    6   Object pop();
    7   void push_many( Object[] source );
    8 }
    9
   10 class Simple_stack implements Stack
   11 {  private int stack_pointer = -1;
   12   private Object[] stack = new Object[1000];
   13
   14   public void push( Object o )
   15   {  assert stack_pointer < stack.length;
   16
   17     stack[ ++stack_pointer ] = o;
   18   }
   19
   20   public Object pop()
   21   {  assert stack_pointer >= 0;
   22
   23     return stack[ stack_pointer-- ];
   24   }
   25
   26   public void push_many( Object[] source )
   27   {  assert (stack_pointer + source.length) < stack.length;
   28
   29     System.arraycopy(source,0,stack,stack_pointer+1,source.length);
   30     stack_pointer += source.length;
   31   }
   32 }
   33
   34
   35 class Monitorable_Stack implements Stack
   36 {
   37   private int high_water_mark = 0;
   38   private int current_size;
   39   Simple_stack stack = new Simple_stack();
   40
   41   public void push( Object o )
   42   {  if( ++current_size > high_water_mark )
   43       high_water_mark = current_size;
   44     stack.push(o);
   45   }
   46  
   47   public Object pop()
   48   {  --current_size;
   49     return stack.pop();
   50   }
   51
   52   public void push_many( Object[] source )
   53   {
   54     if( current_size + source.length > high_water_mark )
   55       high_water_mark = current_size + source.length;
   56
   57     stack.push_many( source );
   58   }
   59
   60   public int maximum_size()
   61   {  return high_water_mark;
   62   }
   63 }
   64
  [/代碼]
  
  沒有提到基于框架編程,那使對于脆弱的基類的討論是不完整的。諸如Microsoft Foundation Classes(MFC)的基類已經成為建立類庫的流行途徑。盡管MFC本身正在神圣的隱退,但是MFC的基口已經是根深蒂固,而這無關于Microsoft在那終止,程序員會一直認為Microsoft的方法是最好的方法。
  
  一個基于框架的系統典型的使用半成品的類的構成庫開始,這些類不做任何需要做的事,而是依靠于派生類來提供需要的功能。在Java中,一個好的例子就是組件的paint()方法,它是一個有效的占位者;一個派生類必須提供真正的版本。
  
  你能夠適度的多國一些東西,但是一個基于定制的派生類的完整的類框架是非常脆弱的。基類是太脆弱了。當我們用MFC編程時,每次Microsoft公布新版本時,我不得不重寫我的應用。這些代碼將經常編譯,但是由于一些基類的改變,它們不能運行。
  
  所有提供的Java包工作的非常好。為了使它們運行,你不需要擴展任何東西。這個已經提供的結構比派生類的框架結構更好。它輕易維護和使用,并且假如Sun Microsystems提供的類改變了它的實現,也不會使你的代碼處在危險中。
  
  總結脆弱基類
  一般,最好避開具體基礎類和extends關系,而用接口和implements關系。我的處理規則是,在我的至少80%的代碼中完全用接口來完成。例如,我從不用對HashMap的引用;我用對Map接口的引用。(我對interface這個字不是嚴格的。當你看怎樣用接口的時候,InputStream是一個好的接口,盡管它在Java中是作為抽象類來實現的。)
  
  你增加的越抽象,就越靈活。在今天的商業環境下,需求隨著程序開發而改變,靈活就是最主要的。而且靈敏編程中的大多數只有代碼使用抽象來寫才會很好的運行。
  
  假如你近距離的檢查四人幫的模式,你將看到這些模式中的很多是提供方法消除實現繼續,而最好用接口繼續,并且大多數模式的共有特征是用接口繼續。這個重要事實是我們開始時提到的:模式是發現而不是發明。模式的出現是當你發現寫得很好,易維護的運行代碼時。它講的是這些寫得好的,易維護的代碼根本的避開了實現繼續。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产盗摄xxxx视频xxx69| 中文字幕亚洲无线码a| 一本大道亚洲视频| 久久久久久91| 国产精品扒开腿爽爽爽视频| 欧美精品免费播放| 亚洲美腿欧美激情另类| 精品久久久久久| 国产精品18久久久久久首页狼| 国产亚洲欧美日韩一区二区| 亚洲高清久久网| 97碰在线观看| 亚洲日本欧美中文幕| 日韩激情视频在线| 日韩中文字幕在线观看| 青青在线视频一区二区三区| 91精品国产成人| 精品视频偷偷看在线观看| 国产69精品久久久| 欧美日韩国产成人在线观看| 日韩在线视频免费观看| 亚洲18私人小影院| 欧美香蕉大胸在线视频观看| 色综合久久中文字幕综合网小说| 57pao精品| 亚洲精品中文字| 一色桃子一区二区| 欧美日韩国产在线| 日韩视频在线观看免费| 日韩黄在线观看| 久久精品一区中文字幕| 日韩中文字幕国产| 91久久精品国产| 亚洲欧美中文在线视频| 久久久中文字幕| 欧洲亚洲免费视频| 91在线无精精品一区二区| www.99久久热国产日韩欧美.com| 亚洲欧美日韩精品久久| 欧美成人精品一区二区三区| 亚州成人av在线| 精品国产一区二区三区久久久| 福利一区视频在线观看| 欧美肥臀大乳一区二区免费视频| 久久精品国产久精国产一老狼| 91精品国产综合久久香蕉最新版| 日韩精品极品在线观看| 久久免费福利视频| 国产热re99久久6国产精品| 91免费欧美精品| 91在线观看免费高清| 久久国产一区二区三区| 青草青草久热精品视频在线网站| 国产欧美日韩亚洲精品| 色综合亚洲精品激情狠狠| 日韩a**站在线观看| 国产丝袜一区二区三区| 97视频在线观看视频免费视频| 91精品综合久久久久久五月天| 国产成人精品在线| 欧美成人国产va精品日本一级| 久久免费视频这里只有精品| 日韩欧美成人区| 国产精品日韩精品| 欧美色欧美亚洲高清在线视频| 欧美大全免费观看电视剧大泉洋| 日韩亚洲成人av在线| 在线视频亚洲欧美| 精品人伦一区二区三区蜜桃免费| 红桃视频成人在线观看| 美日韩精品免费视频| 2021久久精品国产99国产精品| 国产精品久久久久久久久男| 中文字幕久久久| 欧美性在线视频| 欧洲精品在线视频| 亚洲成人a**站| 国产视频精品va久久久久久| 日韩在线高清视频| 亚洲国产精品高清久久久| 欧美黑人巨大精品一区二区| 国产精品一区二区三区成人| 日韩av电影手机在线| 国产欧美久久一区二区| 超在线视频97| 狠狠综合久久av一区二区小说| 国产精品成人一区| 日韩久久精品电影| 日韩免费精品视频| 亚洲欧美国产制服动漫| 国产精品久久久久7777婷婷| 国产不卡一区二区在线播放| 伊人久久久久久久久久久| 亚洲精品理论电影| 91麻豆桃色免费看| 亚洲精品日韩欧美| 这里只有精品在线播放| 亚洲韩国日本中文字幕| 97精品国产aⅴ7777| 国内精品小视频| 中文字幕成人在线| 日韩av理论片| 亚洲精品美女久久| 成人免费在线视频网站| 亚洲**2019国产| 日本一区二区在线播放| 高清一区二区三区四区五区| 538国产精品一区二区免费视频| 国产精品69精品一区二区三区| 亚洲日韩第一页| 高清欧美性猛交xxxx黑人猛交| 欧美成人精品三级在线观看| 欧美黑人性视频| 欧美日韩一区二区精品| 亚洲一区二区三区四区视频| 中文字幕日本精品| 欧美激情图片区| 欧美一级高清免费| 亚洲欧洲高清在线| 亚洲丝袜一区在线| 91久久久国产精品| 欧美www视频在线观看| 九九热这里只有在线精品视| 91高清在线免费观看| 亚洲欧美制服综合另类| 久久成年人免费电影| 亚洲高清不卡av| 精品久久久999| 精品女同一区二区三区在线播放| 亚洲视频在线免费看| 色偷偷噜噜噜亚洲男人| 久久影视电视剧凤归四时歌| 国产日韩欧美成人| 视频在线观看99| 国产69久久精品成人| 国产91精品久久久久| 久热99视频在线观看| 日韩激情第一页| 国产日韩欧美日韩大片| 欧美亚洲伦理www| 亚洲欧美精品在线| 成人激情春色网| 青草成人免费视频| 亚洲欧美日韩在线高清直播| 国产成人精品久久二区二区| 俺去啦;欧美日韩| 中文字幕亚洲天堂| 久久乐国产精品| 亚洲天堂2020| 欧美久久精品一级黑人c片| 亚洲成人激情图| 久久久国产精品x99av| 色综合视频网站| 97视频在线观看免费高清完整版在线观看| 亚洲国产精久久久久久久| 91久久久国产精品| 国产精品中文字幕在线| 中文字幕精品一区二区精品| 欧美日韩亚洲精品内裤| 欧美成人激情视频免费观看| 精品久久久久久国产| 欧美国产亚洲视频| 久久久人成影片一区二区三区| 国产精品小说在线|