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

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

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

    我愛oo,我愛java

    交流blog QQ:421057986 oofrank@donews

    白馬非馬的面向對象分析

     公孫龍,六國時辯士也。疾名實之散亂,因資材之所長,為“守白”之論。假物取譬,以“守白”辯,謂白馬為非馬也。

      以馬作為進行問題域進行建模,已知存在白馬這種類型。顯然存在馬的超類,并且馬類包含一個屬性-顏色,是否需要建立白馬的子類呢?顯而易見的是,當馬的顏色屬性是白色時,馬的一些實例表達了一個白馬的特殊實例群(由此我們可以得知:白馬顯然是馬),根據里氏替換原則,子類型必須能夠替換掉它們的基類型,顯然在分析了馬的行為模式以后,我們可以得出結論:白馬可以替換馬。----!難道真的要建立白馬、黑馬、X馬的子類嗎?
       我認為可以從以下幾方面進行分析。

    1、類的職責(很大程度上等同于服務能力,操作方式):
        設計一個類,首先要從類職責的分析入手,一個類要承擔響應的職責,反過來說同樣的職責應該由同樣的類承擔,否則會造成類泛濫,實例孤單的狀況。如果領域內馬和白馬承擔同樣的職責,應該只建立馬一個類,不應該只見樹不見林,造成不抽象的類的產生。

    2、類的行為模式(當類承擔響應職責時,如何擴展):
       分析一個類要從類的行為模式入手,既然一個類要承擔責任,其承擔的責任表現方式是否一樣呢呢?這就是她的行為模式,這也是里氏替換原則主要起作用的地方,如果兩個類的職責相當,但行為模式不同則不能成為超類和子類的關系(比如"著名"的正方形不是長方形問題)。馬類,作為超類,基于一些特殊的行為方式:吃草,跑...,對于白馬她的行為模式和馬是一樣的,并沒有不同,所以白馬是馬而非馬的同根繼承子類。對于長方形和正方形都是具有相同計算面積算法(職責)的四方形的子類。

    -------以下是關于此事的一些擴展分析-----------
    3、子類的產生:
        何時需要產生子類呢:是對其父類的職責進行擴展,白馬沒有對父類的職責進行擴展,所以不是馬的子類。首先子類要擴展超類,其次子類不能重寫或廢除超類的職責。

    4、屬性,狀態的區別(類的域)
       對于一些類,在狀態不同時,會有不同的表現(狀態機模式),所以,類的getter,setter的部分包含兩種不同的特性,對于屬于狀態的部分,是我們要仔細分析的,而"白"馬則屬于屬性類(非狀態)的域, 一般來講,一個類的實例要能提供相應的差異服務(由于狀態不同)最好使用不變模式[生存周期狀態不變]或狀態機[生存周期有狀態,但狀態不由調用者控制]來實現。

    5、抽象類和接口
       由于java的單根繼承特性,很多設計人員不敢定義抽象類為繼承樹根,一定要先定義馬的接口,在建立抽象馬,作為一種"準規范"無可厚非,但我認為這是不愿承擔責任的表現,有行為的基類應該可以(必須?)從類定義開始,避免白馬類(一旦馬成為接口,白馬的產生就更加"名正言順"了)的出現.將來如果發生變化可以通過重構(導出接口和使用委托),解決問題。

    6、對象的創建(組裝)和使用應該分開
       既然對象的狀態如此重要,屬性有有很大程度的不變性(白馬在構造時就用該是白的,并且一生不變),而騎馬的人不必要求馬的屬性(!),所以,我們應該將馬的構造和使用分開,使領域模型更清晰。使用一些Ioc容器,比如Spring就能很好的解決這些問題。
     
    7、分析問題的領域
       說了這么多,有一個問題;如果有一個馬的研究機構,專門對不同顏色的馬進行專題研究,馬的顏色可能會對馬的行為有很大影響,例如戰馬如果是黃色(綠色,哈哈)更利于偽裝,此時"白"可能是一個很關鍵的問題,顏色會影響到不同的偽裝策略,此時將白馬作為馬的一個子類則是必須的!所以問題域不同,類的設計就不同,生活中的問題域比較清晰(生物學家和廚師對馬的理解不同),而軟件建模時往往問題域混雜,這也是OO設計時比較困難的問題,所以分析問題域也是非常重要的設計問題。

    posted on 2006-01-19 14:16 兼聽則明 閱讀(1067) 評論(4)  編輯  收藏 所屬分類: oo

    評論

    # re: 白馬非馬的面向對象分析 2006-01-19 20:33 JavaXP

    這不是彥宏博士的東西了?
      回復  更多評論   

    # re: 白馬非馬的面向對象分析 2006-01-19 21:41 兼聽則明

    呵呵,真的不知呀,我隨便想到瞎寫的  回復  更多評論   

    # re: 白馬非馬的面向對象分析 2006-02-08 11:08 太霸道

    個人認為,只要明確了需求,設計正方形為矩形的子類還是不難的  回復  更多評論   

    # re: 白馬非馬的面向對象分析 2006-02-10 14:33 兼聽則明

    設計正方形為矩形的子類? 什么意思?  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 最近免费中文字幕中文高清| 亚洲中文字幕无码日韩| 亚洲天堂一区二区三区| 精品无码一级毛片免费视频观看 | 99视频免费播放| 亚洲成人在线网站| 免费A级毛片av无码| 亚洲色图古典武侠| 和日本免费不卡在线v| 亚洲视频一区二区三区| 国产黄色免费网站| 色婷五月综激情亚洲综合| 日本三级2019在线观看免费| 亚洲人成影院午夜网站| 18禁超污无遮挡无码免费网站国产| 亚洲综合av一区二区三区不卡 | 中文有码亚洲制服av片| 午夜精品在线免费观看| 亚洲AV噜噜一区二区三区| 国产伦一区二区三区免费 | h在线看免费视频网站男男| 亚洲女初尝黑人巨高清| 久久国产精品一区免费下载| 亚洲精品美女久久久久9999| 永久免费av无码不卡在线观看| 亚洲av无码一区二区三区在线播放| 国产免费69成人精品视频| 日本免费A级毛一片| 亚洲理论片在线观看| 国产自产拍精品视频免费看| 国产99视频精品免费视频76 | 亚洲AV成人一区二区三区在线看| 国产免费av片在线播放| 最好免费观看高清在线| 亚洲sss综合天堂久久久| 亚洲午夜无码AV毛片久久| 污视频在线观看免费| 亚洲AV无码片一区二区三区| 亚洲精品无码永久中文字幕| 免费中文熟妇在线影片| 三上悠亚在线观看免费|