




已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
華東交通大學(xué)畢業(yè)設(shè)計(jì)(論文)題目:數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)-線性表和樹(shù)的算法演示 Data structure algorithms demonstration system -the algorithms of Linear tables and tree demonstration學(xué) 院: * 專(zhuān) 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí): 計(jì)算機(jī) 學(xué)生姓名: 學(xué) 號(hào): 指導(dǎo)教師: 完成日期: 畢業(yè)設(shè)計(jì)(論文)誠(chéng)信聲明本人鄭重聲明:所呈交的畢業(yè)設(shè)計(jì)(論文)是我個(gè)人在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。就我所知,除了文中特別加以標(biāo)注和致謝的地方外,論文中不包含其他人已經(jīng)發(fā)表和撰寫(xiě)的研究成果,也不包含為獲得華東交通大學(xué)或其他教育機(jī)構(gòu)的學(xué)位或證書(shū)所使用過(guò)的材料。如在文中涉及抄襲或剽竊行為,本人愿承擔(dān)由此而造成的一切后果及責(zé)任。本人簽名 導(dǎo)師簽名 2006年 6 月11 日華東交通大學(xué)畢業(yè)設(shè)計(jì)(論文)任務(wù)書(shū)姓名學(xué)號(hào)畢業(yè)屆別2006專(zhuān)業(yè)計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)設(shè)計(jì)(論文)題目數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)指導(dǎo)教師學(xué) 歷職 稱(chēng)具體要求:a. 運(yùn)用C+ builderder軟件環(huán)境下,開(kāi)發(fā)一個(gè)數(shù)據(jù)結(jié)構(gòu)的演示系統(tǒng);該演示系統(tǒng)可以通過(guò)操作把數(shù)據(jù)結(jié)構(gòu)中的線性表、堆棧和隊(duì)列、樹(shù)、圖的算法表示出來(lái),并附注了算法說(shuō)明,在幫助中把演示模塊的具體操作步驟進(jìn)行介紹。b. 開(kāi)發(fā)平臺(tái)的選擇:使用Windows XP系統(tǒng)開(kāi)發(fā)操作系統(tǒng),C+ builderder開(kāi)發(fā)環(huán)境。系統(tǒng)功能要求:a 主界面模塊 主界面由一個(gè)主菜單和6個(gè)按紐組成,在主菜單中可以進(jìn)行退出、演示數(shù)據(jù)結(jié)構(gòu)的算法、查看各種結(jié)構(gòu)的說(shuō)明、了解算法演示的具體步驟;按紐是對(duì)這幾種結(jié)構(gòu)說(shuō)明的操作,還可以對(duì)自己在看演示的心得寫(xiě)入文本,并保存。b. 演示算法模塊子程序主要是把線性表、堆棧和隊(duì)列、樹(shù)、圖四種數(shù)據(jù)結(jié)構(gòu)的算法演示出來(lái),可以更直觀生動(dòng)地讓大家了解這四中結(jié)構(gòu)。c. 算法說(shuō)明模塊 該模塊是把這四種數(shù)據(jù)結(jié)構(gòu)的概念,和結(jié)構(gòu)相關(guān)的一切知識(shí)要點(diǎn)顯示在軟件當(dāng)中,讓大家在觀看數(shù)據(jù)結(jié)構(gòu)演示的同時(shí),更清楚地了解結(jié)構(gòu)的概念和知識(shí)點(diǎn)。d. 幫助模塊由于在演示的過(guò)程中,操作者要對(duì)軟件進(jìn)行一些操作,由于初次操作大家都有些陌生,所以在幫助模塊中,把在演示過(guò)程中各個(gè)演示模塊的操作具體步驟在這里做了系統(tǒng)的介紹。進(jìn)度安排:3.15 3.28 需求分析3.29 4.5 資料準(zhǔn)備、配置開(kāi)發(fā)環(huán)境4.6 4.12 系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)4.13 4.19 系統(tǒng)詳細(xì)設(shè)計(jì)4.20 5.14 系統(tǒng)編碼與設(shè)計(jì)5.15 5.20 系統(tǒng)測(cè)試與修改維護(hù)5.21 5.27 撰寫(xiě)論文5.28 6.3 論文修改及打印裝訂 指導(dǎo)教師簽字: 年 月 日教研室意見(jiàn): 教研室主任簽字: 年 月 日題目發(fā)出日期2005.1.27設(shè)計(jì)(論文)起止時(shí)間2005.2.21-2005.6.26附注:華東交通大學(xué)畢業(yè)設(shè)計(jì)(論文)開(kāi)題報(bào)告書(shū)課題名稱(chēng)數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)課題來(lái)源學(xué)校提供課題類(lèi)型CX導(dǎo) 師學(xué)生姓名學(xué) 號(hào)專(zhuān) 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)開(kāi)題報(bào)告內(nèi)容: 設(shè)計(jì)計(jì)劃:首先復(fù)習(xí)C、C+語(yǔ)言,并自學(xué)C+Builder6.0;其次,熟悉數(shù)據(jù)結(jié)構(gòu)中的算法;最后,利用掌握的知識(shí)和語(yǔ)言編寫(xiě)源代碼,測(cè)試完成的系統(tǒng),優(yōu)化代碼使算法最優(yōu)。需求分析:數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)是基于C、C+語(yǔ)言,在C+builder軟件環(huán)境下,開(kāi)發(fā)出來(lái)的一種算法演示系統(tǒng),該系統(tǒng)可以用于展示數(shù)據(jù)結(jié)構(gòu)課程中的相關(guān)算法,該系統(tǒng)能為學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的同學(xué)理解其中的算法,“數(shù)據(jù)結(jié)構(gòu)”是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),它不僅是計(jì)算機(jī)學(xué)科的核心課程,而且已成為其他理工專(zhuān)業(yè)的熱門(mén)選修課程?!皵?shù)據(jù)結(jié)構(gòu)”是一門(mén)專(zhuān)業(yè)技術(shù)基礎(chǔ)課,他能幫助大家學(xué)會(huì)分析研究計(jì)算機(jī)加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便為應(yīng)用涉及的數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)及其相應(yīng)的算法,并初步學(xué)會(huì)算法的時(shí)間分析和空間分析的技術(shù),但數(shù)據(jù)結(jié)構(gòu)中的一些算法(線性表、棧和隊(duì)列、串等)在理解上會(huì)有些困難,數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)正是解決這個(gè)困難的一種有效方法,他給人更直觀的理解。方法及預(yù)期目的:運(yùn)用C+ builderder軟件環(huán)境下,開(kāi)發(fā)一個(gè)數(shù)據(jù)結(jié)構(gòu)的演示系統(tǒng)。該演示系統(tǒng)可以通過(guò)操作把數(shù)據(jù)結(jié)構(gòu)中的線性表、堆棧和隊(duì)列、樹(shù)、圖的算法表示出來(lái),并附注了算法說(shuō)明,在幫助中說(shuō)明了具體的操作說(shuō)明。 指導(dǎo)教師簽名: 日期:課題類(lèi)型:(1)A工程設(shè)計(jì);B技術(shù)開(kāi)發(fā);C軟件工程;D理論研究; (2)X真實(shí)課題;Y模擬課題;Z虛擬課題 (1)、(2)均要填,如AY、BX等。華東交通大學(xué)畢業(yè)設(shè)計(jì)(論文)評(píng)閱書(shū)(1)姓名學(xué)號(hào)專(zhuān)業(yè)計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)設(shè)計(jì)(論文)題目指導(dǎo)教師評(píng)語(yǔ):得分指導(dǎo)教師簽字:年 月 日評(píng)閱人評(píng)語(yǔ):得分評(píng)閱人簽字:年 月 日等級(jí)華東交通大學(xué)畢業(yè)設(shè)計(jì)(論文)評(píng)閱書(shū)(2)姓名學(xué)號(hào)專(zhuān)業(yè)畢業(yè)設(shè)計(jì)(論文)題目答辯小組評(píng)語(yǔ):等級(jí) 組長(zhǎng)簽字:年 月 日答辯委員會(huì)綜合評(píng)語(yǔ): 等級(jí) 答辯委員會(huì)主任簽字:年 月 日(學(xué)院公章)注:答辯小組根據(jù)評(píng)閱人的評(píng)閱簽署意見(jiàn)、初步評(píng)定成績(jī),交答辯委員會(huì)審定,蓋學(xué)院公章?!暗燃?jí)”用優(yōu)、良、中、及、不及五級(jí)制(可按學(xué)院制定的畢業(yè)設(shè)計(jì)(論文)成績(jī)?cè)u(píng)定辦法評(píng)定最后成績(jī))。華東交通大學(xué)畢業(yè)設(shè)計(jì)(論文)答辯記錄姓名學(xué)號(hào)畢業(yè)屆別2005專(zhuān)業(yè)計(jì)算機(jī)科學(xué)與技術(shù)題目答辯時(shí)間答辯組成員(簽字):答辯記錄: 記錄人(簽字): 年 月 日 答辯小組組長(zhǎng)(簽字):年 月 日附注:摘要數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)科學(xué)中是一門(mén)綜合性的專(zhuān)業(yè)基礎(chǔ)課,它不僅設(shè)計(jì)到計(jì)算機(jī)硬件(特別是編碼理論、存儲(chǔ)裝置和存取方法等)的研究范圍,而且和計(jì)算機(jī)軟件的研究有著更密切的關(guān)系,無(wú)論是編譯程序還是操作系統(tǒng),都涉及到數(shù)據(jù)元素在存儲(chǔ)器中的分配問(wèn)題。在研究信息檢索時(shí)也必須考慮如何組織數(shù)據(jù),以便查找和存取數(shù)據(jù)元素更方便。因此,它是介于數(shù)學(xué)、計(jì)算機(jī)硬件和計(jì)算機(jī)軟件三者之間的一門(mén)核心課程。在計(jì)算機(jī)科學(xué)中,數(shù)據(jù)結(jié)構(gòu)不僅是一般程序設(shè)計(jì)的基礎(chǔ),而且是設(shè)計(jì)和實(shí)現(xiàn)編譯程序、操作系統(tǒng)、數(shù)據(jù)庫(kù)系統(tǒng)及其他系統(tǒng)程序和大型應(yīng)用程序的重要基礎(chǔ)。本文充分利用C+ BUILDER的RAD優(yōu)點(diǎn),設(shè)計(jì)并建立了一套數(shù)據(jù)結(jié)構(gòu)算法的演示系統(tǒng)。講解了線性表、堆棧和隊(duì)列、樹(shù)、圖等數(shù)據(jù)結(jié)構(gòu)的概念,該系統(tǒng)具有操作便捷、形象生動(dòng)等特點(diǎn),對(duì)于深化對(duì)數(shù)據(jù)結(jié)構(gòu)算法的理解,提高計(jì)算機(jī)程序設(shè)計(jì)水平具有很好的促進(jìn)作用,而且具有一定的實(shí)用價(jià)值,能有效地改善數(shù)據(jù)結(jié)構(gòu)算法教學(xué)的質(zhì)量和效率,對(duì)于其他類(lèi)似系統(tǒng)也有很大的借鑒意義。關(guān)鍵字:數(shù)據(jù)結(jié)構(gòu);算法;C+ BUILDERAbstractData structure algorithms demonstration systemData structures,is a comprehensive professional foundation courses in computer science, not only to studied computer hardware design (especially coding theory, storage devices and visit methods), and researched computer software in closer relationship, whether translation or operating system, data elements are involved in the allocation of memory. In information retrieval research, data must also consider how to organize in order to identify the data elements and visit more convenient. Therefore, it is a door core curriculum between mathematics, computer hardware and computer software. In computer science, data structure is not only the basis for general programming, but also the design and realization of heavy editing procedures, operating systems, database systems and other systems procedures and the essential foundation for large-scale applications.The full use of the RAD advantage C+ builder design and build a data structure algorithms demonstration system. On the linear tables, Duizhan and Britain, trees, maps, and other data structure concept, the system has operated convenient, vivid image characteristics of the data structure to deepen the understanding of algorithms to improve the level of computer programming in good catalyst, but with some practical value to effectively improve data structure algorithms teaching quality and efficiency For other similar systems.Key words: Data structure;Algorithms;C+ builder目 錄1 緒論12 需求分析22.1 解決問(wèn)題22.2 具備功能23 系統(tǒng)設(shè)計(jì)33.1 開(kāi)發(fā)及使用環(huán)境33.2 系統(tǒng)結(jié)構(gòu)103.3 詳細(xì)設(shè)計(jì)124 系統(tǒng)操作284.1 主菜單操作284.2 線性表操作284.3 樹(shù)操作294.4 算法說(shuō)明操作29結(jié)束語(yǔ)30謝 辭31參考文獻(xiàn)32附錄33附錄A 外文翻譯原文部分33附錄B 外文翻譯譯文部分39附錄C 源代碼45 1 緒論數(shù)據(jù)結(jié)構(gòu)是在整個(gè)計(jì)算機(jī)科學(xué)與技術(shù)領(lǐng)域上廣泛被使用的術(shù)語(yǔ)。它用來(lái)反映一個(gè)數(shù)據(jù)的內(nèi)部構(gòu)成,即一個(gè)數(shù)據(jù)由那些成分?jǐn)?shù)據(jù)構(gòu)成,以什么方式構(gòu)成,呈什么結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)有邏輯上的數(shù)據(jù)結(jié)構(gòu)和物理上的數(shù)據(jù)結(jié)構(gòu)之分。邏輯上的數(shù)據(jù)結(jié)構(gòu)反映成分?jǐn)?shù)據(jù)之間的邏輯關(guān)系,而物理上的數(shù)據(jù)結(jié)構(gòu)反映成分?jǐn)?shù)據(jù)在計(jì)算機(jī)內(nèi)部的存儲(chǔ)安排。數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)存在的形式。 數(shù)據(jù)結(jié)構(gòu)是信息的一種組織方式,其目的是為了提高算法的效率,它通常與一組算法的集合相對(duì)應(yīng),通過(guò)這組算法集合可以對(duì)數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)進(jìn)行某種操作。數(shù)據(jù)結(jié)構(gòu)課程的主要目的是介紹一些常用的數(shù)據(jù)結(jié)構(gòu),闡明數(shù)據(jù)結(jié)構(gòu)內(nèi)在的邏輯關(guān)系,討論它們?cè)谟?jì)算機(jī)中的存儲(chǔ)表示,并結(jié)合各種數(shù)據(jù)結(jié)構(gòu),討論對(duì)它們實(shí)行的各種運(yùn)算的實(shí)現(xiàn)算法。很多算法實(shí)際上是對(duì)某種數(shù)據(jù)結(jié)構(gòu)施行的一種變換,研究算法也就是研究在實(shí)施變換過(guò)程中數(shù)據(jù)結(jié)構(gòu)的動(dòng)態(tài)性質(zhì)。數(shù)據(jù)結(jié)構(gòu),作為計(jì)算機(jī)學(xué)科的基礎(chǔ)性專(zhuān)業(yè)課程,其在計(jì)算機(jī)科學(xué)中的及其重要,課程學(xué)習(xí)的好壞,直接關(guān)系到學(xué)員后期計(jì)算機(jī)水平的高低。而這門(mén)課程一直因?yàn)檫^(guò)于抽象,難以理解,而讓人望而止步。如果能夠把這門(mén)抽象的課程變得具體而生動(dòng),必將提高學(xué)習(xí)人員興趣,增加其積極性和主動(dòng)性,也有利于人員的對(duì)此課程的學(xué)習(xí)。基于這些目的,我們開(kāi)發(fā)了這個(gè)數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng),數(shù)據(jù)結(jié)構(gòu)是我們所做的系統(tǒng)的主要理論基礎(chǔ),我們完成了線性表、堆棧、隊(duì)列、樹(shù)、圖幾個(gè)主要結(jié)構(gòu),在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)這門(mén)課程的時(shí)候,我們了解了這些結(jié)構(gòu)的算法,當(dāng)時(shí)也做過(guò)一些相關(guān)的程序,在此基礎(chǔ)之上,我運(yùn)用c+ builder開(kāi)發(fā)工具,把這些算法演示出來(lái)。數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)可以演示線性表、堆棧、隊(duì)列、樹(shù)、圖等幾個(gè)基礎(chǔ)結(jié)構(gòu)的算法,輔助一些算法說(shuō)明,讓使用者更好地掌握算法,在幫助中把演示的具體過(guò)程和操作做詳細(xì)的介紹。 該系統(tǒng)具有操作簡(jiǎn)單、形象生動(dòng),能很好地改善人員對(duì)數(shù)據(jù)結(jié)構(gòu)課程的學(xué)習(xí)理解,從很大程度上提高人員的學(xué)習(xí)質(zhì)量和效率。2 需求分析2.1 解決問(wèn)題做為一個(gè)數(shù)據(jù)結(jié)構(gòu)演示系統(tǒng),首先我們確定要演示的內(nèi)容,在本系統(tǒng)中,我們對(duì)線性表、堆棧和隊(duì)列、樹(shù)、圖幾個(gè)主要數(shù)據(jù)結(jié)構(gòu)做了講解;接著,對(duì)四種算法的說(shuō)明也是必不可少的,這樣配合演示,可以達(dá)到更好地效果;最后,作為我們?cè)O(shè)計(jì)的演示過(guò)程,使用者對(duì)操作不是太了解,我們有必要做個(gè)詳細(xì)的操作過(guò)程,讓使用者更好地操作系統(tǒng)。2.2 具備功能系統(tǒng)由數(shù)據(jù)結(jié)構(gòu)、操作、幫助、程序四個(gè)部分組成?,F(xiàn)分述如下:數(shù)據(jù)結(jié)構(gòu)由線性表、堆棧和隊(duì)列、樹(shù)、圖等四個(gè)部分組成,分別對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)的四個(gè)部分。線性表又分為鏈表概念、鏈表模型、鏈表操作、雙向鏈表四個(gè)部分,堆棧和隊(duì)列分為基本堆棧、基本隊(duì)列、循環(huán)隊(duì)列三個(gè)部分,樹(shù)分為數(shù)據(jù)二叉樹(shù)、結(jié)構(gòu)二叉樹(shù)、類(lèi)二叉樹(shù),圖分為圖表示、圖搜索、最短路徑。操作由線性表說(shuō)明、堆棧說(shuō)明、隊(duì)列說(shuō)明、樹(shù)說(shuō)明、圖說(shuō)明組成,對(duì)各數(shù)據(jù)結(jié)構(gòu)的算法說(shuō)明。幫助由關(guān)于和幫助組成,是本系統(tǒng)的一些說(shuō)明和對(duì)演示過(guò)程的操作詳細(xì)說(shuō)明。程序部分由退出組成,完成系統(tǒng)的終止。3 系統(tǒng)設(shè)計(jì)3.1 開(kāi)發(fā)及使用環(huán)境 C+ BUILDER3.1.1 C+ BUILDER介紹提起B(yǎng)orland C/C+,相信業(yè)界的許多朋友都會(huì)感慨萬(wàn)千,因?yàn)樗鴰ьI(lǐng)很多人跨進(jìn)了Windows開(kāi)發(fā)的大門(mén)。和美國(guó)Inprise公司(原Borland公司)其他面向企業(yè)分布式系統(tǒng)的開(kāi)發(fā)工具(如Delphi 、Jbuilder )相比,新近推出的最新版本C+ RAD(快速應(yīng)用開(kāi)發(fā))工具Borland C+ Builder 4,無(wú)論是在開(kāi)發(fā)環(huán)境、分布式應(yīng)用系統(tǒng)開(kāi)發(fā)、支持已有C+資源方面,還是在快速開(kāi)發(fā)Web及Internet應(yīng)用程序、數(shù)據(jù)庫(kù)處理等方面,都表現(xiàn)出了其獨(dú)特的一面。(1)全新的集成開(kāi)發(fā)環(huán)境C+ Builder保留了使用Framework(如:OWL、MFC)的開(kāi)發(fā)方式,融合了Visual Basic、Delphi等開(kāi)發(fā)工具的面向組件的開(kāi)發(fā)方式。C+ Builder的集成開(kāi)發(fā)環(huán)境提供了120多個(gè)VCL組件,使開(kāi)發(fā)人員不需太多編碼,就能夠?qū)崿F(xiàn)很多復(fù)雜的功能,體現(xiàn)了軟件的“重用性”原則。C+ Builder的用戶界面也非常友好,易于使用,并且采用了停駐式(docking)工具條,可以自由組合集成開(kāi)發(fā)環(huán)境窗口和工具條的排放方式。在編碼過(guò)程中,還可以使用CodeExplorer技術(shù)對(duì)源代碼進(jìn)行管理。CodeCompletion技術(shù)使編譯器能夠自動(dòng)列出VCL組件的可用屬性和方法供程序員選擇,而不必手工輸入冗長(zhǎng)的代碼。C+ Builder的集成開(kāi)發(fā)環(huán)境如圖1所示。(2)簡(jiǎn)化了分布式應(yīng)用系統(tǒng)的開(kāi)發(fā)企業(yè)向多層分布式系統(tǒng)跨越已經(jīng)成為了一種必然趨勢(shì),目前分布式運(yùn)算標(biāo)準(zhǔn)主要有Microsoft 的DCOM和OMG的CORBA,是否支持這兩種標(biāo)準(zhǔn)決定了開(kāi)發(fā)工具的適用領(lǐng)域和范圍。C+ Builder可以說(shuō)是目前唯一同時(shí)支持CORBA和COM的C+集成開(kāi)發(fā)環(huán)境,因此既適用于基于ORB的分布式開(kāi)發(fā),又適用于基于COM的Windows開(kāi)發(fā)。C+ Builder內(nèi)置了VisiBroker3。3,它是目前全球分發(fā)數(shù)量最多的CORBA ORB,并且包含了Event Service和NamingService等標(biāo)準(zhǔn)CORBA服務(wù),從而為開(kāi)發(fā)CORBA應(yīng)用提供了可能。C+ Builder 將CORBA IDL 編譯器集成在其開(kāi)發(fā)環(huán)境中,通過(guò)配合各種向?qū)?Wizard),可以快速生成CORBA Client和Server的源程序代碼框架,這對(duì)于開(kāi)發(fā)CORBA產(chǎn)品的朋友來(lái)說(shuō),確實(shí)是非常方便的。圖2顯示了C+ Builder中建立CORBA對(duì)象的各種向?qū)?。在Microsoft COM方面,C+ Builder 同樣提供了各種向?qū)?,可以一步生成COM標(biāo)準(zhǔn)組件、OLE Automation組件及ActiveX組件,您可以在Windows環(huán)境下大顯身手。 C+ Builder 提供的MIDAS2同時(shí)支持CORBAIIOP、DCOM、DCE RPC以及TCP/IP等多種連接方式,適用于分布式系統(tǒng)的開(kāi)發(fā)。比如,非Windows環(huán)境上的Java應(yīng)用程序,可以通過(guò)CORBA IIOP使用C+ Builder開(kāi)發(fā)出來(lái)的應(yīng)用程序服務(wù)器。從而使用戶可以在原有系統(tǒng)基礎(chǔ)之上構(gòu)建跨平臺(tái)、跨程序語(yǔ)言的分布式應(yīng)用系統(tǒng)。(3)對(duì)已有C+資源的支持用戶可能會(huì)關(guān)心,對(duì)于過(guò)去開(kāi)發(fā)的基于Borland C+ OWL和Microsoft MFC的程序,C+ Builder是否能夠兼容?回答是肯定的。C+ Builder的另一特性就是提供了MFC4。2版的函數(shù)庫(kù),強(qiáng)化了對(duì)Microsoft Visual C+源代碼的兼容性,可以直接編譯MSDN與各種SDK中的范例程序。通過(guò)MFC向?qū)В€可以生成MFC的代碼框架。除此之外,C+ Builder能夠編譯原有的BorlandC+ OWL程序碼,因此就不必?fù)?dān)心以前的工作白做了!C+ Builder中提供了符合ANSI/ISO標(biāo)準(zhǔn)的C+編輯器,還能夠開(kāi)發(fā)可移植于非Windows平臺(tái)的C+程序。(4)快速開(kāi)發(fā)Web及Internet應(yīng)用程序目前,基于Internet的開(kāi)發(fā)已經(jīng)成為一種時(shí)尚。C+ Builder在開(kāi)發(fā)Web及Internet應(yīng)用方面的功能也非常強(qiáng)大。C+ Builder提供了21個(gè)Internet通信協(xié)議組件,用于Internet應(yīng)用程序的開(kāi)發(fā)。開(kāi)發(fā)人員可以建立“零配置”、基于Web瀏覽器的“瘦客戶”應(yīng)用程序。C+ Builder同時(shí)支持CGI、WINCGI、ISAPI及NSAPI等標(biāo)準(zhǔn),使開(kāi)發(fā)人員利用現(xiàn)有的開(kāi)發(fā)技術(shù)就可以用可視化的方式開(kāi)發(fā)跨平臺(tái)的Web應(yīng)用程序。運(yùn)用ActiveForm/ATL及WebDeploy技術(shù),還可以實(shí)現(xiàn)ActiveX組件的Web分發(fā)。(5)強(qiáng)大的數(shù)據(jù)庫(kù)處理功能C+ Builder提供了對(duì)Oracle8、Microsoft SQLServer 7、Informix 9、Sybase、IBM DB 2 UniversalServer、InterBase 5。5等大型數(shù)據(jù)庫(kù)的高速驅(qū)動(dòng)程序,并支持Oracle8的對(duì)象關(guān)聯(lián)延伸功能(如圖3所示),如Abstract Data Type、Nested Tables、Variable LengthArrays、Object Pointers(REFs)及External FileReference等。同時(shí)C+ Builder還保留了對(duì)MicrosoftAccess 97、FoxPro、Visual dBASE及Paradox等本地?cái)?shù)據(jù)庫(kù)的處理能力。因此,無(wú)論是大型的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā),還是小型的數(shù)據(jù)庫(kù)管理系統(tǒng),C+ Builder都有其用武之地。C+ Builder還提供了MTS 組件向?qū)?,用于快速生成支持Microsoft Transaction Server的COM組件。BDEResource Dispenser使用戶可以在MTS中使用BDE存取數(shù)據(jù)庫(kù),保證了MTS對(duì)數(shù)據(jù)庫(kù)的兩階段提交(Two PhaseCommit)及資源管理的能力。(6)強(qiáng)大的調(diào)試功能C+ Builder強(qiáng)化了原有的Module View、EventLog View及Inspect Local Variable等調(diào)試窗口的功能,并在Windows NT環(huán)境中提供多線程調(diào)試的新功能,使用戶可以在某一特定過(guò)程中跟蹤程序代碼。C+ Builder針對(duì)多層分布式開(kāi)發(fā)環(huán)境提供了遠(yuǎn)程調(diào)試能力,開(kāi)發(fā)人員可以通過(guò)網(wǎng)絡(luò)直接對(duì)遠(yuǎn)端的應(yīng)用程序服務(wù)器進(jìn)行調(diào)試,從而簡(jiǎn)化了多層應(yīng)用系統(tǒng)的開(kāi)發(fā)和維護(hù)工作。(7)其他特點(diǎn)C+ Builder還有很多新增的功能,如:針對(duì)Windows 98提供了PageScroller、MonthCalendar等Windows 98格式的新組件,并支持Windows98的多重屏幕顯示功能及Microsoft Office97格式的選擇選單和停駐式(docking)工具條。對(duì)界面的處理上,可以控制窗口的最大/最小尺寸以及窗口尺寸變動(dòng)時(shí)其中組件的相對(duì)位置和比例,等等。總之,C+ Builder 的強(qiáng)大功能并不是通過(guò)筆者有限的介紹所能夠涵蓋的,在C+海洋里遨游的朋友不妨親自嘗試一下C+ Builder,體驗(yàn)一下它的靈活與強(qiáng)大,相信您定會(huì)“戀戀不舍”的。3.1.2 C+ BUILDER與Visual C+對(duì)比首先,從它們的應(yīng)用程序框架(Application Frame,有時(shí)也稱(chēng)為對(duì)象框架)進(jìn)行比較。Visual C+采用的框架是MFC。MFC不僅僅是人們通常理解的一個(gè)類(lèi)庫(kù)。(同樣,Del phi和C+Builder使用的VCL的概念也不僅僅是一個(gè)控件庫(kù)。)你如果選擇了MFC,也就選擇了一種程序結(jié)構(gòu),一種編程風(fēng)格。MFC早在Windows 3.x的時(shí)代就出現(xiàn)了,那時(shí)的Visual C+還是16位的。經(jīng)過(guò)這些年的不斷補(bǔ)充和完善,MFC已經(jīng)十分成熟。但由于原型出現(xiàn)得比較早,MFC相比于VCL落后了一個(gè)時(shí)代。盡管微軟對(duì)MFC的更新沒(méi)有停止,我也經(jīng)常讀到持只要Windows不過(guò)時(shí),MFC就不會(huì)過(guò)時(shí)之類(lèi)觀點(diǎn)的文章,但就象Inprise(原Borland)的OWL框架的淡出一樣,MFC的淡出也是早晚的事。如果MFC青春永駐,微軟的開(kāi)發(fā)人員也不會(huì)私自開(kāi)發(fā)出基于ATL的WTL呀。當(dāng)然,WTL的地位不能和MFC比,它并不是微軟官方支持的框架,封裝的功能也相當(dāng)有限。但至少也反襯出了MFC存在的不足。 我以為,最能體現(xiàn)一個(gè)應(yīng)用程序框架的先進(jìn)性的是它的委托模型,即對(duì)Windows消息的封裝機(jī)制。(對(duì)Windows API的封裝就不用說(shuō)了吧。大同小異,也沒(méi)什么技術(shù)含量。 如果高興,你也可以自己寫(xiě)一個(gè)類(lèi)庫(kù)來(lái)封裝。但對(duì)Windows消息驅(qū)動(dòng)機(jī)制的封裝就不是那么容易的了。)最自然的封裝方式是采用虛成員函數(shù)。如果要響應(yīng)某個(gè)消息就重載相應(yīng)的虛函數(shù)。但出乎我的意料,MFC采用的是古老的宏定義方法。用宏定義方法的好處是省去了虛函數(shù)VTable的系統(tǒng)開(kāi)銷(xiāo)。(由于Windows的消息種類(lèi)很多,開(kāi)銷(xiāo)不算太小。)不過(guò)帶來(lái)的缺點(diǎn)就是映射不太直觀。好在較新版本VC帶的ClassWizard可以自動(dòng)生成消息映射代碼,使用起來(lái)還是比較方便的。但和VCL的委托模型相比,MFC的映射方法就顯得太落后了。而C+Builder對(duì)C+語(yǔ)言進(jìn)行了擴(kuò)展,以便引入組件、事件處理、屬性等新特性。由于功夫做在編譯器級(jí),生成的源代碼就顯得十分簡(jiǎn)潔。但是由于擴(kuò)展的非標(biāo)準(zhǔn)特性,使用VCL的C+Builder的源代碼無(wú)法被其它編譯器編譯。而MFC的功夫做在源代碼級(jí),雖然消息映射代碼較為復(fù)雜且不直觀,但兼容性非常好。只要你有MFC庫(kù)的源代碼(隨VC企業(yè)版的光盤(pán)提供),你的MFC程序理論上用任何符合ANSI標(biāo)準(zhǔn)的編譯器均可編譯通過(guò)。C+Builder 3以上版本可以原封不動(dòng)直接編譯Visual C+程序,很多人認(rèn)為這是C+Builder的兼容性好,實(shí)際上很大程度應(yīng)歸功于MFC的兼容性好。微軟辛辛苦苦用標(biāo)準(zhǔn)方法寫(xiě)MFC,卻為對(duì)手制造了方便。不知他們作何感想?而因?yàn)镃+Builder對(duì)語(yǔ)言作了擴(kuò)展,VC不能編譯C+Builder的程序??磥?lái)在這方面VC要輸給C+Builder了。而且VCL所支持的組件、屬性等都是MFC所缺乏的特性。雖然VC也能支持組件,但要通過(guò)AppWizard先生成一個(gè)包裹類(lèi)(wrapper),不如VCL來(lái)得簡(jiǎn)潔。有很多人使用C+Builder就是沖著控件板上那一大堆組件來(lái)的,VC雖然能使用的組件也很多(也許不比C+Builder少),但由于不方便而對(duì)RAD程序員沒(méi)有吸引力。 C+Builder的VCL比Visual C+的MFC先進(jìn)的另一個(gè)特性是異常處理。但令人啼笑皆非的是,它的異常處理代碼有bug,有時(shí)會(huì)無(wú)端拋出異常。不知道在最新的版本中有沒(méi)有改正了。而VC的框架MFC也不是一無(wú)是處。經(jīng)歷了那么多年的發(fā)展和完善,MFC功能非常全面,而且十分穩(wěn)定,bug很少。其中你可能遇到的bug更少。而且有第三方的專(zhuān)門(mén)工具幫助你避開(kāi)這些bug。如此規(guī)模的一個(gè)類(lèi)庫(kù),能做到這一點(diǎn)不容易。不要小看了這一點(diǎn),很多專(zhuān)業(yè)程序員就是為這個(gè)選擇VC的。而C+Builder的VCL的bug就相對(duì)較多了,而且有些它自己帶的示例程序都有錯(cuò)誤??磥?lái)Inprise還有很長(zhǎng)的路要走。 再?gòu)乃鼈兊囊子眯员容^。VC有ClassWizard、SourceBrowser等一系列工具,還附帶Visual SourceSafe、Visual Modeler等強(qiáng)大的工具,易用性非常好。(VC自帶建模工具Visual Modeler,也許說(shuō)明了它才是工程級(jí)的開(kāi)發(fā)平臺(tái),與C+Builder的定位不同。)它所帶的MSDN這部開(kāi)發(fā)者的百科全書(shū)更是讓你沒(méi)有找不到的,只有想不到的。而且它的AutoComplete之類(lèi)小功能也比C+Builder要體貼。C+Builder的新版本雖然也提供了這一功能,但它的提示要等好幾秒才出來(lái),有時(shí)你不經(jīng)意間把鼠標(biāo)停在某一處,也要等硬盤(pán)響好幾秒,這可是在566Mhz的賽揚(yáng)II上呀。不要笑我瑣碎,有時(shí)一個(gè)開(kāi)發(fā)工具的成熟和易用,就是從這些小地方體現(xiàn)出來(lái)的。C+Builder作為RAD工具,理應(yīng)強(qiáng)調(diào)易用性。但與VC相比還顯出不成熟。這是不應(yīng)該的。 再來(lái)看看它們的可移植性。Inprise正在開(kāi)發(fā)C+Builder和Delphi的Linux版本, 代號(hào)為Kylix。也許通過(guò)Kylix,用VCL構(gòu)架編寫(xiě)的Windows程序向Linux移植成為可能。但這只是可能。因?yàn)樵谀壳癐nprise的兼容性工作做得并不好。C+Builder可以編譯VC程序還要多謝微軟使用標(biāo)準(zhǔn)方法寫(xiě)MFC,而它自己各個(gè)版本之間兼容性卻不太好。低版本的C+Builder不能使用高版本的VCL組件(這還別去說(shuō)它),而高版本的C+Builder竟然不能使用低版本的VCL組件。真是豈有此理,我很少看見(jiàn)軟件有不向下兼容的。如果Windows 98不能運(yùn)行95的程序,Windows 95不能運(yùn)行3.x的程序,Win 3.x不能運(yùn)行DOS程序,你 還會(huì)用Windows嗎?如果不是C+Builder的其它某些方面太出色,光是這個(gè)向下不兼容就足以讓我拋棄它。而且雖說(shuō)通過(guò)捆綁編譯器,C+Builder可以編譯Delphi的Object Pascal代碼,但C+Builder仍不能使用為Delphi開(kāi)發(fā)的VCL組件。所以一個(gè)組件有for D1/D 2/D3/D4/D5/C1/C3/C4/C5這些不同版本是常有的事,而且隨著C+Builder版本的升級(jí)可 能還會(huì)增加。希望Inprise能先解決同門(mén)兄弟的兼容性問(wèn)題。而微軟的VC就沒(méi)有這類(lèi)問(wèn)題 MFC1.0的程序也可以毫無(wú)障礙地在VC6.0下編譯通過(guò)。 再來(lái)看看它們的前景吧。實(shí)際上,技術(shù)的進(jìn)步在很多時(shí)候是此消彼長(zhǎng)的。當(dāng)初Borland的Turbo C和Borland C+幾乎是唯一的選擇。微軟的Quick C(現(xiàn)在還有人知道這個(gè)產(chǎn)品嗎?)和Microsoft C/C+從來(lái)也沒(méi)有成為過(guò)主流。但Borland C+又流行了多少年呢?不久就被新崛起的Microsoft Visual C/C+壓下去了。現(xiàn)在的C+Builder又有后來(lái)居上的態(tài)勢(shì),如果穩(wěn)定性再提高一些,bug再少一些,有希望成為主流。但I(xiàn)nspires的總體實(shí)力不及微軟,這也是無(wú)可爭(zhēng)議的。從C+Builder 5的Release Notes中的Known Issues部分,以及它們的幫助文檔的規(guī)模和質(zhì)量都可以看出。(哪個(gè)同類(lèi)產(chǎn)品的幫助文檔能和MSDN比呢?)Inprise公司應(yīng)從Netscape吸取教訓(xùn),不要讓C+Builder成為第二個(gè)Netscape Communicator。(Communicator也是一度技術(shù)領(lǐng)先,甚至曾占據(jù)了大部分的瀏覽器市場(chǎng),但似乎后勁不足,而且 6.0 PR1、2中bug多多,現(xiàn)在被IE壓得抬不起頭。)C+Builder是Inspires的旗艦產(chǎn)品之一,前景應(yīng)當(dāng)還是比較樂(lè)觀的,而且Inspires已經(jīng)在向Linux進(jìn)軍了,而微軟還遲遲沒(méi)有動(dòng)作,難道非要到Linux成燎原之勢(shì)(或許已經(jīng)成燎原之勢(shì)了)才會(huì)奮起占領(lǐng)這個(gè)新興市場(chǎng)?似乎他們對(duì)Linux的態(tài)度與幾年前對(duì)互聯(lián)網(wǎng)的興起的反應(yīng)遲緩有些相似。但后來(lái).唉,真希望Inprise不要步Netscape的后塵。C+Builder是一個(gè)很有前途的開(kāi)發(fā)工具。遺憾的是,Inprise公司Delphi的創(chuàng)始人已經(jīng)跳槽到微軟去主持Visual J+項(xiàng)目了。但愿對(duì)Inprise沖擊不會(huì)太大。微軟的Visual C+的前景又怎樣呢?Visual Studio 7.0不久就要推出了。不知能不能在保持穩(wěn)定性的同時(shí)在技術(shù)的先進(jìn)性上趕上C+Builder。另外,這一版本將加強(qiáng)網(wǎng)絡(luò)開(kāi)發(fā)的特性??磥?lái)微軟雖然被判解體,開(kāi)發(fā)實(shí)力可是一點(diǎn)沒(méi)打折扣。 就技術(shù)(主要指應(yīng)用框架)來(lái)說(shuō),C+Builder目前領(lǐng)先于Visual C+。但多多少少的不盡人意之處對(duì)Inprise想說(shuō)愛(ài)你不容易。而VC盡管發(fā)展到今日已十分完善,但MFC框架已是明日黃花了。如果不使用MFC,目前又沒(méi)有合適的替代品。WFC是支持組件、屬性和事件的,但那是Visual J+里邊用的;ATL也很先進(jìn),但是用來(lái)進(jìn)行COM/ActiveX開(kāi)發(fā)的;基于ATL的WTL也不錯(cuò),可惜是非官方作品,也未必比VCL先進(jìn)。微軟最近提出了C#(讀作C Sharp)語(yǔ)言方案,但那屬于和Java同一類(lèi)的東西??磥?lái)是金無(wú)足赤啊。根據(jù) 你的需要做選擇吧。實(shí)際上Visual C+和C+Builder也不是單單競(jìng)爭(zhēng)關(guān)系。它們?cè)谠S多領(lǐng)域并不重疊,甚至是互補(bǔ)的。到底怎樣取舍,要根據(jù)你的項(xiàng)目特性決定。如果你開(kāi)發(fā)系統(tǒng)底層的東西,需要極好的兼容性和穩(wěn)定性,選Visual C+吧。你可以只調(diào)用Windows的各種API,不用MFC。如果你寫(xiě)傳統(tǒng)的Windows桌面應(yīng)用程序,Visual C+的MFC框架是正統(tǒng)的選擇。如果你為企業(yè)開(kāi)發(fā)數(shù)據(jù)庫(kù)、信息管理系統(tǒng)等高層應(yīng)用(高層是相對(duì)于低層/底層而言的,不是說(shuō)技術(shù)高級(jí)或低級(jí)。)而且有比較緊的期限限制,選C+Builder比較好。如果你用的語(yǔ)言是Object Pascal,Delphi是唯一的選擇(如果GNU Pascal等免費(fèi)編譯器不考慮的話)。如果你原先用Delphi(Object Pascal語(yǔ)言),現(xiàn)在想改學(xué) C+,應(yīng)當(dāng)先C+Builder。熟悉的界面和相同的框架會(huì)讓你的轉(zhuǎn)軌事半功倍。 3.1.3 BCB的調(diào)試程序的bugs越少,最終用戶對(duì)這個(gè)程序的評(píng)價(jià)越高。而開(kāi)發(fā)人員事先對(duì)bugs的處理越多,最終用戶能提供的關(guān)于bugs的信息就越多,也越準(zhǔn)確,這樣,開(kāi)發(fā)人員在接到最終用戶反映之后,就能夠快速找到出現(xiàn)bugs的那部分代碼,并以最快速度發(fā)布程序的升級(jí)包。 (1)寫(xiě)易讀的代碼 第一點(diǎn),大概也是最重要的一點(diǎn),就是寫(xiě)干凈易讀的代碼。易讀的代碼是很有價(jià)值的。請(qǐng)想象一下,如果隨便掃視一眼代碼或注釋?zhuān)湍芰⒖讨肋@段代碼的的作用,以及在寫(xiě)代碼的時(shí)候?yàn)槭裁匆@樣寫(xiě),當(dāng)時(shí)的思路是什么,那么就可以節(jié)約大量時(shí)間。這樣的代碼,在寫(xiě)的時(shí)候可能會(huì)稍稍慢一些,不過(guò),當(dāng)你調(diào)試程序時(shí),就不會(huì)花上幾個(gè)小時(shí)來(lái)尋找bugs,相反,你可以快速,簡(jiǎn)單的完成除錯(cuò)工作。這時(shí),你就會(huì)覺(jué)得多花一些時(shí)間使程序易讀是很值得的。所以,在寫(xiě)程序的時(shí)候,應(yīng)該養(yǎng)成自己的風(fēng)格,或是讀一讀Scott的關(guān)于代碼風(fēng)格的文章。 (2)使用Exceptions和Exception的處理方法 除去一些少數(shù)的情況,開(kāi)發(fā)人員不可能總是依靠于集成的調(diào)試工具。所以,學(xué)會(huì)用其它的方法來(lái)找到煩人的bugs是很重要的。一些重要的、處理的錯(cuò)誤可能會(huì)在窗體之外發(fā)生。在C+標(biāo)準(zhǔn)制定出來(lái)之前的黑暗日子里,在程序里面發(fā)出發(fā)生錯(cuò)誤的信號(hào),通常是通過(guò)返回錯(cuò)誤代碼完成的(現(xiàn)在這種方法仍然應(yīng)用于OLE技術(shù)和一些Winapi函數(shù)),這樣的處理方法很容易就會(huì)被忽略。(比如說(shuō),你經(jīng)常檢查winapi函數(shù)的返回值嗎?)所以,出現(xiàn)問(wèn)題的可能性并不小。由于以上的原因,需要一個(gè)這樣的機(jī)制,它不能忽略這些錯(cuò)誤,而且,這個(gè)機(jī)制應(yīng)該能被我們控制和自定義的。在這樣的需求下,異常處理機(jī)制出現(xiàn)了。需要一個(gè)特殊的錯(cuò)誤類(lèi)型嗎?簡(jiǎn)單,定義一個(gè)新的異常類(lèi)型就行了(和定義一個(gè)類(lèi)的方法差不多),然后拋出(throw)它。 C+Builder定義了try catch () 機(jī)制。這和剛剛定義的異常機(jī)制的結(jié)構(gòu)很相似。這個(gè)機(jī)制完全可以按照需要自定義。要使用異常處理了,只要把要執(zhí)行的代碼放到try塊里面,為了讓程序知道出現(xiàn)異常后應(yīng)該做什么,還需要定義一個(gè)catch()或是_finally塊。Catch()語(yǔ)句里面可以指定一個(gè)要捕捉的類(lèi)型或是變量,甚至可以用它來(lái)捕捉樹(shù)結(jié)構(gòu)或是繼承類(lèi)的異常,如果捕捉了基類(lèi)的異常,它就能捕捉到繼承這個(gè)基類(lèi)的所有的類(lèi)的異常。比如,在VCL中,所有的異常都是繼承于Exception類(lèi)。所以,catch(Exception& E)可以捕捉到除了EsocketError的所有VCL異常。為了讓這個(gè)機(jī)制更強(qiáng)大,C+Builder中還定義了catch()語(yǔ)句。(沒(méi)錯(cuò),就是三個(gè)點(diǎn))使用這條語(yǔ)句可以捕捉到所有的異常。還有更多的功能嗎?當(dāng)然,你可以添加更多的catch()語(yǔ)句,可以向使用ifelse if語(yǔ)句那樣使用它。注意,在一系列的catch()語(yǔ)句中,錯(cuò)誤不會(huì)被重復(fù)的捕捉,也就是說(shuō),如果前面的catch()語(yǔ)句捕捉到了錯(cuò)誤,后面的catch()語(yǔ)句將不會(huì)捕捉這條錯(cuò)誤。 這個(gè)機(jī)制還有更多的功能。如果你想處理異常,但是不想在處理的位置停止,那么可以重新拋出異常。這時(shí),程序?qū)⒗^續(xù)尋找下一個(gè)catch()語(yǔ)句來(lái)處理這個(gè)異常。這個(gè)方法和“throw”差不多。這樣,你處理過(guò)的異常會(huì)再次被拋出,繼續(xù)尋找下一個(gè)catch語(yǔ)句來(lái)處理它。 最后一個(gè)要說(shuō)的是_finally(這不是標(biāo)準(zhǔn)的用法,是Borland添加的一個(gè)好方法),在_finally程序塊中代碼,無(wú)論是否發(fā)生異常都會(huì)被執(zhí)行。這是一個(gè)清理程序中使用new分配的本地變量,設(shè)置用作旗標(biāo)的變量值為正常的好位置。(比如,把一個(gè)等待狀態(tài)的光標(biāo)圖標(biāo)設(shè)置為正常光標(biāo)。) 就是這些了。有時(shí)間的話,請(qǐng)看看C+Builder幫助文件中的Exception類(lèi)以及繼承Exception的類(lèi)。這些將對(duì)于理解本節(jié)所說(shuō)的內(nèi)容有很大幫助。 (3)使用記錄機(jī)制 不可能總是用調(diào)試器來(lái)調(diào)試代碼,在某些情況下,可能無(wú)法使用內(nèi)部集成的調(diào)試器,這時(shí)候,就不得不依靠其他手段調(diào)試程序了。(比如:Windows NT服務(wù)程序,ISAPI/CGI程序,實(shí)時(shí)應(yīng)用程序等等)。這時(shí)候,有經(jīng)驗(yàn)的程序員可能會(huì)借助古老的調(diào)試方法,例如,使用一些分類(lèi)的記錄機(jī)制來(lái)確定程序?qū)嶋H運(yùn)行的過(guò)程?,F(xiàn)在有一系列的方法可以簡(jiǎn)單的完成這樣的工作。下面將介紹3種方法。 第一個(gè)方法:OutputDebugString。(WinAPI: VOID OutputDebugString(LPCTSTR lpOutputString);)很幸運(yùn),微軟徹底的實(shí)現(xiàn)了調(diào)試子系統(tǒng)。它包括的一些特點(diǎn)可能讓你想把自己的記錄系統(tǒng)扔掉。應(yīng)用程序在調(diào)試器進(jìn)程中運(yùn)行時(shí)OutputDebugString將用C字符串把調(diào)試器輸出的信息打印出來(lái)。如果程序沒(méi)有在調(diào)試器進(jìn)程中運(yùn)行,它將忽略這些調(diào)用。它會(huì)很好的在客戶的機(jī)器上運(yùn)行,不會(huì)彈出信息窗口。如果在發(fā)布給客戶的時(shí)候,忘記去掉這些代碼程序僅僅會(huì)變慢一點(diǎn),不會(huì)有別的不良后果。 第二個(gè)方法:使用了Gexperts,通過(guò) dbugint.pas接口進(jìn)行調(diào)試。它是個(gè)可以稱(chēng)之為偉大的程序,你可以把它分發(fā)給客戶。和OutputDebugString一樣,如果客戶沒(méi)有這個(gè)程序,它就根本什么也不作。(它會(huì)自動(dòng)檢測(cè)機(jī)器上是否安裝了客戶端)。要使用dbugintf,它很容易被加入到你的工程中,加入#include dbugintf.HPp(要把它加入工程,然后會(huì)編譯它的pascal文件)。然后,你就可以直接使用SendDebug(要送到記錄文件的字符串); 或者,你需要它更機(jī)警一些,可以使用SendDebugEx(它給TMsgDlgType增加了一個(gè)新的消息類(lèi)型)SendMethodEnter, SendMethodExit, SendSeparator等等(用法都差不多)。如果你打算給最終用戶分發(fā)客戶端 (Gdebug.exe),不要忘記include所需要的程序包。Gexperts可以在 得到,它是免費(fèi)的。 第三個(gè)方法:大概是最艱苦的方法,就是使用自己的記錄控制。這個(gè)方法可能不是想象的這么簡(jiǎn)單??赡苁紫葧?huì)想到“在窗體上扔一個(gè)RichEdit,把它設(shè)置為只讀的,然后往里面寫(xiě)記錄”是這樣吧?理論上不錯(cuò),但是,實(shí)施起來(lái)首先,使用RichEdit控件來(lái)做記錄,會(huì)大大降低應(yīng)用程序的速度,還會(huì)在內(nèi)存中造成碎片,甚至丟失內(nèi)存。通常,在運(yùn)行10分鐘左右之后,會(huì)使整個(gè)計(jì)算機(jī)的速度變慢!所以,如果希望在自己的記錄中能夠使用彩色和圖標(biāo),那么最好自己創(chuàng)建一個(gè)組件。如果沒(méi)有這么高的要求,那么有一個(gè)簡(jiǎn)單有效的方法,就是使用ListBox控件作記錄,把ListBox的Style屬性設(shè)置為lbOwnerDrawFixed,這樣句柄將會(huì)自繪。(Gexperts的控制臺(tái)就是用這樣的方法制作的)。 (4)將記錄和異常處理結(jié)合使用 不用總是擔(dān)心可能會(huì)發(fā)生什么偶然的異常。一般來(lái)說(shuō),通過(guò)很多的bugs測(cè)試后(盡量折磨程序,看看它會(huì)不會(huì)崩潰),應(yīng)用程序在運(yùn)行是應(yīng)該不會(huì)出現(xiàn)什么錯(cuò)誤。下面的這個(gè)技術(shù),建議組件開(kāi)發(fā)者,在第一次把組件放在IDE環(huán)境測(cè)試的時(shí)候,很應(yīng)該遵守。一個(gè)在IDE中產(chǎn)生的異常會(huì)導(dǎo)致很多問(wèn)題,甚至可能無(wú)法重新啟動(dòng)IDE也不能恢復(fù)。這個(gè)技術(shù)很簡(jiǎn)單。在代碼中每一個(gè)函數(shù)或是主要的函數(shù)中加入: try /函數(shù)的代碼 catch(Exception &E) SendDebugMessage(“Exception caught in classname:functionname of type:” +E.ClassName() +” with the message:”+E.Message); ; 把字符串中classname 和 functionname 替換成相應(yīng)的類(lèi)名和函數(shù)名。在出現(xiàn)錯(cuò)誤時(shí),你會(huì)立刻知道錯(cuò)誤發(fā)生的位置。這樣也就不至于強(qiáng)制重起IDE的了。 ClassName()給了什么樣的幫助呢?它只是用于返回字符串“Exception”嗎?每一次,E都被聲明為異常類(lèi)型?這是VCL另一個(gè)優(yōu)秀的地方,所有的類(lèi)都從Tobject繼承,所以,這些類(lèi)都能自動(dòng)獲得正確的類(lèi)型和基類(lèi)的類(lèi)型,所有的更多的信息都可以在這里找到。(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告冠名合同范本
- 進(jìn)口塑料購(gòu)銷(xiāo)合同范本
- 資產(chǎn)借用合同范本
- 美術(shù)教育與社會(huì)變革的聯(lián)系計(jì)劃
- 生物學(xué)科發(fā)展前瞻性規(guī)劃計(jì)劃
- 電競(jìng)產(chǎn)業(yè)的新力量會(huì)員制度打造特色體驗(yàn)
- 電子商務(wù)中的客戶服務(wù)質(zhì)量管理研究
- 引導(dǎo)幼兒情感發(fā)展的實(shí)踐研究計(jì)劃
- 復(fù)混肥料在生態(tài)農(nóng)業(yè)中的重要性考核試卷
- 智能醫(yī)療設(shè)備發(fā)展與創(chuàng)新考核試卷
- 中小學(xué)校園課間時(shí)間巡查工作方案
- 《垂體瘤規(guī)范化診治》課件
- 早產(chǎn)臨床防治指南(2024版)解讀
- 艾草種植基地合同(2篇)
- GB/T 30661.10-2024輪椅車(chē)座椅第10部分:體位支撐裝置的阻燃性要求和試驗(yàn)方法
- 空調(diào)制冷管道施工協(xié)議
- 2024-2030年藝術(shù)攝影服務(wù)產(chǎn)業(yè)發(fā)展分析及發(fā)展趨勢(shì)與投資前景預(yù)測(cè)報(bào)告
- 【光明乳業(yè)股份有限公司財(cái)務(wù)報(bào)表探析(定量論文)7800字】
- 肺部感染臨床路徑
- 高中英語(yǔ)3500詞(亂序版)
- 鋼結(jié)構(gòu)吊裝技術(shù)交底
評(píng)論
0/150
提交評(píng)論