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

            sherrylso

            C++博客 首頁 新隨筆 聯系 聚合 管理
              18 Posts :: 0 Stories :: 124 Comments :: 0 Trackbacks

                    作為程序員,一直困擾我的一個問題是:一名優秀的程序員,應該是注重面向對象分析能力的培養,還是注重算法分析能力的培養。我相信,這也是一個很多人面臨的問題。我的感覺是:很多system level的程序員更加側重于算法,而application level的程序員,更多的傾向于討論面向對象。大家也可以看到,很多知名IT公司的面試,比如google,比如微軟,很喜歡考察程序員的算法方面的能力。而自從設計模式理論風靡IT界以來,好像這些狀況有些改變,他們開始考察設計模式相關的問題,考察程序員面向對象的分析能力。不可否認的是,設計模式理論,其基于面向對象的理論技術,提供了開發者非常實效,有用的解決問題的模式。依賴于問題的上下文,應用設計模式,開發者可以開發出更加"面向對象"的系統。
               設計一個復雜的系統的本質,就是:將復雜的問題分解成小的,為我們所理解的問題,然后分而治之。人類的智力是有限的,當我們在面對一個復雜問題的時候,總會習慣于首先將他分解,分解到問題足夠的簡單,足夠為我們所理解,解決。事實上,無論是面向對象,還是算法,它們都是分解復雜問題的方法與手段。是采用面向對象的方法去分析,還是使用算法的分析方法,完全是由客觀的主體決定的。非常遺憾的是,這兩類分析方法是互斥的,排他的,你是不可能同時使用這兩種方法的分析解決問題。我們先看一個簡單的例子:
            問題的定義:client和server使用TCP/IP進行一個簡單的交互。
            算法的分解方法如下:


            問題空間被分解成為幾個執行步驟,accept,connet,send,recieve。
            面向對象的分解方法如下:


            問題空間被分解成為幾個對象:c_connector, 主要負責建立TCP連接,在連接成功后,會得到一個c_socket_stream對象,該對象負責主要負責發送和接收網路數據。c_acceptor,負責監聽網絡連接請求,在一個TCP連接成功建立后,返回給調用者一個c_socket_stream。
            兩者的區別在于:兩者分解方法的著重點是不同的,算法的分析方法強調的是事物內部各類事件之間的順序,依賴,耦合關系。算法所關心的是事件本身,例如上例中:它關心的是send,recv這樣發生在事物內部的事件,以及它們之間的調度關系。面向對象的分析方法在于強調的是事物內部各類客觀的主體,以及它們之間的相互協助。
            從這點上可以看到:在分解一個問題的時候,算法偏重于微觀,面向對象側重于宏觀;算法偏重于細節,面向對象側重于整體。可以看到,我們很容易得出這樣的結論:當面對一個復雜的問題的時候,我們的直覺會告訴我們,我們會更加傾向于使用面向對象方法理論來分析問題。這也是幾十年來面向對象的軟件實踐經驗告訴我們的真理。在計算機應用開發領域,面向領域問題本身的復雜性(這包括許多方面:比如你的需求在不斷變化,你的應用方式在不斷變化等等),決定了其更適合使用面向對象的方法來分析問題。面向對象的軟件系統會更加的富有彈性,更加的能適應這種快速的變化。
                 如何做面向對象的設計分析?關鍵在于:
                 1) 對復雜問題的抽象,將復雜的問題抽象成為一組對象,就是我們熟知的objects。object是面向對象軟件系統的行為主體。抽象也意味著我們應該忽略細節的東西,注重整體的東西。
                 2)組織這些objects,使他們形成具有一定結構的整體。比如:通過繼承,使它們成為父子關系,通過組合,使它們具有合作依賴關系。通過組織這些objects,我們更加能清楚地看到這些這些objects公共的行為和屬性。這就形成了面向對象軟件服用的基礎。
                很多人說:算法是程序設計的靈魂,但是我們也不能忘記;面向對象,幫助我們能夠更加容易理解問題復雜性的本質。或許算法與面向對象的最佳的結合點在于: 使用面向對象的方法分解問題,而使用精良的算法解決問題。

            posted on 2007-06-24 22:31 愛上龍卷風 閱讀(1878) 評論(7)  編輯 收藏 引用

            Feedback

            # re: 面向對象分析方法與算法 2007-06-24 23:11 eXile
            算法分析和面向過程的分析好象還不太一樣吧?
              回復  更多評論
              

            # re: 面向對象分析方法與算法 2007-06-25 12:48 clichengui
            不太對吧  回復  更多評論
              

            # re: 面向對象分析方法與算法 2007-06-25 23:13 愛上龍卷風
            算法本身的定義是:一種循序漸進解決問題的過程,一種為在有限步驟內解決問題而建立的可重復應用的計算過程。
            如果我們用算法的思維方式來分解問題,會使我們拘泥于細節。
            而面向過程,那是方法論上的定義,不是這里所討論的。
            更確切地講,這里是討論的是:
            面向對象的分解方法 vs algorithmic 分解方法



              回復  更多評論
              

            # re: 面向對象分析方法與算法 2007-06-26 09:33 子寒
            “非常遺憾的是,這兩類分析方法是互斥的,排他的,你是不可能同時使用這兩種方法的分析解決問題” 不是這樣的吧 不同層次的問題 用不同的方法  回復  更多評論
              

            # re: 面向對象分析方法與算法 2007-06-26 22:40 愛上龍卷風
            不過在"分解問題"這個層次上,從思維方式的角度考慮,我們可以用面向對象的思維方式,或者算法式的思維方式  回復  更多評論
              

            # re: 面向對象分析方法與算法 2007-06-28 09:41 SuperPlayeR
            建議閱讀一下《Unix編程藝術》
              回復  更多評論
              

            # re: 面向對象分析方法與算法 2008-01-07 23:36 abettor.org
            我的感覺是:很多system level的程序員更加側重于算法,而application level的程序員,更多的傾向于討論面向對象。

            ——同意這句。
            有時候感覺那些所謂“GOOGLE面試題”太矯情了,而有些人的對象設計的又太牽強了。  回復  更多評論
              

            国产成人无码久久久精品一| 欧美牲交A欧牲交aⅴ久久| 国产亚洲综合久久系列| 2022年国产精品久久久久| 99久久国产热无码精品免费久久久久| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 91精品日韩人妻无码久久不卡| 97精品国产97久久久久久免费| 欧美国产成人久久精品| 久久久国产乱子伦精品作者| 国内精品久久久久久久亚洲| 久久久久久久久久久久久久 | 天天爽天天狠久久久综合麻豆| 久久久精品2019免费观看| 久久笫一福利免费导航 | 亚洲AV无码久久精品狠狠爱浪潮| 青草影院天堂男人久久| 精品久久人人爽天天玩人人妻| 亚洲一本综合久久| 久久国产精品成人影院| 日韩精品久久久久久久电影| 91精品国产综合久久香蕉| 久久青青草原精品国产| 久久久久人妻一区精品| 久久国产乱子精品免费女| 亚洲精品乱码久久久久久久久久久久 | 国内精品久久人妻互换| 久久精品成人欧美大片| 久久一本综合| 久久精品女人天堂AV麻| 91亚洲国产成人久久精品网址| 久久永久免费人妻精品下载| 国内精品人妻无码久久久影院导航 | 久久国产综合精品五月天| 国产精品久久国产精麻豆99网站| 成人久久免费网站| 久久亚洲精品国产精品婷婷 | 日本精品久久久久影院日本 | 久久综合给合久久国产免费| 国内精品久久久久久99蜜桃| 久久婷婷五月综合国产尤物app|