• <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++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              18 Posts :: 0 Stories :: 124 Comments :: 0 Trackbacks

                    作為程序員,一直困擾我的一個(gè)問(wèn)題是:一名優(yōu)秀的程序員,應(yīng)該是注重面向?qū)ο蠓治瞿芰Φ呐囵B(yǎng),還是注重算法分析能力的培養(yǎng)。我相信,這也是一個(gè)很多人面臨的問(wèn)題。我的感覺(jué)是:很多system level的程序員更加側(cè)重于算法,而application level的程序員,更多的傾向于討論面向?qū)ο蟆4蠹乙部梢钥吹剑芏嘀鸌T公司的面試,比如google,比如微軟,很喜歡考察程序員的算法方面的能力。而自從設(shè)計(jì)模式理論風(fēng)靡IT界以來(lái),好像這些狀況有些改變,他們開(kāi)始考察設(shè)計(jì)模式相關(guān)的問(wèn)題,考察程序員面向?qū)ο蟮姆治瞿芰Α2豢煞裾J(rèn)的是,設(shè)計(jì)模式理論,其基于面向?qū)ο蟮睦碚摷夹g(shù),提供了開(kāi)發(fā)者非常實(shí)效,有用的解決問(wèn)題的模式。依賴于問(wèn)題的上下文,應(yīng)用設(shè)計(jì)模式,開(kāi)發(fā)者可以開(kāi)發(fā)出更加"面向?qū)ο?的系統(tǒng)。
               設(shè)計(jì)一個(gè)復(fù)雜的系統(tǒng)的本質(zhì),就是:將復(fù)雜的問(wèn)題分解成小的,為我們所理解的問(wèn)題,然后分而治之。人類(lèi)的智力是有限的,當(dāng)我們?cè)诿鎸?duì)一個(gè)復(fù)雜問(wèn)題的時(shí)候,總會(huì)習(xí)慣于首先將他分解,分解到問(wèn)題足夠的簡(jiǎn)單,足夠?yàn)槲覀兯斫猓鉀Q。事實(shí)上,無(wú)論是面向?qū)ο螅€是算法,它們都是分解復(fù)雜問(wèn)題的方法與手段。是采用面向?qū)ο蟮姆椒ㄈシ治觯€是使用算法的分析方法,完全是由客觀的主體決定的。非常遺憾的是,這兩類(lèi)分析方法是互斥的,排他的,你是不可能同時(shí)使用這兩種方法的分析解決問(wèn)題。我們先看一個(gè)簡(jiǎn)單的例子:
            問(wèn)題的定義:client和server使用TCP/IP進(jìn)行一個(gè)簡(jiǎn)單的交互。
            算法的分解方法如下:


            問(wèn)題空間被分解成為幾個(gè)執(zhí)行步驟,accept,connet,send,recieve。
            面向?qū)ο蟮姆纸夥椒?/u>如下:


            問(wèn)題空間被分解成為幾個(gè)對(duì)象:c_connector, 主要負(fù)責(zé)建立TCP連接,在連接成功后,會(huì)得到一個(gè)c_socket_stream對(duì)象,該對(duì)象負(fù)責(zé)主要負(fù)責(zé)發(fā)送和接收網(wǎng)路數(shù)據(jù)。c_acceptor,負(fù)責(zé)監(jiān)聽(tīng)網(wǎng)絡(luò)連接請(qǐng)求,在一個(gè)TCP連接成功建立后,返回給調(diào)用者一個(gè)c_socket_stream。
            兩者的區(qū)別在于:兩者分解方法的著重點(diǎn)是不同的,算法的分析方法強(qiáng)調(diào)的是事物內(nèi)部各類(lèi)事件之間的順序,依賴,耦合關(guān)系。算法所關(guān)心的是事件本身,例如上例中:它關(guān)心的是send,recv這樣發(fā)生在事物內(nèi)部的事件,以及它們之間的調(diào)度關(guān)系。面向?qū)ο蟮姆治龇椒ㄔ谟趶?qiáng)調(diào)的是事物內(nèi)部各類(lèi)客觀的主體,以及它們之間的相互協(xié)助。
            從這點(diǎn)上可以看到:在分解一個(gè)問(wèn)題的時(shí)候,算法偏重于微觀,面向?qū)ο髠?cè)重于宏觀;算法偏重于細(xì)節(jié),面向?qū)ο髠?cè)重于整體。可以看到,我們很容易得出這樣的結(jié)論:當(dāng)面對(duì)一個(gè)復(fù)雜的問(wèn)題的時(shí)候,我們的直覺(jué)會(huì)告訴我們,我們會(huì)更加傾向于使用面向?qū)ο蠓椒ɡ碚搧?lái)分析問(wèn)題。這也是幾十年來(lái)面向?qū)ο蟮能浖?shí)踐經(jīng)驗(yàn)告訴我們的真理。在計(jì)算機(jī)應(yīng)用開(kāi)發(fā)領(lǐng)域,面向領(lǐng)域問(wèn)題本身的復(fù)雜性(這包括許多方面:比如你的需求在不斷變化,你的應(yīng)用方式在不斷變化等等),決定了其更適合使用面向?qū)ο蟮姆椒▉?lái)分析問(wèn)題。面向?qū)ο蟮能浖到y(tǒng)會(huì)更加的富有彈性,更加的能適應(yīng)這種快速的變化。
                 如何做面向?qū)ο蟮脑O(shè)計(jì)分析?關(guān)鍵在于:
                 1) 對(duì)復(fù)雜問(wèn)題的抽象,將復(fù)雜的問(wèn)題抽象成為一組對(duì)象,就是我們熟知的objects。object是面向?qū)ο筌浖到y(tǒng)的行為主體。抽象也意味著我們應(yīng)該忽略細(xì)節(jié)的東西,注重整體的東西。
                 2)組織這些objects,使他們形成具有一定結(jié)構(gòu)的整體。比如:通過(guò)繼承,使它們成為父子關(guān)系,通過(guò)組合,使它們具有合作依賴關(guān)系。通過(guò)組織這些objects,我們更加能清楚地看到這些這些objects公共的行為和屬性。這就形成了面向?qū)ο筌浖玫幕A(chǔ)。
                很多人說(shuō):算法是程序設(shè)計(jì)的靈魂,但是我們也不能忘記;面向?qū)ο螅瑤椭覀兡軌蚋尤菀桌斫鈫?wèn)題復(fù)雜性的本質(zhì)。或許算法與面向?qū)ο蟮淖罴训慕Y(jié)合點(diǎn)在于: 使用面向?qū)ο蟮姆椒ǚ纸鈫?wèn)題,而使用精良的算法解決問(wèn)題。

            posted on 2007-06-24 22:31 愛(ài)上龍卷風(fēng) 閱讀(1871) 評(píng)論(7)  編輯 收藏 引用

            Feedback

            # re: 面向?qū)ο蠓治龇椒ㄅc算法 2007-06-24 23:11 eXile
            算法分析和面向過(guò)程的分析好象還不太一樣吧?
              回復(fù)  更多評(píng)論
              

            # re: 面向?qū)ο蠓治龇椒ㄅc算法 2007-06-25 12:48 clichengui
            不太對(duì)吧  回復(fù)  更多評(píng)論
              

            # re: 面向?qū)ο蠓治龇椒ㄅc算法 2007-06-25 23:13 愛(ài)上龍卷風(fēng)
            算法本身的定義是:一種循序漸進(jìn)解決問(wèn)題的過(guò)程,一種為在有限步驟內(nèi)解決問(wèn)題而建立的可重復(fù)應(yīng)用的計(jì)算過(guò)程。
            如果我們用算法的思維方式來(lái)分解問(wèn)題,會(huì)使我們拘泥于細(xì)節(jié)。
            而面向過(guò)程,那是方法論上的定義,不是這里所討論的。
            更確切地講,這里是討論的是:
            面向?qū)ο蟮姆纸夥椒?vs algorithmic 分解方法



              回復(fù)  更多評(píng)論
              

            # re: 面向?qū)ο蠓治龇椒ㄅc算法 2007-06-26 09:33 子寒
            “非常遺憾的是,這兩類(lèi)分析方法是互斥的,排他的,你是不可能同時(shí)使用這兩種方法的分析解決問(wèn)題” 不是這樣的吧 不同層次的問(wèn)題 用不同的方法  回復(fù)  更多評(píng)論
              

            # re: 面向?qū)ο蠓治龇椒ㄅc算法 2007-06-26 22:40 愛(ài)上龍卷風(fēng)
            不過(guò)在"分解問(wèn)題"這個(gè)層次上,從思維方式的角度考慮,我們可以用面向?qū)ο蟮乃季S方式,或者算法式的思維方式  回復(fù)  更多評(píng)論
              

            # re: 面向?qū)ο蠓治龇椒ㄅc算法 2007-06-28 09:41 SuperPlayeR
            建議閱讀一下《Unix編程藝術(shù)》
              回復(fù)  更多評(píng)論
              

            # re: 面向?qū)ο蠓治龇椒ㄅc算法 2008-01-07 23:36 abettor.org
            我的感覺(jué)是:很多system level的程序員更加側(cè)重于算法,而application level的程序員,更多的傾向于討論面向?qū)ο蟆?br>
            ——同意這句。
            有時(shí)候感覺(jué)那些所謂“GOOGLE面試題”太矯情了,而有些人的對(duì)象設(shè)計(jì)的又太牽強(qiáng)了。  回復(fù)  更多評(píng)論
              


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            国产国产成人精品久久| 久久久久亚洲AV片无码下载蜜桃| 久久99精品久久久久久hb无码 | 国产精品美女久久久网AV| 国产精品免费久久久久久久久| 日本国产精品久久| 久久亚洲精精品中文字幕| 国产精品热久久无码av| 亚洲精品国产字幕久久不卡| 国内精品久久久久久不卡影院| 久久精品夜夜夜夜夜久久| 国产精品久久久久乳精品爆| 少妇高潮惨叫久久久久久| 久久无码国产| 日本精品久久久中文字幕 | 久久久女人与动物群交毛片| 久久www免费人成精品香蕉| 久久久国产乱子伦精品作者| 日韩欧美亚洲国产精品字幕久久久| 久久久久无码精品国产| 99久久国产宗和精品1上映| 久久影院午夜理论片无码| 国产999精品久久久久久| 久久精品亚洲日本波多野结衣 | 久久亚洲精精品中文字幕| 四虎亚洲国产成人久久精品| 91亚洲国产成人久久精品| 久久精品草草草| 99999久久久久久亚洲| 久久久久亚洲AV片无码下载蜜桃| 久久精品综合网| 热99RE久久精品这里都是精品免费| 久久精品国产99久久丝袜| 亚洲精品综合久久| 亚洲欧美一级久久精品| 久久无码人妻精品一区二区三区 | 性欧美大战久久久久久久久| 久久精品国产精品亚洲精品| 一级a性色生活片久久无少妇一级婬片免费放| 国产精品亚洲综合专区片高清久久久| 1000部精品久久久久久久久|