• <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)

            我參與的團隊

            搜索

            •  

            積分與排名

            • 積分 - 72524
            • 排名 - 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 閱讀(146) 評論(0)  編輯 收藏 引用
            色老头网站久久网| 国内精品久久久久久不卡影院| 久久精品国产99国产精品| 99热都是精品久久久久久| 久久天天躁夜夜躁狠狠| 久久久噜噜噜久久中文福利| 国产福利电影一区二区三区久久久久成人精品综合 | 久久精品亚洲男人的天堂| 久久夜色精品国产| 看久久久久久a级毛片| 久久久久久国产精品美女| 久久一日本道色综合久久| 久久无码一区二区三区少妇| 久久精品亚洲精品国产色婷 | 亚洲精品午夜国产va久久| 日本欧美久久久久免费播放网| 久久精品国产黑森林| 久久本道伊人久久| 漂亮人妻被黑人久久精品| 亚洲人成无码久久电影网站| 亚洲一区中文字幕久久 | 97精品伊人久久久大香线蕉| 亚洲精品无码专区久久久 | 热re99久久精品国99热| 久久久精品久久久久影院| 99久久99久久精品国产片| 久久国产欧美日韩精品| 久久久无码精品亚洲日韩按摩| 一本久久免费视频| 久久无码一区二区三区少妇| 精品无码人妻久久久久久| 99久久精品免费看国产一区二区三区 | 波多野结衣久久一区二区 | 香蕉久久一区二区不卡无毒影院 | 99久久亚洲综合精品成人| 国内精品久久久久| 色综合久久无码五十路人妻| 欧美一区二区三区久久综合| 亚洲va中文字幕无码久久不卡| 久久久精品人妻一区二区三区蜜桃 | 色婷婷久久综合中文久久蜜桃av |