<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 7, comments - 3, trackbacks - 0, articles - 26

    Java類(lèi)設(shè)計(jì)

    Posted on 2010-07-16 08:47 delvin 閱讀(924) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 面向?qū)ο?/a>

    想要把類(lèi),接口和模塊設(shè)計(jì)好是一項(xiàng)高難度的工作。前人對(duì)此有過(guò)很好的研究和總結(jié),在此僅把我自己設(shè)計(jì)類(lèi)的方法歸納下:

    設(shè)計(jì)類(lèi)的步驟?
    1.定義類(lèi)的職責(zé)
    Note:
         1)一個(gè)類(lèi)的職責(zé)是這個(gè)類(lèi)存在的價(jià)值,若你不能清晰的給這個(gè)類(lèi)定義職責(zé),那么很可能意味著這個(gè)類(lèi)沒(méi)有存在的價(jià)值。
         2)從職責(zé)的角度去定義類(lèi),選擇類(lèi)比單純的什么從業(yè)務(wù)術(shù)語(yǔ)中找名詞來(lái)做類(lèi)名要有效的多.
         3)  在設(shè)計(jì)類(lèi)的時(shí)候,我經(jīng)常用CEO設(shè)計(jì)企業(yè)組織機(jī)構(gòu)來(lái)比喻。在設(shè)計(jì)企業(yè)架構(gòu)時(shí),需要考慮企業(yè)做的事,劃分不用的職責(zé)和角色,
          再設(shè)計(jì)不同的部門(mén)和崗位來(lái)承擔(dān)這些職責(zé)。部門(mén)類(lèi)似我們軟件的package,崗位就類(lèi)似我們類(lèi),具體的人就類(lèi)似對(duì)象。

    2.找個(gè)好名字來(lái)作為類(lèi)名,這個(gè)類(lèi)名基本可以暗示該類(lèi)的職責(zé)。
    Note
        1)對(duì)人來(lái)說(shuō),一個(gè)有意義的名字,勝過(guò)千言萬(wàn)語(yǔ)。好名字的標(biāo)準(zhǔn)就是用名字表達(dá)意圖。
        2)若不能找到一個(gè)好名字,也可能暗示這個(gè)類(lèi)的職責(zé)沒(méi)有定義清楚,這個(gè)類(lèi)存在的價(jià)值值得懷疑。
        3)一般我們選擇英文名詞作為類(lèi)名,比如converter就是convert好。若把軟件系統(tǒng)比喻成機(jī)器系統(tǒng),那個(gè)類(lèi)就是部件,而部件一般都是用名詞  的。當(dāng)然這也不能絕對(duì)化,有些情況例外。
      
    3.定義對(duì)外接口
      Note
       1)類(lèi)的職責(zé)最后要轉(zhuǎn)化為可供外部使用的接口,具體來(lái)說(shuō)就是公共方法集。
       2)接口盡量有完備的方法(是它做的事,都應(yīng)該有對(duì)應(yīng)方法來(lái)做,或組合來(lái)做),同時(shí)盡量使接口小(最小化),能用接口已有方法組合來(lái)做的,就不提供其他方法,但有例外,若這種組合用法很普遍,那最好提供一個(gè)冗余方法。Java 中的List類(lèi)是一個(gè)很少的例子,本身用List.size()== 0 方式可以達(dá) 到判斷是不是空的效果,但這種情況太普遍了,類(lèi)庫(kù)的設(shè)計(jì)者提供了一個(gè)isEmpty()方法。但要注意這種的便利方法,不易太多,這些方法沒(méi)有提高類(lèi)的能力,只是提高了便利性。

    4.撰寫(xiě)類(lèi)或接口的規(guī)范
    Note
      1.撰寫(xiě)的類(lèi)或方法規(guī)范本身也是設(shè)計(jì)的一部分工作。在Java中可以用javadoc來(lái)做。
      2.很多人忽略撰寫(xiě)接口規(guī)范,實(shí)際上類(lèi)設(shè)計(jì)的很大一部分工作就是定義這個(gè)接口規(guī)范。

    5.使用自己設(shè)計(jì)接口
    Note:
     1)類(lèi)設(shè)計(jì)完一定要自己先去使用,站在使用者的角度去評(píng)價(jià)這個(gè)類(lèi)的好壞。
     2)現(xiàn)在的測(cè)試驅(qū)動(dòng)開(kāi)發(fā),就是一種用測(cè)試驅(qū)動(dòng)設(shè)計(jì)的好辦法,測(cè)試代碼就是客戶(hù)代碼的一種。在測(cè)試過(guò)程中就能知道類(lèi)設(shè)計(jì)的怎么樣,若感覺(jué)不好,就需要返回去再設(shè)計(jì)。


      
    一個(gè)設(shè)計(jì)良好的類(lèi)具有的一般特征:
    1.類(lèi)接口具有完備性和最小化,適當(dāng)提供冗余方法

    2.使類(lèi)和成員的可訪問(wèn)性最小話
    理由:滿(mǎn)足軟件設(shè)計(jì)的基本原則之一封裝(Encapsulation)或信息隱藏(information hiding)

    Java語(yǔ)言提供的機(jī)制:訪問(wèn)控制(Access Control)。
    如何達(dá)到:請(qǐng)參考Effectvie Java 中第13條。

    3.在共有類(lèi)中使用共有方法而非共有域
    理由:共有域?qū)儆趯?shí)現(xiàn)細(xì)節(jié)的東西,不應(yīng)該暴露出去,這樣就違背了封裝原則。

    4.使可變性最小化
    理由:類(lèi)是具有職責(zé)的實(shí)體,根據(jù)單一職責(zé)原則,一個(gè)類(lèi)應(yīng)該只有一個(gè)或一類(lèi)職責(zé),也就是說(shuō)只有一個(gè)引起類(lèi)變化的原因。導(dǎo)致類(lèi)可變性越小,修改這個(gè)類(lèi)的機(jī)會(huì)就越小,從而提高了維護(hù)性和減少Bug。

    5.接口命名具有一致性
    理由:設(shè)計(jì)一個(gè)接口類(lèi)似在設(shè)計(jì)一個(gè)簡(jiǎn)單的語(yǔ)言,若接口命名不一致,就會(huì)導(dǎo)致使用者的困惑和費(fèi)解。




    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产中文字幕在线观看 | 久久精品毛片免费观看| 亚洲伊人久久大香线蕉啊| 69成人免费视频| 色噜噜狠狠色综合免费视频| 国产亚洲av片在线观看16女人 | 亚洲精品线路一在线观看| 先锋影音资源片午夜在线观看视频免费播放 | 国产成人综合久久精品免费| 久久久WWW免费人成精品| 亚洲日本国产乱码va在线观看| 国产真人无遮挡作爱免费视频| 久久久WWW成人免费精品| 久久亚洲精品专区蓝色区| 亚洲综合色在线观看亚洲| 成年人免费的视频| 男人j进女人p免费视频| 亚洲精品国产电影午夜| 亚洲欧洲中文日韩久久AV乱码| 亚洲免费在线观看视频| 夜夜爽妓女8888视频免费观看| 亚洲黄色免费观看| 久久ww精品w免费人成| 狠狠入ady亚洲精品| 亚洲日本乱码一区二区在线二产线| 免费久久精品国产片香蕉| 欧洲一级毛片免费| 免费看少妇高潮成人片| 国产精品亚洲片在线花蝴蝶| 国产gav成人免费播放视频| 最近中文字幕大全免费视频| 国产精品99爱免费视频| 亚洲一卡2卡3卡4卡5卡6卡| 国产极品粉嫩泬免费观看| 2015日韩永久免费视频播放| ww亚洲ww在线观看国产| 亚洲AV福利天堂一区二区三| 无码欧精品亚洲日韩一区夜夜嗨 | 窝窝影视午夜看片免费| 亚洲国产精品ⅴa在线观看| 亚洲国产成人爱av在线播放|