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

            關于設計

             

            關于設計

            設計是一項把需求轉(zhuǎn)換為編碼方案的活動。設計在軟件開發(fā)中是必定存在的,無論何種情況下,我們都需要把需求轉(zhuǎn)化為編碼方案。
            設計是一個不斷完善的過程,設計的缺陷可能在設計之初無法被發(fā)現(xiàn),直到設計完成時才被察覺到,這導致了再次設計的需要。注意,我們在首次設計時應該盡可能的避免缺陷的出現(xiàn),而不是視而不見以求下次解決。
            設計上的付出是必要的,在設計階段發(fā)現(xiàn)錯誤并改正比編碼后發(fā)現(xiàn)相同錯誤并改正的代價低的多,如果設計的錯誤拖延到維護階段,那就更加不堪設想。
            設計存在優(yōu)劣,必須明確這一點。敷衍的進行設計后果是很嚴重的(雖然偶爾也能更加快速的產(chǎn)生產(chǎn)品),糟糕設計的最大特點是無法響應需求變更。但也應該注意,優(yōu)秀的設計有多種,糟糕的設計也有多種。
             
            事物的本質(zhì)屬性是一件事物必須具有的,如果不具有則就不在是該事物。事物的偶然屬性是不起解決性作用的屬性。例如,車總有輪子,沒有了輪子就不在是車,那么輪子就是本質(zhì)屬性,但是輪子可能有 4 個,也可能有 3 個,無論多少個輪子依然是車,那輪子的數(shù)目就是偶然屬性。
            本質(zhì)復雜度源于需求,無論采取何種手段,何種技術都不會對本質(zhì)復雜度造成任何影響,所以有人才會說,軟件開發(fā)本身就很復雜(無論使用何種技術開發(fā)都是復雜的)。我們需要管理好偶然復雜度(偶然性的復雜度),例如,需求是開發(fā)一個可用的計算器程序(圖形界面可有可無),這時,開發(fā)命令行的計算器就比開發(fā) GUI 的計算器的偶然復雜度小,用 C++ 進行開發(fā)其偶然復雜度就比用 Dephi 高。敏捷開發(fā)和 Unix 中都強調(diào) KISS,而敏捷開發(fā)更加強調(diào)應該使用簡單的技術和工具,這都是為了避免偶然復雜度過高帶來額外的成本開銷。

            設計者應該真正理解偶然復雜度,如果設計出來的框架,在進行開發(fā)時需要開發(fā)人員關注于系統(tǒng)的每個細節(jié),那么對于程序員來說偶然復雜度是高的,相比下,對于每個功能的開發(fā),程序員只需要關心當前編寫的任務,那么偶然復雜度是低的(COM 的設計非常強調(diào)的一點是封裝,而不是復用)。

             

            設計的基本的原則:

            1)盡量降低偶然復雜度。如果可以簡單的解決問題,那為什么不這么做了?另外某些角度來說:

            模塊化的系統(tǒng)(系統(tǒng)對“模塊”一詞有確切的定義),在一定程度上偶然復雜度較低,模塊化的系統(tǒng)讓程序員只需要關心當前開發(fā)的部分。

            2)盡量保持高內(nèi)聚,低耦合。高耦合的系統(tǒng)懼怕變動(動一處而牽動全身),變動帶來的問題通過關聯(lián)進行傳遞。高耦合的系統(tǒng)的關鍵點在于:系統(tǒng)組成部分的關聯(lián)過多,導致過多的相互影響,當關聯(lián)數(shù)量到一定程度,整個系統(tǒng)就會很不穩(wěn)定。

            具體來說:

            <1> 集成的困難:高耦合的各個程序組成部分需要花費較多時間進行集成。

            <2> 測試的困難:一個部分的問題通過與其他部分關聯(lián)傳遞到其他部分,那么意味著一個部分的變動可能導致整個系統(tǒng)的重新測試。

            低耦合:在類這個層次上來說,除了底層的工具類(例如 STL)之外(工具類允許和系統(tǒng)中的大部分類發(fā)生關聯(lián)),應該盡可能的減少類之間的關聯(lián)。

            3)可擴展。可擴展的一個標志是,無需改變系統(tǒng)底層,即可增加新的功能。

            4)可移植性。可移植性非常特別(似乎違背低偶然復雜度原則),它不同于軟件的其他的特性,除非你保證你的項目永遠無需移植到其他的環(huán)境中去,否則,你應該注意這點,因為通常來說,時間越長,越難移植,甚至最后只能重寫,代價非常之高。

            5)分層。分層的系統(tǒng)相對來說偶然復雜度較低,關聯(lián)較少。每層都有每層的工作,相互影響較小。

             

            另外,類的粒度也比較重要,大粒度的類間關聯(lián)少,但是不可避免的就是類自身過于復雜。小粒度的類自身很簡單,易于開發(fā)和維護,但是類間關聯(lián)變多,通訊太頻繁。粒度過大和過小都會帶來較多的問題,應該根據(jù)經(jīng)驗作合理設計。

            在 C++ 中使用巨大的類無異于使用 C 語言進行編程,這意味著你拋棄了 C++ 強大的抽象能力。含有巨類的系統(tǒng)中的一個顯著的標志是:含有大量重復代碼或者相似代碼(這歸結(jié)于 C 語言不夠強大的抽象能力和項目在時間上的壓力)

             

            最后要說的一句是:KISS 和敏捷給太多人以誤解,請仔細斟酌它們的含義(有幾個人懂得 KISS 的真正含義)。設計是不可避免的,好的設計是至關重要的。好的設計在一定程度上控制了軟件的成本,即使你的老板并不明白,但是你應該這么做。

             

            author: killercat

            posted on 2009-05-04 20:38 Randy 閱讀(281) 評論(0)  編輯 收藏 引用

            <2015年10月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導航

            統(tǒng)計

            常用鏈接

            留言簿(3)

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            97超级碰碰碰久久久久| 精品久久8x国产免费观看| 亚洲AⅤ优女AV综合久久久| 欧美日韩成人精品久久久免费看| 热久久最新网站获取| 国产Av激情久久无码天堂| 久久国产影院| 久久精品夜夜夜夜夜久久| 久久精品无码一区二区三区日韩 | 久久国产精品77777| 日韩va亚洲va欧美va久久| 久久精品国产亚洲AV嫖农村妇女| 久久se这里只有精品| 日韩久久久久久中文人妻| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 色综合久久中文字幕无码| 九九久久精品国产| 精品无码久久久久久午夜| 久久久久国产一级毛片高清板| 久久久久女人精品毛片| 久久久久亚洲AV无码专区首JN| 国内精品久久久久久中文字幕| 久久久久久国产精品无码超碰 | 久久国产劲爆AV内射—百度| 国产精品久久久99| 99久久精品久久久久久清纯| 久久天天躁狠狠躁夜夜网站| 男女久久久国产一区二区三区| 亚洲国产精品狼友中文久久久| 国内精品伊人久久久久影院对白 | 精品久久香蕉国产线看观看亚洲| 色欲久久久天天天综合网| 2021最新久久久视精品爱| 中文成人无码精品久久久不卡| 久久噜噜久久久精品66| 老司机午夜网站国内精品久久久久久久久| 久久777国产线看观看精品| 亚洲国产成人久久综合碰碰动漫3d| 久久亚洲AV成人出白浆无码国产 | 久久免费看黄a级毛片| 久久久久久精品无码人妻|