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

            concentrate on c/c++ related technology

            plan,refactor,daily-build, self-discipline,

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              37 Posts :: 1 Stories :: 12 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(9)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            // 摘自代碼大全2第九章
            創(chuàng)建類和子程序的步驟概述.
            1 開始
            2 創(chuàng)建類的總體設(shè)計(jì)
            3 創(chuàng)建類中的子程序
            4 復(fù)查并測(cè)試整個(gè)類
            5 完成
            其中3與4之間要進(jìn)行交互,這種交互主要是針對(duì)審查子程序進(jìn)行的,并且2與3之間也要進(jìn)行交互,這種交互主要針對(duì)子程序在類中的總體設(shè)計(jì).
            一個(gè)思想是:細(xì)化跟迭代,并且即使反饋直到類功能和子程序功能都清晰,再到5.
            創(chuàng)建一個(gè)類的步驟
            1)創(chuàng)建類的總體設(shè)計(jì):
            設(shè)計(jì)一個(gè)類的過程中包含一些特有的設(shè)計(jì)任務(wù)--定義類的特定職責(zé),定義類所要隱藏的秘密,以及精確地定義類的接口所代表的抽象概念,決定這個(gè)類是否要從其他類派生而來,以及是否允許其它類再?gòu)乃缮?指出這個(gè)類中關(guān)鍵的公用方法,標(biāo)識(shí)并設(shè)計(jì)出類所需用到的重要數(shù)據(jù)成員.
            2)創(chuàng)建類中的子程序
            在前述第一個(gè)步驟中標(biāo)識(shí)出類的主要子程序之后,還需要?jiǎng)?chuàng)建這些子程序.在編寫各個(gè)程序時(shí)通常還會(huì)引出更多的或重要,或次要的子程序,創(chuàng)建這些新加入的子程序的過程往往還會(huì)反過來波及類的總體設(shè)計(jì)
            3)復(fù)審并測(cè)試整個(gè)類
            通常情況下,子程序在創(chuàng)建的同時(shí)也經(jīng)過了測(cè)試,在整個(gè)類可以工作之后,應(yīng)該再對(duì)其整體進(jìn)行復(fù)查和測(cè)試,以便發(fā)現(xiàn)那些在子程序的獨(dú)立測(cè)試層次上無(wú)法測(cè)出的問題.
            在創(chuàng)建類的過程中,2),3)還是要求反復(fù)進(jìn)行的,直到類的總體設(shè)計(jì)是最優(yōu)的.
            創(chuàng)建子程序的步驟
            創(chuàng)建子程序的過程中涉及到的主要活動(dòng): 設(shè)計(jì)子程序,檢查設(shè)計(jì),編寫子程序的代碼,檢查代碼.
            1 開始
            2 設(shè)計(jì)子程序(主要借助于偽代碼)
            3 檢查設(shè)計(jì)(主要是檢查偽代碼)
            4 編寫子程序的代碼
            5 復(fù)審并測(cè)試代碼
            6 完成
            其中2與3是要進(jìn)行交互的,主要是保證偽代碼的質(zhì)量,4與5也是要進(jìn)行交互的,這樣主要保證子程序的質(zhì)量.
            偽代碼
            偽代碼的指導(dǎo)原則:
            1) 用類似英語(yǔ)的語(yǔ)句來精確描述特定的操作
            2) 避免使用目標(biāo)編程語(yǔ)言中的語(yǔ)法元素
            3) 在本意的層面上編寫代碼,用偽代碼去描述解決問題的方法的意圖,而不是去寫如何在目標(biāo)語(yǔ)言中實(shí)現(xiàn)這個(gè)方法.
            4) 在一個(gè)足夠低的層次上編寫代碼,以便可以近乎自動(dòng)地從它生成代碼.
            通過偽代碼編程過程創(chuàng)建子程序
            檢查先決條件
            在動(dòng)手去做子程序本身的任何工作之前,應(yīng)該先查看一下該子程序要做的工作是不是已經(jīng)定義好了,是不是能夠與整體設(shè)計(jì)相匹配.另外要結(jié)合項(xiàng)目的需求,檢查這個(gè)子程序是否真正必須的,至少是間接需要的.
            定義子程序要解決的問題
            陳述出該子程序?qū)⒁鉀Q的問題,敘述要足夠詳細(xì),以便能去創(chuàng)建這個(gè)子程序,如果高層的設(shè)計(jì)已經(jīng)足夠詳細(xì),那么這項(xiàng)工作可能已經(jīng)完成了,在這個(gè)高層的設(shè)計(jì)里至少應(yīng)該詳細(xì)說明下列信息.
            1) 這一子程序?qū)⒁[藏的信息
            2) 傳給這個(gè)子程序的各項(xiàng)輸入
            3) 從該子程序得到的輸出
            4) 在調(diào)用程序之前確保有關(guān)的前條件成立(輸入數(shù)據(jù)的取值位于特定范圍之中,有關(guān)的流已經(jīng)初始化,文件已經(jīng)打開或者關(guān)閉,緩沖區(qū)已經(jīng)填滿或者清空)
            5) 在子程序?qū)⒖刂茩?quán)交回調(diào)用方程序之前,確保其后條件的成立(如輸出數(shù)據(jù)位于特定范圍之內(nèi),流已經(jīng)初始化,文件已經(jīng)打開或者關(guān)閉,緩沖區(qū)已填滿或清空)
            其中4和5一般通過判斷前驅(qū)和后繼條件來進(jìn)行的。前者是保證調(diào)用的條件是否成立,而后者是保證程序的返回值是否是合法的。
            為子程序命名
            一般地子程序已經(jīng)有一個(gè)清晰的,無(wú)二義性的名字,如果在命名這個(gè)子程序的名字的時(shí)候,有點(diǎn)困難,那么就說明,對(duì)該子程序的設(shè)計(jì)不是很清楚,而要去改善設(shè)計(jì)了。
            決定如何測(cè)試子程序
            在編寫一個(gè)子程序的時(shí)候,要想一想怎么才能測(cè)試它。這在以后的C/C++測(cè)試中都可以部署單元測(cè)試工具Xunit.
            在標(biāo)準(zhǔn)庫(kù)中搜尋可用的功能
            想用提高代碼的質(zhì)量和生產(chǎn)率,有一個(gè)最重要的途徑就是重用好的代碼。
            考慮錯(cuò)誤處理
            考慮在子程序中可能出錯(cuò)的環(huán)節(jié),子程序可以用多種方式來處理錯(cuò)誤,應(yīng)該特別注意去選擇處理錯(cuò)誤的方式。
            考慮效率問題
            主要是兩個(gè)方面的考慮,一是效率,而另一方面是性能。
            研究算法和數(shù)據(jù)類型
            如果在可用的程序庫(kù)里沒有所需的功能,它也許會(huì)在某本算法書中介紹過,決定從頭開始編寫一段復(fù)雜的代碼之前,查一下算法書看看有什么可用的內(nèi)容。如果采用一個(gè)已有明確定義的算法,則要保證這個(gè)算法正確地轉(zhuǎn)換為你所用的編程語(yǔ)言。
            編寫偽代碼
            前面的那些步驟主要是為確定一個(gè)思路,這在真正編寫程序的時(shí)候是很有幫助的,在完成前面的準(zhǔn)備工作以后,就可以開始用高層次的偽代碼來寫程序。
            一般是從寫子程序的注釋開始進(jìn)行編制,主要是說明子程序的功能和目的。
            考慮數(shù)據(jù)
            在整個(gè)過程中的幾個(gè)不同環(huán)節(jié)對(duì)子程序所用的數(shù)據(jù)進(jìn)行設(shè)計(jì)。
            檢查偽代碼
            在寫完偽代碼并設(shè)計(jì)完數(shù)據(jù)之后,花上幾分鐘時(shí)間復(fù)雜你寫的偽代碼,然后拋揩這些代碼,想想你該如何向別人解釋這些代碼。
            在偽代碼中試驗(yàn)一些想法,留下最好的想法
            在你開始編寫代碼之前,應(yīng)盡可能用偽代碼去嘗試更多的想法。
            編寫子程序的代碼
            1 以偽代碼開始
            2 寫出子程序的聲明
            3 編寫第一條和最后一條語(yǔ)句,然后將偽代碼轉(zhuǎn)換為高層次的注釋。
            4 每條注釋下面填充代碼
            5 檢查代碼
            6 收尾工作
            7 完成
            其中3,4,5可以按照需求進(jìn)行重復(fù)。
            寫出子程序的聲明
            首先要寫出子程序的接口聲明,即C++中的函數(shù)聲明
            把偽代碼轉(zhuǎn)變?yōu)楦邔哟蔚淖⑨?br>接下來,把第一條和最后一條語(yǔ)句寫出來,在C++中也就是"{"和"}".然后將偽代碼轉(zhuǎn)變成注釋.
            在每條注釋下面填充代碼
            在偽代碼注釋中的每一句話下面填寫代碼。
            檢查代碼是否需要進(jìn)一步分解
            方法1:把這段注釋下面的代碼重構(gòu)(refactor)成一個(gè)新的子程序。
            方法2:遞歸地應(yīng)用偽代碼編程過程。
            檢查代碼
            1) 在腦海里檢查程序中的錯(cuò)誤。
            理解每行代碼所起的作用,理解為什么需要這行代碼,沒有什么東西會(huì)僅僅因?yàn)樗瓷先タ尚芯褪钦_的。
            編譯子程序
            完成檢查之后,就可以編譯這個(gè)程序了。
            最大地發(fā)揮編譯子程序所產(chǎn)生的指導(dǎo)建議
            1)把編譯器的警告級(jí)別調(diào)到最高,通過讓編譯器來檢測(cè)錯(cuò)誤,你可以很容易地查出大量細(xì)微的錯(cuò)誤。
            2)使用驗(yàn)證工具,可以通過使用類似lint這樣的工具來對(duì)C語(yǔ)言這類語(yǔ)言的編譯器所做的檢查結(jié)果進(jìn)行補(bǔ)充檢查。
            3)消除產(chǎn)生錯(cuò)誤消息和警告的所有根源。
            在調(diào)試器中逐步執(zhí)行代碼
            程序編譯通過了之后,要在調(diào)試器中逐行執(zhí)行,以確保每行代碼都在按照你所期望的方式執(zhí)行。
            測(cè)試代碼
            使用你在開發(fā)該子程序期間計(jì)劃寫的或者已寫成的測(cè)試用例來測(cè)試代碼。你可能需要開發(fā)一些腳手架來支持你的測(cè)試用例
            消除程序中的錯(cuò)誤
            一旦檢測(cè)到錯(cuò)誤,就一定要把它除掉。
            收尾工作
            檢查子程序的接口
            確定所有的輸入,輸出數(shù)據(jù)都參與了計(jì)算,并且所有的參數(shù)也都用到了。
            檢查整體的設(shè)計(jì)質(zhì)量
            檢查子程序中的變量
            檢查子程序的語(yǔ)句和邏輯
            檢查子程序的布局
            檢查子程序的文檔
            除去冗余的注釋。
            小結(jié):
            之前一直在寫程序,但是發(fā)現(xiàn)時(shí)不時(shí)思路很亂,也沒有有層次地,有系統(tǒng)地去思考這些類和子程序的設(shè)計(jì),只是去實(shí)現(xiàn)一個(gè)功能,并且能夠達(dá)到所要的目的就可以了,后來發(fā)現(xiàn)經(jīng)常出問題,很常見的就是考慮不周全,在編制代碼以后,才開始反悔,后悔當(dāng)初的設(shè)計(jì),然后對(duì)程序產(chǎn)生了消極的情緒,讓我感覺不爽,看了代碼大全,發(fā)現(xiàn)提供了可行的方法.而且思路比以前清晰多了,感覺這個(gè)方法很有效,所以記錄在這里.


             

            posted on 2008-03-01 12:09 jolley 閱讀(1002) 評(píng)論(0)  編輯 收藏 引用

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


            亚洲?V乱码久久精品蜜桃| 成人久久精品一区二区三区| 久久免费精品一区二区| 国产午夜精品久久久久九九电影| 日韩AV毛片精品久久久| 亚洲中文字幕久久精品无码APP| 精品久久久久香蕉网| 久久夜色撩人精品国产| 久久精品国产亚洲av麻豆色欲| 日本免费久久久久久久网站| 欧美日韩久久中文字幕| 久久99亚洲综合精品首页| 久久99精品国产麻豆宅宅| 91亚洲国产成人久久精品| 精品久久久久久中文字幕大豆网| 久久久久国产精品| 无码人妻久久一区二区三区免费 | 久久国产亚洲精品| 国产一区二区精品久久| 久久人人爽人人爽人人片AV麻烦| 色综合久久中文色婷婷| 久久精品国产网红主播| 久久亚洲视频| 97精品伊人久久久大香线蕉| 无码久久精品国产亚洲Av影片 | 久久亚洲精品中文字幕| 亚洲国产高清精品线久久| 久久免费视频观看| 狠狠88综合久久久久综合网 | 久久久久人妻一区二区三区| 狠狠色综合网站久久久久久久 | 国产精品成人99久久久久 | 亚洲精品高清国产一久久| 色欲av伊人久久大香线蕉影院| 中文字幕精品久久| 天天做夜夜做久久做狠狠| 人妻中文久久久久| 中文字幕精品无码久久久久久3D日动漫| 久久本道久久综合伊人| 色8激情欧美成人久久综合电| 久久亚洲高清综合|