• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            COOOOOOOOL

            從固有的原則出發,向著目標誠直前進.所以這樣的行為便名為正當的行為,表示其為尋著正路而行的.

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              26 Posts :: 0 Stories :: 21 Comments :: 0 Trackbacks

            公告

            QQ:774262464 email:cooooooool.2010@gmail.com

            常用鏈接

            留言簿(3)

            我參與的團隊

            搜索

            •  

            積分與排名

            • 積分 - 72708
            • 排名 - 322

            最新評論

            閱讀排行榜

            評論排行榜

            有時,重復來自設計中的錯誤。

            讓我們看一個來自配送行業的例子。假定我們的分析揭示,一輛卡車有車型、牌照號、司機及其他一些屬性。與此類似,發運路線的屬性包括路線、卡車和司機。基于這一理解,我們編寫了一些類。

            但如果Sally打電話請病假、我們必須改換司機,事情又會怎樣呢?Truck和DeliverRoute都包含有司機。我們改變哪一個?顯然這樣 的重復很糟糕。根據底層的商業模型對其進行規范化(normalize)--卡車的底層屬性集真的應包含司機?路線呢?又或許我們需要第三種對象,把司 機、卡車及路線結合在一起。不管最終的解決方案是什么,我們都應避免這種不規范的數據。

            當我們擁有多個互相依賴的數據元素時,會出現一種不那么顯而易見的不規范數據。讓我們看一個表示線段的類:

            1. class Line {  
            2.  public:  
            3.   Point  start;  
            4.   Point  end;  
            5.   double length;  
            6. }; 

            第一眼看上去,這個類似乎是合理的。線段顯然有起點和終點,并總是有長度(即使長度為零)。但這里有重復。長度是由起點和終點決定的:改變其中一個,長度就會變化。最好是讓長度成為計算字段:

            1. class Line {  
            2.   public:  
            3.    Point  start;  
            4.    Point  end;  
            5.    double length() { return start.distanceTo(end); }  
            6.  }; 

            在以后的開發過程中,你可以因為性能原因而選擇違反DRY原則。這經常會發生在你需要緩存數據,以避免重復昂貴的操作時。其訣竅是使影響局部化。對DRY原則的違反沒有暴露給外界:只有類中的方法需要注意"保持行為良好"。

            1. class Line {  
            2.  private:  
            3.   bool  changed;  
            4.   double length;  
            5.   Point  start;  
            6.   Point  end;  
            7.  
            8.  public:  
            9.   void setStart(Point p) { start = p; changed = true; }  
            10.   void setEnd(Point p)   { end   = p; changed = true; }  
            11.  
            12.   Point getStart(void)   { return start; }  
            13.   Point getEnd(void)     { return end;   }  
            14.  
            15.   double getLength() {  
            16.     if (changed) {  
            17.       length  = start.distanceTo(end);  
            18.       changed = false;  
            19.     }  
            20.     return length;  
            21.   }  
            22. }; 

            這個例子還說明了像Java和C++這樣的面向對象語言的一個重要問題。在可能的情況下,應該總是用訪問器(accessor)函數讀寫對象的屬性 。這將使未來增加功能(比如緩存)變得更容易。

            Uniform Access原則:模塊提供的所有服務都應能通過統一的表示法使用,該表示法不能泄漏它們是通過存儲、還是通過計算實現的。

            posted on 2009-12-16 15:53 COOOOOOOOL 閱讀(150) 評論(0)  編輯 收藏 引用
            国产精品内射久久久久欢欢| 精品国产乱码久久久久软件 | 久久国产精品波多野结衣AV| 亚洲成人精品久久| 久久有码中文字幕| 色欲av伊人久久大香线蕉影院| 国产精品一久久香蕉国产线看观看| 国产亚洲欧美成人久久片| 久久综合狠狠综合久久97色| 99精品久久久久久久婷婷| 国产精品99久久久久久董美香| 一本久久精品一区二区| 国产一久久香蕉国产线看观看| 伊人久久大香线蕉综合热线| 青青国产成人久久91网| 久久人妻AV中文字幕| 久久er国产精品免费观看8| 久久精品国产亚洲av麻豆色欲| 久久激情亚洲精品无码?V| 国产精品美女久久久m| 久久久久亚洲国产| 欧美午夜A∨大片久久 | 综合久久一区二区三区 | 99久久综合狠狠综合久久止| 午夜精品久久久久久影视riav| 97久久久久人妻精品专区| 国产精品久久久久久久app | 久久国产视频99电影| 久久青草国产精品一区| 久久66热人妻偷产精品9| 久久笫一福利免费导航| 久久露脸国产精品| 国産精品久久久久久久| 久久99热这里只有精品国产| 久久99国产精一区二区三区| 国内精品久久久久久99| 国内精品久久久久伊人av| 久久天天躁狠狠躁夜夜avapp| 中文字幕热久久久久久久| 久久婷婷人人澡人人爽人人爱| 人妻无码精品久久亚瑟影视|