• <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)  編輯 收藏 引用
            久久噜噜久久久精品66| 精品久久久无码21p发布| 久久精品一区二区三区不卡| 久久青草国产精品一区| 久久精品亚洲福利| 色综合久久中文字幕无码| 青青草原综合久久| 久久婷婷五月综合97色直播| 精品久久无码中文字幕| 性高朝久久久久久久久久| 久久婷婷国产综合精品 | 国产亚洲精品自在久久| 理论片午午伦夜理片久久 | 亚洲精品综合久久| 亚洲国产成人久久综合碰碰动漫3d | 精品人妻伦九区久久AAA片69| 亚洲伊人久久精品影院 | 精品久久久久久无码不卡| 久久被窝电影亚洲爽爽爽| 久久中文字幕人妻丝袜| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久精品亚洲精品国产色婷 | 青草国产精品久久久久久| 久久天天躁狠狠躁夜夜不卡 | 久久w5ww成w人免费| 女同久久| 久久久久国色AV免费观看| 99久久精品免费| 青青青青久久精品国产| 久久青草国产手机看片福利盒子| 色妞色综合久久夜夜| 狠狠色综合网站久久久久久久高清| 久久毛片免费看一区二区三区| 久久最近最新中文字幕大全| 精品国产91久久久久久久 | 中文字幕精品久久久久人妻| 国产免费久久久久久无码| 精品久久久久久无码免费| 久久久精品视频免费观看| 久久久久久无码国产精品中文字幕| 久久99国产精品久久|