• <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>
            隨筆-34  評(píng)論-108  文章-0  trackbacks-0
            包含(“有一個(gè)....”的關(guān)系):標(biāo)志一個(gè)類(lèi)含有一個(gè)基本數(shù)據(jù)元素或?qū)ο蟆?br>(1)通過(guò)包含來(lái)實(shí)現(xiàn)“有一個(gè)/has a”的關(guān)系:比如一個(gè)雇員“有一個(gè)”姓名,“有一個(gè)”電話(huà)號(hào)碼。
            (2)在萬(wàn)不得已時(shí),通過(guò)private繼承來(lái)實(shí)現(xiàn)“有一個(gè)”的關(guān)系:這么做的主要原因是讓外層的包含類(lèi)能夠訪(fǎng)問(wèn)內(nèi)層被包含類(lèi)的protected成員函數(shù)和數(shù)據(jù)成員。但是這樣會(huì)從一定程度上破壞封裝性。
            (3)警惕又超過(guò)約7個(gè)數(shù)據(jù)成員的類(lèi):研究表明,人們?cè)谧銎渌虑槭心苡涀〉碾x散項(xiàng)目的個(gè)數(shù)是7+-2,如果一個(gè)類(lèi)包含超過(guò)約7個(gè)數(shù)據(jù)成員,請(qǐng)考慮要不要分解為幾個(gè)更小的類(lèi)。如果數(shù)據(jù)成員都是整形或者字符串這種簡(jiǎn)單數(shù)據(jù)類(lèi)型,你可以按照7+-2的上限來(lái)考慮,反之,如果數(shù)據(jù)成員都是復(fù)雜對(duì)象的話(huà),就應(yīng)按7+-2的下限來(lái)考慮。
            繼承(“是一個(gè)...”的關(guān)系):繼承是說(shuō)一個(gè)類(lèi)是另一個(gè)類(lèi)的一種特化。
            (1)用public繼承來(lái)實(shí)現(xiàn)“是一個(gè)....”的關(guān)系:決定用繼承一個(gè)現(xiàn)有類(lèi)的方式創(chuàng)建一個(gè)新類(lèi)事,表明這個(gè)新的類(lèi)是現(xiàn)有類(lèi)一個(gè)更為特殊的版本,基類(lèi)既對(duì)派生類(lèi)將會(huì)做什么設(shè)定了預(yù)期,也對(duì)派生類(lèi)能怎么運(yùn)作提出了限制。如果派生類(lèi)不準(zhǔn)備完全遵守由基類(lèi)定義的同一個(gè)接口的契約,繼承就是不正確的實(shí)現(xiàn)技術(shù)了。
            (2)要么使用繼承并進(jìn)行詳細(xì)說(shuō)明,要么就不要用它。
            (3)遵循Liskov替換原則:派生類(lèi)必須能通過(guò)基類(lèi)的接口而被使用,切使用者無(wú)需了解兩者之間的差異。換句話(huà)說(shuō),對(duì)于基類(lèi)中定義的所有子程序,用在它的任何派生類(lèi)中時(shí)的含義都應(yīng)該是相同的。
            (4)確保只繼承需要繼承的部分:派生類(lèi)可以繼承成員函數(shù)的接口和/或?qū)崿F(xiàn)。
            (5)不要“覆蓋”一個(gè)不可覆蓋的成員函數(shù)。
            (6)把公用的接口、數(shù)據(jù)及操作放到繼承樹(shù)中盡可能高的位置:如果發(fā)現(xiàn)把一個(gè)子程序移到更到的層次后會(huì)破壞該層對(duì)象的抽象性,就停手。
            (7)只有一個(gè)實(shí)例的類(lèi)是值得懷疑的:Singleton模式是特殊的。
            (8)派生后覆蓋了某個(gè)子程序,擔(dān)在其中沒(méi)做任何操作,這種情況也值得懷疑。舉例:假設(shè)你有一個(gè)Cat類(lèi),他有一個(gè)Scratch(抓)成員函數(shù),可是最終你發(fā)現(xiàn)有些貓的爪尖沒(méi)了,不能抓了,你可能想從Cat類(lèi)派生一個(gè)叫ScratchlessCat(不能抓的貓)的類(lèi),然后覆蓋Scratch方法讓它什么都不做。這種方法是不可取的,修正這一問(wèn)題的位置不在派生類(lèi),而是在最初的Cat類(lèi)中,應(yīng)該創(chuàng)建一個(gè)Claw(爪子)類(lèi)并讓Cat類(lèi)包含它,問(wèn)題的根源在于做了所有貓能抓的假設(shè)。
            (9)避免讓繼承體系過(guò)深:《Object-Oritented Design Hwuristics》作者Arthur Riel建議把繼承層次限制在最多6層之內(nèi),Arthur是基于“神奇數(shù)字7+-2”這一理論得出這一建議的,但是依經(jīng)驗(yàn)而言,大多數(shù)人在腦中同時(shí)應(yīng)付超過(guò)2到3層繼承時(shí)就有麻煩了,用7+-2來(lái)限制一個(gè) 基類(lèi)的派生類(lèi)總數(shù)——而不是繼承層次的層數(shù)——可能更為合適。
            (10)盡量使用多態(tài),避免大量的類(lèi)型檢查:頻繁重復(fù)出現(xiàn)的case語(yǔ)句有時(shí)是在暗示,采用繼承可能是種更好的設(shè)計(jì)選擇。
            (11)讓所有數(shù)據(jù)都是private(而非protected):如果派生類(lèi)真的需要訪(fǎng)問(wèn)基類(lèi)的屬性,就應(yīng)該提供protected訪(fǎng)問(wèn)器函數(shù)。
            posted on 2007-09-28 09:21 探丫頭 閱讀(1136) 評(píng)論(2)  編輯 收藏 引用 所屬分類(lèi): 《代碼大全》讀書(shū)筆記

            評(píng)論:
            # re: 第6章 可以工作的類(lèi)(3) 2007-09-28 20:17 | aa
            QQ群名稱(chēng):游戲編程學(xué)習(xí)和開(kāi)發(fā)M
            QQ群號(hào)碼:43047318
            創(chuàng)建人QQ號(hào)碼:光愛(ài)之子(273612158)
            QQ群描述:群里是可以提供游戲和有關(guān)游戲編程知識(shí)。同時(shí)還有數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)。 和一些懂得操作系統(tǒng)原理的人 希望你加入。 謝謝!還有游戲策劃,運(yùn)營(yíng)有關(guān)方面知識(shí)。   回復(fù)  更多評(píng)論
              
            # re: 第6章 可以工作的類(lèi)(3) 2007-09-29 16:40 | 探丫頭
            @aa
            我對(duì)游戲編程沒(méi)興趣,謝謝  回復(fù)  更多評(píng)論
              
            无码日韩人妻精品久久蜜桃| 女同久久| 精品国产青草久久久久福利| 国产一区二区精品久久凹凸| 久久精品中文无码资源站| 久久被窝电影亚洲爽爽爽| 亚洲欧美日韩久久精品| 欧美伊香蕉久久综合类网站| 精品人妻伦九区久久AAA片69| 久久精品国产久精国产| 欧美国产成人久久精品| 伊人丁香狠狠色综合久久| 久久精品国产免费观看| 久久午夜综合久久| 精品999久久久久久中文字幕| 亚洲精品乱码久久久久久久久久久久| 久久免费美女视频| 99久久er这里只有精品18| 久久亚洲中文字幕精品一区| 久久久91人妻无码精品蜜桃HD| 久久精品国产一区二区三区日韩| 亚洲国产另类久久久精品黑人| 久久国产精品无| 蜜臀久久99精品久久久久久| 999久久久国产精品| 亚洲伊人久久大香线蕉苏妲己| MM131亚洲国产美女久久| 日日噜噜夜夜狠狠久久丁香五月| 久久久久亚洲AV无码观看| 伊人久久大香线蕉无码麻豆| 亚洲国产小视频精品久久久三级| 久久久噜噜噜久久中文字幕色伊伊| 99久久久精品| 久久亚洲精品中文字幕三区| 色综合久久最新中文字幕| 国产成人久久精品二区三区| 久久免费视频网站| 色婷婷噜噜久久国产精品12p| 色偷偷91久久综合噜噜噜噜| 国产一区二区久久久| 亚洲国产精品高清久久久|