• <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)  編輯 收藏 引用
            久久91精品国产91久久小草| 亚洲国产高清精品线久久 | 亚洲精品无码久久久久| 久久精品亚洲AV久久久无码| 亚洲va中文字幕无码久久不卡| 久久久噜噜噜久久熟女AA片| 国产精品久久久久久| 午夜视频久久久久一区 | 国产精品99精品久久免费| 久久精品国产一区二区三区日韩| 精品久久久无码中文字幕天天| 久久人妻少妇嫩草AV蜜桃| 色综合色天天久久婷婷基地| 久久人人爽人人爽人人片AV东京热 | 人人狠狠综合久久亚洲| 精品国产乱码久久久久久1区2区 | 国产精品99久久久久久人| 日韩va亚洲va欧美va久久| 久久91精品国产91久久户| 久久人人爽人人爽人人片AV不| 88久久精品无码一区二区毛片 | 精品国产综合区久久久久久| 亚洲精品乱码久久久久久| 亚洲国产精品综合久久一线| 91久久精品视频| 久久精品国产亚洲网站| 久久国产精品一国产精品金尊| 久久午夜无码鲁丝片秋霞| 久久精品国产亚洲Aⅴ蜜臀色欲| 国产亚洲精久久久久久无码| 亚洲综合精品香蕉久久网| 思思久久99热免费精品6| 久久久久久久亚洲精品| 久久国产精品99精品国产987| 久久久精品人妻一区二区三区蜜桃 | 久久精品国产99久久久| 亚洲综合精品香蕉久久网| 亚洲AV日韩精品久久久久久久| 久久午夜福利无码1000合集| 2021最新久久久视精品爱| 久久无码AV一区二区三区|