• <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 愛上龍卷風 閱讀(1872) 評論(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面試題”太矯情了,而有些人的對象設計的又太牽強了。  回復  更多評論
              

            国产欧美一区二区久久| 青青热久久国产久精品 | 久久久久久久久久久久久久| 亚洲а∨天堂久久精品9966| 欧美伊人久久大香线蕉综合| 久久精品国产亚洲av麻豆小说| 久久亚洲国产中v天仙www| 日批日出水久久亚洲精品tv| 久久精品亚洲精品国产色婷| 国产亚州精品女人久久久久久 | 久久精品国产只有精品66| 国产精品中文久久久久久久| 久久婷婷久久一区二区三区| 精品伊人久久久| 欧美一级久久久久久久大| 久久国产高潮流白浆免费观看| 亚洲伊人久久综合中文成人网| 国产美女久久精品香蕉69| 久久人人爽人人爽人人爽| 久久性生大片免费观看性| 热久久这里只有精品| 久久精品国产亚洲精品2020 | 久久播电影网| 久久青青草原精品影院| 久久国产精品一国产精品金尊| 久久久久精品国产亚洲AV无码| 亚洲午夜久久久| 波多野结衣久久一区二区| 久久精品国产色蜜蜜麻豆| 国产福利电影一区二区三区久久久久成人精品综合 | 一级做a爰片久久毛片毛片| 国产一区二区三精品久久久无广告 | 亚洲精品美女久久久久99| 人妻中文久久久久| 色综合合久久天天给综看| 香蕉久久久久久狠狠色| 亚洲精品国产自在久久| 久久中文字幕精品| 狠狠色丁香婷婷久久综合| 一本色道久久综合狠狠躁| 久久精品亚洲精品国产色婷 |