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

            我參與的團隊

            搜索

            •  

            積分與排名

            • 積分 - 72958
            • 排名 - 323

            最新評論

            閱讀排行榜

            評論排行榜

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

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

            但如果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 閱讀(153) 評論(0)  編輯 收藏 引用
            伊人久久大香线蕉亚洲| 亚洲乱码精品久久久久..| 波多野结衣中文字幕久久| 大美女久久久久久j久久| 久久午夜福利电影| 久久久久久亚洲精品成人| 国产91久久综合| 久久久久久久久久久精品尤物| 精品久久人妻av中文字幕| 久久精品亚洲乱码伦伦中文| 久久精品国产清自在天天线| 久久成人精品| 久久er国产精品免费观看2| 伊人久久大香线蕉综合5g| 2021精品国产综合久久| 18禁黄久久久AAA片| 久久精品国产免费一区| 久久人人妻人人爽人人爽| 欧美精品丝袜久久久中文字幕| 精品国际久久久久999波多野| 一本色道久久88综合日韩精品| 91精品久久久久久无码| 久久久久亚洲av无码专区导航| 亚洲国产婷婷香蕉久久久久久| 久久99国产精品久久99| 欧美熟妇另类久久久久久不卡 | 久久精品国产亚洲AV电影| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 韩国无遮挡三级久久| 日韩精品久久久久久久电影| 久久精品亚洲欧美日韩久久| 91久久精品国产成人久久| 久久99精品国产麻豆| 久久久一本精品99久久精品66| 亚洲日本久久久午夜精品| 色欲综合久久躁天天躁| 性高朝久久久久久久久久| 久久亚洲精品无码播放| 性做久久久久久免费观看| 久久久久99这里有精品10| 久久亚洲AV成人无码国产|