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

            CG@CPPBLOG

            /*=========================================*/
            隨筆 - 76, 文章 - 39, 評論 - 137, 引用 - 0
            數(shù)據(jù)加載中……

            (ZT)軟件中的分析學(xué)


            軟件中的分析學(xué)- -

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

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


                   對象化沒有什么神秘的地方,它只是使我們擁有了一種表述的工具。有時對象化比不對象化更遭,因為我們極有可能犯命名的錯誤。

                 在沒有對象的概念的日子里,我們無法命名數(shù)據(jù)和函數(shù)的耦合,一些概念也就無法在軟件設(shè)計中得到自然的表達,因為它們在程序的世界中沒有名字!一旦我們能夠命名系統(tǒng)中所有的概念,一扇門就被打開了,大量的可能性被發(fā)掘出來,形成了今天的面向?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ān)聯(lián)性,代碼被改寫為如下方式

            x = a or b;
            x.work_1();
            //...
            x.work_2();

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

                   此時,接口(Interface)應(yīng)天命而生。從簡單的意義上來理解,接口可以被認(rèn)為是對對象(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 {...}

            公有繼承大致上對應(yīng)于"is a" 關(guān)系, 即一種包含關(guān)系,在數(shù)學(xué)上稱為偏序(Partial Order)。
            偏序在邏輯上隱含的是一種推理,即我們可以根據(jù)基類的行為我們可以推論派生類的行為。所以當(dāng)我們知道某人是經(jīng)理(CManager)的時候, 我們可以推論出他是一個人,即他能吃能睡。很可惜,這種微妙的信息泄漏也許并不是我們所希望了解的,畢竟董事會雇傭一個職業(yè)經(jīng)理人來為的是管理而不是吃飯。
                  應(yīng)用組件技術(shù),我們進行如下建模:

            interface IHuman {
             bool eat();
             bool sleep();
            };
            interface IManager{
             bool fireEmployee();
            };
            class Manager implements IHuman, IManager{…};

            Manager = IHuman + IManager


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

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

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

            posted on 2008-06-14 13:47 cuigang 閱讀(126) 評論(0)  編輯 收藏 引用 所屬分類: 轉(zhuǎn)帖

            思思久久精品在热线热| 国内精品久久久久影院老司| 中文字幕乱码久久午夜| 日本精品久久久久中文字幕| 国产精品无码久久四虎| 国产成人精品白浆久久69| 久久精品国产男包| 久久中文字幕人妻熟av女| 国产精品成人无码久久久久久| 思思久久精品在热线热| 国产精品久久新婚兰兰| 日韩美女18网站久久精品| 97精品伊人久久久大香线蕉| 一本一本久久A久久综合精品| 无夜精品久久久久久| 婷婷久久精品国产| 国产aⅴ激情无码久久| 久久无码专区国产精品发布| 办公室久久精品| 天天做夜夜做久久做狠狠| 亚洲午夜福利精品久久| 无码精品久久一区二区三区 | 久久亚洲AV成人无码| 99久久免费国产精品特黄| 久久这里只有精品首页| 中文精品久久久久人妻不卡| 色综合久久天天综线观看| 久久免费看黄a级毛片| A级毛片无码久久精品免费| 久久久无码人妻精品无码| 久久久久亚洲AV成人片| 精品久久久久久中文字幕| 91精品免费久久久久久久久| 色综合久久久久网| 精品国产乱码久久久久久呢| 久久久久国产| 色综合久久久久无码专区| 久久r热这里有精品视频| 久久久久亚洲精品天堂久久久久久| 久久只有这精品99| 精品欧美一区二区三区久久久|