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

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

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

    posts - 176, comments - 240, trackbacks - 0, articles - 7

    [導(dǎo)入]軟件中的分析學(xué)

    Posted on 2005-11-14 17:00 canonical 閱讀(512) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 設(shè)計(jì)理論

         分析學(xué)的離散形式是分而治之(Divide And Conquer)。 這一思想在軟件設(shè)計(jì)領(lǐng)域的重要性不言而喻。 大系統(tǒng)分解為小系統(tǒng),小系統(tǒng)分解為模塊,模塊分解為對(duì)象,對(duì)象分解為函數(shù),函數(shù)分解為增刪改查等動(dòng)詞和集合/個(gè)體等名詞,如此遞歸下來(lái)。 在很多關(guān)于軟件的"最佳實(shí)踐"中,都列舉了這種分解過(guò)程中的注意事項(xiàng),如高內(nèi)聚,低耦合等。 但是為什么要強(qiáng)調(diào)這些概念,誰(shuí)能保證這個(gè)checklist是完整的, 具體實(shí)踐過(guò)程中又當(dāng)如何去做? 我們能否跳出軟件的圈子,利用軟件領(lǐng)域之外的詞語(yǔ)重新表述一下這種思想?將大的系統(tǒng)分解為多個(gè)小的系統(tǒng)之后, 因?yàn)橄到y(tǒng)規(guī)模變小, 處理起來(lái)一般會(huì)容易一些, 但這是否就是分析學(xué)的全部?
         有一個(gè)小故事,說(shuō)有人問(wèn)一個(gè)科學(xué)家,如果地球文明將要?dú)纾挥幸痪湓?huà)可以傳給后人,那他最想告訴后代的是什么。那個(gè)科學(xué)家回答:宇宙萬(wàn)物都是由原子組成 的。分析學(xué)的哲學(xué)基礎(chǔ)是還原論,原子論可以說(shuō)是數(shù)千年來(lái)還原論最輝煌的勝利。原子論也清楚的向我們揭示了分析學(xué)的奧秘:千變?nèi)f化僅是事物的表象,分解之后 它們都由同質(zhì)的基元構(gòu)成。在分解的過(guò)程中,問(wèn)題的規(guī)模越來(lái)越小,問(wèn)題的數(shù)目似乎越來(lái)越多,但當(dāng)問(wèn)題空間因?yàn)槟撤N原因"塌縮"的時(shí)候,分解后的子問(wèn)題出現(xiàn)大 量的重疊,整個(gè)問(wèn)題的復(fù)雜性出現(xiàn)了本質(zhì)性的降低。FFT和動(dòng)態(tài)規(guī)劃算法中所采用的也正是這種從異質(zhì)到同質(zhì)的解決方案。
          分解之后,我們希望得到的子系統(tǒng)是低耦合的,那么最好是完全不相關(guān)的,我們希望得到的子系統(tǒng)是高內(nèi)聚的,那么最好是不可分的,在數(shù)學(xué)上,我們稱(chēng)之為正交。 還原論最完美的載體是線(xiàn)性世界,而線(xiàn)性代數(shù)(或更廣義的群論)說(shuō)了,線(xiàn)性系統(tǒng)完全由其正交的特征向量所構(gòu)成的"核"(kernel)來(lái)刻畫(huà),那大體上軟件 系統(tǒng)應(yīng)利用少數(shù)可重用的模塊來(lái)構(gòu)建。但線(xiàn)性代數(shù)又說(shuō)了,特征向量的選擇方式是無(wú)窮多的,而且完全等價(jià), 那大體上軟件系統(tǒng)的分解方式也是多種多樣的, 多數(shù)很難分出優(yōu)劣。  線(xiàn)性代數(shù)還說(shuō), 特征向量個(gè)數(shù)僅由系統(tǒng)的維度(系統(tǒng)復(fù)雜性的一種度量)來(lái)決定, 那大體上軟件系統(tǒng)無(wú)論怎么分解, 總有一個(gè)復(fù)雜性的下限。過(guò)分簡(jiǎn)單的架構(gòu)僅能支持過(guò)分簡(jiǎn)單的應(yīng)用。線(xiàn)性代數(shù)沒(méi)有明說(shuō),但潛在的表達(dá)著,特征向量的地位是平等的,所以在高內(nèi)聚,低耦合的基礎(chǔ) 上,軟件分解的原則中至少還要增加一條:對(duì)稱(chēng)性, 以維護(hù)系統(tǒng)整體結(jié)構(gòu)的平衡。
          很可惜,現(xiàn)實(shí)世界中發(fā)現(xiàn)了越來(lái)越多的非線(xiàn)性現(xiàn)象,以致于非線(xiàn)性研究本身已經(jīng)成為了一門(mén)獨(dú)立的學(xué)科。不過(guò),古老的教誨仍然有效,分解可以幫我們找回系統(tǒng)的線(xiàn) 性。在微積分所描繪的極限情形中,外力產(chǎn)生了加速度,然后加速度產(chǎn)生了速度,因與果就這樣實(shí)現(xiàn)了分離。(有人說(shuō),重整化方法在微觀(guān)世界的成功正是因?yàn)樵跇O 度糾纏的臨界情況下微積分失效了,也許有些道理)。

          為了在軟件中實(shí)施分析學(xué),我們需要一些技術(shù)手段。首先,需要一種命名機(jī)制,使我們能夠在思想中定義概念,并開(kāi)始建模。所謂的對(duì)象,正是這樣一種機(jī)制。可以從以下的級(jí)列關(guān)系來(lái)理解這一點(diǎn)
    1. 高級(jí)語(yǔ)言規(guī)定了數(shù)據(jù)的類(lèi)型,使得我們可以為不同的內(nèi)存塊指定不同的數(shù)據(jù)類(lèi)型,從而在概念上對(duì)它們作出區(qū)分。
    2. 當(dāng)程序變得漸漸復(fù)雜起來(lái),C語(yǔ)言提供的Struct結(jié)構(gòu)體,使我們可以創(chuàng)建新的數(shù)據(jù)類(lèi)型,可以將一組相關(guān)的數(shù)據(jù)放在一起,起個(gè)名字。而如果沒(méi)有 結(jié)構(gòu)體,這種相關(guān)性就無(wú)法直接在程序中得到表達(dá),必須紀(jì)錄在文檔中或者程序員的思想中。
    3. 對(duì)象(Object)是比結(jié)構(gòu)體(Struct)更加強(qiáng)大的命名機(jī)制,它可以將一組相關(guān)的數(shù)據(jù)和函數(shù)放在一起,起個(gè)名字。而且通過(guò)封裝和虛擬函數(shù),一個(gè)對(duì) 象類(lèi)型所表達(dá)的 不僅僅是它自身所代表的概念,它同時(shí)表達(dá)了它的派生類(lèi)所具有的特征。即對(duì)象所表達(dá)的是一個(gè)概念的集合而不是一個(gè)單獨(dú)的概念。
    4. 更復(fù)雜的程序中,對(duì)象之間的相互作用產(chǎn)生了某種確定的特征,出現(xiàn)了設(shè)計(jì)模式。
    5. 這個(gè)級(jí)列的下一步是什么?


           對(duì)象化沒(méi)有什么神秘的地方,它只是使我們擁有了一種表述的工具。有時(shí)對(duì)象化比不對(duì)象化更遭,因?yàn)槲覀儤O有可能犯命名的錯(cuò)誤。

         在沒(méi)有對(duì)象的概念的日子里,我們無(wú)法命名數(shù)據(jù)和函數(shù)的耦合,一些概念也就無(wú)法在軟件設(shè)計(jì)中得到自然的表達(dá),因?yàn)樗鼈冊(cè)诔绦虻氖澜缰袥](méi)有名字!一旦我們能夠 命名系統(tǒng)中所有的概念,一扇門(mén)就被打開(kāi)了,大量的可能性被發(fā)掘出來(lái),形成了今天的面向?qū)ο蠹夹g(shù)。這其中最重要的就是軟件中的正交分解技術(shù)。首先是繼承。在 早期的C程序中,經(jīng)常出現(xiàn)如下的代碼:
    if a then
       a_work_1();
    else if b then
       b_work_1();
    end

    if a then
       a_work_2();
    else if b then
       b_work_2();
    end

    通過(guò)繼承,我們可以捕獲以上程序中的關(guān)聯(lián)性,代碼被改寫(xiě)為如下方式
    x = a or b;
    x.work_1();

    x.work_2();

    但作為早期最主要的面向?qū)ο蠹夹g(shù),很快繼承這個(gè)概念就不堪重負(fù)。通過(guò)繼承,系統(tǒng)中的所有關(guān)系被組織成了一個(gè)樹(shù)狀結(jié)構(gòu)。隨著樹(shù)的層次越來(lái)越深,整個(gè)結(jié)構(gòu)變得越來(lái)越不穩(wěn)定,基類(lèi)的小小變動(dòng)隨時(shí)可能會(huì)造成雪崩似的影響。作為一個(gè)整體,對(duì)象也越來(lái)越難以被重用。

           此時(shí),接口(Interface)應(yīng)天命而生。從簡(jiǎn)單的意義上來(lái)理解,接口可以被認(rèn)為是對(duì)對(duì)象(Object)的正交分解。如果使用繼承,
    class CHuman {
     public void eat(){..} // human eat
     public void sleep(){..} // human sleep
    }
    class CManager extends CHuman {
     public void fireEmployee() { ...} // manager fire employee
    };
    class CEmployee extends CHuman {…}
       公有繼承大致上對(duì)應(yīng)于"is a" 關(guān)系, 即一種包含關(guān)系,在數(shù)學(xué)上稱(chēng)為偏序(Partial Order)。
    偏 序在邏輯上隱含的是一種推理,即我們可以根據(jù)基類(lèi)的行為我們可以推論派生類(lèi)的行為。所以當(dāng)我們知道某人是經(jīng)理(CManager)的時(shí)候, 我們可以推論出他是一個(gè)人,即他能吃能睡。很可惜,這種微妙的信息泄漏也許并不是我們所希望了解的,畢竟董事會(huì)雇傭一個(gè)職業(yè)經(jīng)理人來(lái)為的是管理而不是吃 飯。
          應(yīng)用組件技術(shù),我們進(jìn)行如下建模:
    interface IHuman {
     bool eat();
     bool sleep();
    };
    interface IManager{
     bool fireEmployee();
    };
    class Manager implements IHuman, IManager{…};

    Manager = IHuman + IManager


        接口打破了繼承所構(gòu)建的僵化的樹(shù)狀結(jié)構(gòu),提倡靈活的網(wǎng)狀結(jié)構(gòu),使得整個(gè)系統(tǒng)結(jié)構(gòu)扁平化,分解的粒度也更小。有了接口,是否就應(yīng)該忘了繼承呢?不,推理關(guān)系仍然是重要的,只是不要濫用。

        最近幾年,面向方面編程(AOP)逐漸興起。從分解技術(shù)的角度上看,它代表了一個(gè)新的方向:形容詞與動(dòng)詞的正交分解。例如,我們需要在一個(gè)事務(wù)中實(shí)現(xiàn)轉(zhuǎn)賬,
     實(shí)現(xiàn)轉(zhuǎn)賬這個(gè)功能可以很容易的編寫(xiě), "在一個(gè)事務(wù)中"這一修飾語(yǔ)被抽象出來(lái)稱(chēng)為一個(gè)Aspect, 并單獨(dú)實(shí)現(xiàn)。通過(guò)AOP技術(shù),我們將動(dòng)作與所需要的修飾組合起來(lái),完成所需要的功能。

          最后,談一談Reusablity這個(gè)概念.
    軟 件設(shè)計(jì)是從需求領(lǐng)域到軟件技術(shù)實(shí)現(xiàn)領(lǐng)域的一系列模型映射,在每一個(gè)層面上都存在著多種正交分解方式。構(gòu)建軟件的目的是為了滿(mǎn)足需求,所以整個(gè)映射過(guò)程應(yīng)該 向著應(yīng)用層傾斜。有一個(gè)說(shuō)法叫做Object oriented to user, 我是從科泰世紀(jì)的陳榕那里聽(tīng)來(lái)的。 我想這也正強(qiáng)調(diào)了從多種分解方式中作出選擇的準(zhǔn)則。 可重用的對(duì)象意味著它更可能成為構(gòu)建系統(tǒng)的"特征基元", 同時(shí)它的可用性隱含的表達(dá)了對(duì)應(yīng)用層用戶(hù)的意義。 所以Reusability是一個(gè)比Objectlization和Encapsulation更為重要的一個(gè)概念。

    主站蜘蛛池模板: 性生交片免费无码看人| 波多野结衣亚洲一级| 免费无遮挡无码视频网站| 日韩免费人妻AV无码专区蜜桃 | a级成人免费毛片完整版| 日韩亚洲不卡在线视频中文字幕在线观看| 亚洲精品无码不卡在线播HE| 亚洲成av人在线视| avtt亚洲天堂| 九九免费观看全部免费视频| 亚洲日韩中文字幕一区| 91亚洲国产在人线播放午夜| 亚洲国产精品嫩草影院在线观看 | 看Aⅴ免费毛片手机播放| 亚洲精品伊人久久久久| 亚洲视频一区二区在线观看| 亚洲国产精品一区二区久久| 亚洲中文字幕无码一区二区三区 | 免费福利在线观看| 亚洲AV噜噜一区二区三区| 亚洲乱码在线卡一卡二卡新区| 亚洲春黄在线观看| 亚洲黄色在线视频| 亚洲视频免费观看| 亚洲精品中文字幕乱码| 亚洲美女一区二区三区| 亚洲综合区图片小说区| 亚洲欧洲视频在线观看| 亚洲码一区二区三区| 亚洲精品**中文毛片| 亚洲国产综合在线| 久久精品亚洲AV久久久无码| 亚洲人成片在线观看| 77777亚洲午夜久久多喷| 亚洲精品无码少妇30P| 亚洲av无码专区首页| 日韩在线视精品在亚洲| 久久久久久久亚洲Av无码| 全部免费毛片免费播放| 亚洲成av人在片观看| 免费可以看黄的视频s色|