課程設(shè)計(jì)(論文)-VC_基于Windows的功能測(cè)試軟件研究—腳本技術(shù)的實(shí)現(xiàn)_第1頁(yè)
課程設(shè)計(jì)(論文)-VC_基于Windows的功能測(cè)試軟件研究—腳本技術(shù)的實(shí)現(xiàn)_第2頁(yè)
課程設(shè)計(jì)(論文)-VC_基于Windows的功能測(cè)試軟件研究—腳本技術(shù)的實(shí)現(xiàn)_第3頁(yè)
課程設(shè)計(jì)(論文)-VC_基于Windows的功能測(cè)試軟件研究—腳本技術(shù)的實(shí)現(xiàn)_第4頁(yè)
課程設(shè)計(jì)(論文)-VC_基于Windows的功能測(cè)試軟件研究—腳本技術(shù)的實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(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)介

1、基于Windows的功能測(cè)試軟件研究腳本技術(shù)的實(shí)現(xiàn)摘 要:對(duì)于開(kāi)發(fā)靈活的科學(xué)軟件來(lái)說(shuō),腳本語(yǔ)言是一個(gè)強(qiáng)大的工具。本課題研究?jī)?nèi)容就是設(shè)計(jì)一種基于Windows簡(jiǎn)單腳本語(yǔ)言,然后利用VC開(kāi)發(fā)該語(yǔ)言的解釋器,最后完成軟件功能測(cè)試。關(guān)鍵字:功能測(cè)試;腳本語(yǔ)言;VCAbstract: science for the development of flexible software, the scripting language is a powerful tool. The content of the research is to design a simple scripting language

2、based on Windows, and then using VC development of the language interpretation, the final completion of software testing. Keyword: functional testing; scripting language; VC目錄 TOC o 1-3 h z u HYPERLINK l _Toc200020453 第一章 緒論 PAGEREF _Toc200020453 h 3 HYPERLINK l _Toc200020454 引言 PAGEREF _Toc20002045

3、4 h 3 HYPERLINK l _Toc200020455 腳本語(yǔ)言 PAGEREF _Toc200020455 h 3 HYPERLINK l _Toc200020456 腳本構(gòu)件粘貼 PAGEREF _Toc200020456 h 4 HYPERLINK l _Toc200020457 腳本語(yǔ)言的特點(diǎn) PAGEREF _Toc200020457 h 5 HYPERLINK l _Toc200020458 1.2.3 腳本語(yǔ)言的構(gòu)成 PAGEREF _Toc200020458 h 7 HYPERLINK l _Toc200020459 選用語(yǔ)言的策略 PAGEREF _Toc200020

4、459 h 7 HYPERLINK l _Toc200020460 腳本語(yǔ)言的應(yīng)用 PAGEREF _Toc200020460 h 8 HYPERLINK l _Toc200020461 圖形用戶接口(GUI) PAGEREF _Toc200020461 h 8 HYPERLINK l _Toc200020462 1.4.2 Internet PAGEREF _Toc200020462 h 9 HYPERLINK l _Toc200020463 構(gòu)件框架 PAGEREF _Toc200020463 h 9 HYPERLINK l _Toc200020464 其它語(yǔ)言 PAGEREF _Toc2

5、00020464 h 9 HYPERLINK l _Toc200020465 第二章 腳本語(yǔ)言和系統(tǒng)編程語(yǔ)言的互補(bǔ)性 PAGEREF _Toc200020465 h 10 HYPERLINK l _Toc200020466 2.1 使用腳本語(yǔ)言開(kāi)發(fā)應(yīng)用程序的步驟 PAGEREF _Toc200020466 h 10 HYPERLINK l _Toc200020467 第三章 Windows腳本組件技術(shù) PAGEREF _Toc200020467 h 13 HYPERLINK l _Toc200020468 腳本組件技術(shù) PAGEREF _Toc200020468 h 13 HYPERLINK

6、l _Toc200020469 腳本組件的運(yùn)行 PAGEREF _Toc200020469 h 13 HYPERLINK l _Toc200020470 腳本組件文件的框架 PAGEREF _Toc200020470 h 14 HYPERLINK l _Toc200020471 腳本組件的使用 PAGEREF _Toc200020471 h 14 HYPERLINK l _Toc200020472 腳本組件應(yīng)用實(shí)例 PAGEREF _Toc200020472 h 15 HYPERLINK l _Toc200020473 腳本組件文件 PAGEREF _Toc200020473 h 15 HYP

7、ERLINK l _Toc200020474 應(yīng)用腳本組件 PAGEREF _Toc200020474 h 17 HYPERLINK l _Toc200020475 第四章 C/C+代碼自動(dòng)生成腳本語(yǔ)言接口的實(shí)現(xiàn) PAGEREF _Toc200020475 h 18 HYPERLINK l _Toc200020476 國(guó)內(nèi)外現(xiàn)狀 PAGEREF _Toc200020476 h 18 HYPERLINK l _Toc200020477 可擴(kuò)展的編譯器IG PAGEREF _Toc200020477 h 19 HYPERLINK l _Toc200020478 4.2.1 IG的實(shí)現(xiàn) PAGERE

8、F _Toc200020478 h 19 HYPERLINK l _Toc200020479 關(guān)鍵技術(shù) PAGEREF _Toc200020479 h 21 HYPERLINK l _Toc200020480 小結(jié)及以后的工作 PAGEREF _Toc200020480 h 24 HYPERLINK l _Toc200020481 參考資料 PAGEREF _Toc200020481 h 25 HYPERLINK l _Toc200020482 總 結(jié) PAGEREF _Toc200020482 h 26 HYPERLINK l _Toc200020483 致 謝 PAGEREF _Toc20

9、0020483 h 27第一章 緒論在過(guò)去30年里,編程人員在編寫(xiě)程序的過(guò)程中更多注重的是如何使用高級(jí)程序設(shè)計(jì)語(yǔ)言編寫(xiě)出具有個(gè)性的應(yīng)用程序,但這一觀念目前正逐步發(fā)生了根本性的變化.這種變化表現(xiàn)為由高級(jí)程序設(shè)計(jì)語(yǔ)言(例如C或C+)向腳本語(yǔ)言(例如Perl或TCL)的過(guò)渡。因此,比擬腳本語(yǔ)言和高級(jí)程序設(shè)計(jì)語(yǔ)言的各自特點(diǎn)有利于我們了解這種變化的必然性。腳本語(yǔ)言與高級(jí)程序設(shè)計(jì)語(yǔ)言不同.各自適用于不同的任務(wù)。高級(jí)程序設(shè)計(jì)語(yǔ)言是從最簡(jiǎn)單的計(jì)算機(jī)根本元素例如內(nèi)存字開(kāi)始構(gòu)造數(shù)據(jù)結(jié)構(gòu)和算法,而腳本語(yǔ)言是以構(gòu)件“粘貼的方式進(jìn)行設(shè)計(jì),假定已經(jīng)存在有一組強(qiáng)有力的構(gòu)件,主要任務(wù)是怎樣將這些構(gòu)件連接起來(lái)。高級(jí)程序設(shè)計(jì)語(yǔ)言

10、是一種強(qiáng)類型的用于復(fù)雜處理的語(yǔ)言,而腳本語(yǔ)言是一種無(wú)類型的只需在構(gòu)件之間簡(jiǎn)單地建立連接實(shí)現(xiàn)快速應(yīng)用開(kāi)發(fā)的工具語(yǔ)言。腳本語(yǔ)言和高級(jí)程序設(shè)計(jì)語(yǔ)言的關(guān)系并不矛盾,兩者具有互補(bǔ)性.60年代以來(lái)的大多數(shù)主要的計(jì)算平臺(tái)都包括這兩種語(yǔ)言。構(gòu)件框架集成是這種互補(bǔ)性的典型代表,它的一般形式是首先使用高級(jí)程序設(shè)計(jì)語(yǔ)言建立構(gòu)件,然后再使用腳本語(yǔ)言將構(gòu)件粘貼在一起。隨著近年計(jì)算機(jī)及其相關(guān)技術(shù)的開(kāi)展,例如更快的機(jī)器、更好的腳本語(yǔ)言、圖形用戶接口GUI的普遍使用、以及Internet的高速開(kāi)展,大大加速了腳本語(yǔ)言的應(yīng)用。這種開(kāi)展趨勢(shì)將會(huì)持續(xù)到下個(gè)世紀(jì),到那時(shí)會(huì)有更多更新的完全使用腳本語(yǔ)言編寫(xiě)的應(yīng)用程序,而高級(jí)程序設(shè)計(jì)語(yǔ)言

11、仍將是構(gòu)筑構(gòu)件的主要語(yǔ)言。腳本語(yǔ)言在運(yùn)用腳本語(yǔ)言設(shè)計(jì)應(yīng)用程序的過(guò)程中,一般來(lái)說(shuō)只需了解構(gòu)件的外部特性,無(wú)需知識(shí)構(gòu)件內(nèi)部復(fù)雜的算法和數(shù)據(jù)結(jié)構(gòu)。因此腳本語(yǔ)言有時(shí)又被稱為粘貼語(yǔ)言或系統(tǒng)集成語(yǔ)言。腳本構(gòu)件粘貼運(yùn)用腳本語(yǔ)言設(shè)計(jì)應(yīng)用程序的過(guò)程本質(zhì)上是一種粘貼過(guò)程,即是將符合粘貼條件的構(gòu)件拼裝在一起形成應(yīng)用。參與粘貼的腳本構(gòu)件的根本條件如下:1)軟件構(gòu)件之間自由相關(guān),因而幾乎不需要預(yù)先假設(shè)與它相交互的有哪些別的軟件構(gòu)件,且構(gòu)件可以被簡(jiǎn)單地重用.2)編程者以“黑盒方式使用構(gòu)件,即只能例如和使用它們,不能對(duì)其修改、擴(kuò)展,也不必了解它們的內(nèi)部執(zhí)行過(guò)程.為了滿足這兩個(gè)條件,使用語(yǔ)言解釋器作為可重用構(gòu)件的中介。解釋器

12、能夠根據(jù)不同的構(gòu)件類型完成命令解釋、例如構(gòu)件、和控制交互等操作。構(gòu)件之間的交互一般采用兩種方法:粘貼代碼方法和配置腳本方法.粘貼代碼交互方法主要完成構(gòu)件和構(gòu)件之間的交互。其特性為:構(gòu)件之間松散偶合:即構(gòu)件之間的相互依賴性很小;構(gòu)件可重用,能在盡可能多樣的類型環(huán)境中使用它們;構(gòu)件在運(yùn)行過(guò)程中被動(dòng)態(tài)地組合成應(yīng)用;構(gòu)件能夠被那些甚至沒(méi)有墓本的編程技能的編程者使用。使用粘貼代碼方法需要較多的內(nèi)存,且為了完成每個(gè)構(gòu)件到構(gòu)件交互操作會(huì)帶來(lái)額外系統(tǒng)開(kāi)銷,因而執(zhí)行效率低。對(duì)于帶有圖形用戶接口的應(yīng)用程序,或是那些需要在構(gòu)件之間傳送大量數(shù)據(jù)的場(chǎng)合不能使用這種方法。配置腳本直接方法主要用于設(shè)計(jì)構(gòu)件和解釋器之間的交互

13、。從構(gòu)件的觀點(diǎn)來(lái)看,解釋器也可以視為一組專門(mén)處理構(gòu)件之間交互參數(shù)的構(gòu)件集合,所以構(gòu)件和解釋器之間的交互,也是一種構(gòu)件和構(gòu)件之間的交互。但由于這種交互在相互之間需要大量的數(shù)據(jù)傳送,因而不能采用粘貼代碼方法。必須采用效率高且需要內(nèi)存少的配置腳本方法。具體方法如下為構(gòu)件定義二進(jìn)制接口。將腳本層次的“handles直接指向一個(gè)二進(jìn)制構(gòu)件接口,實(shí)現(xiàn)一個(gè)構(gòu)件對(duì)另一個(gè)構(gòu)件的解釋。腳本命令的傳送是通過(guò)例如腳本且在腳本之間傳送接口句柄來(lái)實(shí)現(xiàn)。構(gòu)件之間通過(guò)相互包含指向?qū)Ψ降亩M(jìn)制接口句柄實(shí)現(xiàn)交互。采用配置腳本方法,構(gòu)件之間不是松散偶合關(guān)系。編程人員必須細(xì)致設(shè)計(jì)構(gòu)件之間的潛在交互和它們?cè)谶@些交互中所遵循的規(guī)那么。如

14、果使用C+設(shè)計(jì),這些規(guī)那么和交互能夠使用抽象數(shù)據(jù)接口來(lái)定義.如果在C中實(shí)現(xiàn),它們能夠使用函數(shù)指針和返回值定義。整個(gè)腳本語(yǔ)言體系的實(shí)現(xiàn)是這兩種方式的結(jié)合。一般使用枯貼代碼方法進(jìn)行相互獨(dú)立構(gòu)件之間的靈活交互,而構(gòu)件與解釋器之間的交互采用配置腳本方法實(shí)現(xiàn)。例如,文Tk的Button工具使用粘貼代碼方法去指示當(dāng)用戶按下按鈕時(shí)發(fā)生什么事件和通過(guò)一個(gè)二進(jìn)制接口句柄去向它的圖形管理者發(fā)出請(qǐng)求.從某種意義上說(shuō)采用高級(jí)程序設(shè)計(jì)語(yǔ)言的程序設(shè)計(jì)也是一種構(gòu)件的粘貼,只不過(guò)此時(shí)的構(gòu)件被看作是高級(jí)程序設(shè)計(jì)語(yǔ)言中的對(duì)象或函數(shù).此種構(gòu)件之間的關(guān)系緊密,且這種關(guān)系是編寫(xiě)程序時(shí)預(yù)先設(shè)定好的,并在程序完成時(shí)固定下來(lái),不能動(dòng)態(tài)地改變

15、。設(shè)定這種關(guān)條需要對(duì)整個(gè)目標(biāo)應(yīng)用及實(shí)現(xiàn)工具有著透徹的了解,與腳本構(gòu)件的粘貼存在著本質(zhì)上的不同??傊?,一個(gè)腳本構(gòu)件的使用應(yīng)不依賴于應(yīng)用中的別的構(gòu)件。構(gòu)件和構(gòu)件之間的交互行為不是固定的。它能由腳本編寫(xiě)者參數(shù)化,并在執(zhí)行期間動(dòng)態(tài)地改變。由于枯貼代碼方法必須解釋執(zhí)行,用腳本語(yǔ)言編寫(xiě)出的腳本必定會(huì)為這種靈活性付出性能上的代價(jià)。腳本語(yǔ)言的特點(diǎn)由以上腳本構(gòu)件的靈活的粘貼特性的要求,腳本語(yǔ)言必須具有如下特點(diǎn):(1)腳本語(yǔ)言的無(wú)類型性。為了粘貼構(gòu)件任務(wù)的簡(jiǎn)易性,腳本語(yǔ)言要求是無(wú)類型的。例如Tu和VbScript中的一個(gè)變量在某一時(shí)刻保存有一個(gè)字符串而在另一時(shí)刻可能保存有一個(gè)整數(shù)。腳本語(yǔ)言對(duì)于構(gòu)件的形式?jīng)]有預(yù)先的

16、限制,而且所有的構(gòu)件和值都以統(tǒng) 一的形式表示因此,任何構(gòu)件或值可以在任何場(chǎng)合使用。為了某一目的設(shè)計(jì)的構(gòu)件可以用于設(shè)計(jì)者沒(méi)有想到的完全不同的目的。例如,文2在Unix shell中所有的過(guò)濾程序從輸入讀入一個(gè)字節(jié)的流然后寫(xiě)一個(gè)字節(jié)的流到輸出,任何兩個(gè)程序可以通過(guò)這種方式連接起來(lái)。下面的shell命令疊放三個(gè)過(guò)濾器在一起以計(jì)算包含有字scripting的行數(shù): select grep scripting weselect程序讀取當(dāng)前顯示中被選擇的文件并且輸出文件到輸出端,再由grep程序讀入并且對(duì)于包含有scripting字符串的行輸出,并由w。程序計(jì)算輸出行的行數(shù)。這些程序中的任何一個(gè)都可以應(yīng)用

17、于執(zhí)行其他不同任務(wù)的多種場(chǎng)合。由此看來(lái),腳本語(yǔ)言的無(wú)類型特性似乎允許某些錯(cuò)誤存在,但是實(shí)際上腳本語(yǔ)言與高級(jí)程序設(shè)計(jì)語(yǔ)言是同樣平安的。對(duì)于參數(shù)錯(cuò)誤檢查,腳本語(yǔ)言一般是在運(yùn)行時(shí)進(jìn)行。強(qiáng)類型高級(jí)程序設(shè)計(jì)語(yǔ)言是在編譯時(shí)進(jìn)行,因此在運(yùn)行期間檢查所需的時(shí)間花費(fèi)被節(jié)省下來(lái)。這樣以效能為先決條件的結(jié)果限制了信息的使用,同時(shí)減少了程序的靈活性。(2)腳本語(yǔ)言的被解釋執(zhí)行。腳本語(yǔ)言和高級(jí)程序設(shè)計(jì)語(yǔ)言的另一點(diǎn)不同是腳本語(yǔ)言通常是被解釋執(zhí)行,而高級(jí)程序設(shè)計(jì)語(yǔ)言是編譯執(zhí)行。解釋執(zhí)行不需要花費(fèi)編譯時(shí)間,能夠快速地實(shí)現(xiàn)應(yīng)用。由于允許用戶在運(yùn)行期間編制應(yīng)用程序,解釋器還可以更加靈活地粘貼構(gòu)件。例如,某些集成電路的綜合分析工具

18、就集成有Tcl解釋器。另外解釋器還允許通過(guò)以動(dòng)態(tài)產(chǎn)生代碼的方式使得實(shí)現(xiàn)功能的工作更加有效。例如,一個(gè)基于Tcl的網(wǎng)絡(luò)瀏覽器能夠通過(guò)使用幾乎沒(méi)有規(guī)那么的表述代替翻譯主頁(yè)的HTML成為一個(gè)Tcl腳本語(yǔ)言,然后執(zhí)行腳本語(yǔ)言將頁(yè)顯示在屏幕上.腳本語(yǔ)言比起高級(jí)程序設(shè)計(jì)語(yǔ)言來(lái)較為低效,局部原因是由于它們使用解釋器代替了編譯器,也有局部原因是為了使它們的根底構(gòu)件更加有效而對(duì)其進(jìn)行了封裝,使得其更加易用。例如,腳本語(yǔ)言可以根據(jù)情形的不同使用可變長(zhǎng)度的串,而高級(jí)程序設(shè)計(jì)語(yǔ)言必須使用一個(gè)對(duì)應(yīng)單個(gè)機(jī)器字的二進(jìn)制值,并且腳本語(yǔ)言使用Hash表,而高級(jí)程序設(shè)計(jì)語(yǔ)言使用索引數(shù)組。幸運(yùn)的是,性能并不總是主要因素。腳本語(yǔ)言的

19、應(yīng)用程序通常比高級(jí)程序設(shè)計(jì)語(yǔ)言的應(yīng)用程序要小,并且使用腳本語(yǔ)言設(shè)計(jì)的應(yīng)用的性能也受到其構(gòu)件性能的影響,而構(gòu)件的實(shí)現(xiàn)完全使用高級(jí)程序設(shè)計(jì)語(yǔ)言。腳本語(yǔ)言比高級(jí)程序設(shè)計(jì)語(yǔ)言處于更高的層次.一條語(yǔ)句比起高級(jí)程序設(shè)計(jì)語(yǔ)言能夠做更多的工作。一條典型的腳本語(yǔ)句能夠執(zhí)行幾百或幾千條機(jī)器指令,而相對(duì)來(lái)說(shuō)高級(jí)程序設(shè)計(jì)語(yǔ)言的語(yǔ)句大約能夠執(zhí)行五條機(jī)器指令。這些差異的產(chǎn)生,局部原因是由于腳本語(yǔ)言使用了解釋器,根本原因還是由于腳本語(yǔ)言中的原語(yǔ)操作具有更強(qiáng)的功能。例如,Perl對(duì)于規(guī)那么表達(dá)式的引用就象對(duì)整數(shù)地址的引用一樣容易。 腳本語(yǔ)言的構(gòu)成腳本語(yǔ)言的根本構(gòu)成和一般系統(tǒng)程序設(shè)計(jì)語(yǔ)言大體相同,可以說(shuō)是系統(tǒng)程序設(shè)計(jì)語(yǔ)言的一個(gè)

20、子集,支持整型、浮點(diǎn)型、字符串等根本數(shù)據(jù)類型,支持無(wú)類型變量,支持順序、循環(huán)、條件等根本語(yǔ)句結(jié)構(gòu).腳本語(yǔ)言的特點(diǎn)主要是無(wú)類型性、解釋性、簡(jiǎn)單性和高效性。一個(gè)程序設(shè)計(jì)語(yǔ)言的類型特性的強(qiáng)弱是指程序中的數(shù)據(jù)信息在使用前要求作出說(shuō)明的嚴(yán)格程度.在一個(gè)具有強(qiáng)類型特性的語(yǔ)言里,程序員必須預(yù)先對(duì)每個(gè)數(shù)據(jù)信息怎樣被使用作出嚴(yán)格的規(guī)定,然后在使用中,如果違背了這些約束就認(rèn)為是錯(cuò)誤;而在一個(gè)無(wú)類型特征的語(yǔ)言里,不必對(duì)數(shù)據(jù)信息怎樣被使用做預(yù)先的限制,信息的具體含義由使用方式?jīng)Q定.在存儲(chǔ)器里字可以表示任何種類的值,如整型、浮點(diǎn)數(shù),指針或一條指令,值的含義是由使用它的方式?jīng)Q定?!癡BScript的行的數(shù)目:select

21、 |grep VBScript| wcselect讀入當(dāng)前顯示器上選中的文本并輸出到打印機(jī),grep讀入該文本并打印包含“VBScript。選用語(yǔ)言的策略腳本語(yǔ)言不能取代高級(jí)程序設(shè)計(jì)語(yǔ)言,反之亦然。它們各自適用于不同任務(wù)。有了粘貼和系統(tǒng)集成,使用腳本語(yǔ)言設(shè)計(jì)應(yīng)用程序速度可以提高5到10倍。高級(jí)程序設(shè)計(jì)語(yǔ)言需要大量加工和轉(zhuǎn)換代碼來(lái)連接不同的局部,而這種連接在腳本語(yǔ)言中是直接進(jìn)行的.對(duì)于復(fù)雜的算法和數(shù)據(jù)結(jié)構(gòu),使用強(qiáng)類型的高級(jí)程序設(shè)計(jì)語(yǔ)言使得程序更加容易管理。同時(shí)對(duì)于要求執(zhí)行速度的應(yīng)用.使用高級(jí)程序設(shè)計(jì)語(yǔ)言能夠比腳本語(yǔ)言快10到20倍,這是由于高級(jí)程序設(shè)計(jì)語(yǔ)言不需要運(yùn)行時(shí)的檢查。在接手一個(gè)特定的任務(wù)

22、時(shí),判斷究竟是使用腳本語(yǔ)言還是高級(jí)程序設(shè)計(jì)語(yǔ)言可以考慮以下幾個(gè)方面:建立應(yīng)用的主要工作是否是連接一些預(yù)先存在的主要構(gòu)件?應(yīng)用是否將處理多種不同種類的事物?應(yīng)用是否包括GUI?應(yīng)用是否需要對(duì)許多串進(jìn)行處理?應(yīng)用的函數(shù)是否需要快速的研制?應(yīng)用是否需要擴(kuò)展?對(duì)以上問(wèn)題的肯定答復(fù)建議使用腳本語(yǔ)言。腳本語(yǔ)言和高級(jí)程序設(shè)計(jì)語(yǔ)言是井生的。此兩種語(yǔ)言的結(jié)合使用,能提供具有強(qiáng)大功能的編程環(huán)境,高級(jí)程序設(shè)計(jì)語(yǔ)言被用來(lái)編制供腳本語(yǔ)言使用的構(gòu)件。例如.Javascript中一個(gè)非常吸引人的特點(diǎn)是能夠簡(jiǎn)單地使用C編寫(xiě)的ActiveX構(gòu)件設(shè)計(jì)應(yīng)用CaI。在UNIX中同樣可以使用C編寫(xiě)的應(yīng)用較容易地編寫(xiě)shell腳本。腳本

23、語(yǔ)言的應(yīng)用腳本語(yǔ)言已經(jīng)存在很長(zhǎng)時(shí)間,直到最近幾年,多方面因素的結(jié)合才使其顯得越發(fā)重要起來(lái)。其中最重要的因素是混合應(yīng)用向粘貼應(yīng)用的轉(zhuǎn)換。這種轉(zhuǎn)換的三個(gè)典型例子是GUIs,Internet、構(gòu)件框架。圖形用戶接口(GUI)GUIs首先出現(xiàn)于80年代早期,到了后期得到了廣泛的應(yīng)用。GUIs目前在一個(gè)程序設(shè)計(jì)工程中占有全部工作的一半或更多。GUIs是最根本的枯貼應(yīng)用,其目的并不是建立一些新的功能而是建立起圖形構(gòu)件庫(kù)和應(yīng)用的內(nèi)部功能之間的聯(lián)系。 InternetInternet的廣泛應(yīng)用也促進(jìn)了腳本語(yǔ)言的流行。Internet從本質(zhì)上來(lái)說(shuō)就是一個(gè)粘貼工具,它并沒(méi)有建立一些新的計(jì)算和數(shù)據(jù),只是使已經(jīng)存在的

24、大量數(shù)據(jù)可方便地被訪問(wèn)。用于Internet程序設(shè)計(jì)任務(wù)的最理想的語(yǔ)言是能夠很好地連接所有構(gòu)件在一起的腳本語(yǔ)言。例如.Perl被用來(lái)編寫(xiě)CGI腳本和JavaScript被用來(lái)編寫(xiě)Web頁(yè)。構(gòu)件框架面向腳本應(yīng)用的第三個(gè)例子是構(gòu)件框架,例如ActiveX和JavaBeanso高級(jí)程序設(shè)計(jì)語(yǔ)言適合于完成建立構(gòu)件的工作,而腳本語(yǔ)言適合于組織構(gòu)件成為應(yīng)用的工作。如果沒(méi)有一個(gè)好的腳本語(yǔ)言來(lái)處理構(gòu)件,那么構(gòu)件框架的強(qiáng)大功能就會(huì)失去。了解到這一點(diǎn)就會(huì)明白為什么構(gòu)件框架在以VB Script為便利的腳本工具的PCs中取得了巨大的成功。其它語(yǔ)言這篇文章并不針對(duì)所有編程語(yǔ)言的全部特性。目前許多語(yǔ)言并不能明確地將其區(qū)

25、分為高級(jí)程序設(shè)計(jì)語(yǔ)言或腳本語(yǔ)言,而是結(jié)合了此兩類語(yǔ)言的各自的優(yōu)點(diǎn)。例如,Visual Basi。語(yǔ)言就是這樣一種混合型語(yǔ)言。它綜合了腳本和高級(jí)程序設(shè)計(jì)語(yǔ)言各自的優(yōu).點(diǎn) ,既提供了大量GUI控件和對(duì)某些標(biāo)準(zhǔn)構(gòu)件框架如ActiveX粘貼功能的支持.同時(shí)又可以運(yùn)用屬于高級(jí)程序設(shè)計(jì)語(yǔ)言類的標(biāo)準(zhǔn)BASIC語(yǔ)句和函數(shù)編寫(xiě)程序。目前許多傳統(tǒng)的高級(jí)程序設(shè)計(jì)語(yǔ)言都在逐步開(kāi)展為混合語(yǔ)言,就連以自由靈活、低級(jí)高效著稱的C語(yǔ)言也是如此,如微軟公司的Visual C+6. 0.第二章 腳本語(yǔ)言和系統(tǒng)編程語(yǔ)言的互補(bǔ)性盡管對(duì)于粘貼型和系統(tǒng)集成型應(yīng)用程序,用腳本語(yǔ)言能以幾乎快10倍左右的速度開(kāi)發(fā),但是對(duì)于包含復(fù)雜算法和數(shù)據(jù)結(jié)

26、構(gòu)的系統(tǒng),系統(tǒng)編程語(yǔ)言的強(qiáng)類型性能夠使程序更容易控制.在那些運(yùn)行速度要求很高的地方,系統(tǒng)編程語(yǔ)言能以比腳本語(yǔ)言快10到20倍的速度運(yùn)行.而且腳本編程所使用的組件都需要用系統(tǒng)編程語(yǔ)言精心組織和編寫(xiě).顯然,兩類語(yǔ)言具有很強(qiáng)的互補(bǔ)性.把它們結(jié)合起來(lái)使用就能產(chǎn)生強(qiáng)大功能的編程環(huán)境:系統(tǒng)編程語(yǔ)言用于生成組件,腳本語(yǔ)言把它們組合起來(lái)構(gòu)成應(yīng)用程序。歷史的開(kāi)展也說(shuō)明了它們是互補(bǔ)的.從下表1可以看出,在過(guò)去的30年里,它們始終是同處于相同的環(huán)境之中,并沒(méi)有隨著時(shí)代的變遷而出現(xiàn)誰(shuí)代替誰(shuí)的情況。表1 腳本語(yǔ)言和系統(tǒng)編程語(yǔ)言的開(kāi)展統(tǒng)計(jì)表2.1 使用腳本語(yǔ)言開(kāi)發(fā)應(yīng)用程序的步驟 一般具有以下特征之一的應(yīng)用任務(wù),使用腳本語(yǔ)

27、言編程,可以成倍提高系統(tǒng)開(kāi)發(fā)速度,獲得更高的商業(yè)利潤(rùn)。.主要任務(wù)是連接已經(jīng)存在的組件.Web數(shù)據(jù)庫(kù)應(yīng)用.包含大量GUI圖形用戶接口.系統(tǒng)演變速度快在確定使用腳本語(yǔ)言開(kāi)發(fā)系統(tǒng)以后,在實(shí)施開(kāi)發(fā)時(shí),可按以下根本步驟進(jìn)行: 1)進(jìn)行應(yīng)用需求分析設(shè)計(jì),建立應(yīng)用組件框架;2)組件準(zhǔn)備:網(wǎng)絡(luò)下載,市場(chǎng)購(gòu)置或現(xiàn)場(chǎng)開(kāi)發(fā);3)選擇腳本語(yǔ)言和相關(guān)工具:根據(jù)組件特征和運(yùn)行環(huán)境,選擇適宜的腳本語(yǔ)言和相關(guān)工具;4)用腳本語(yǔ)言編寫(xiě)程序,粘貼組件,完成應(yīng)用開(kāi)發(fā).本文在LSPMIS的Web瀏覽器應(yīng)用系統(tǒng)的開(kāi)發(fā)中,遵循上述步驟,第1步,首先建立Web瀏覽器應(yīng)用系統(tǒng)組件框架模型(如圖2.1)。圖2.1 LSPMIS Web瀏覽器應(yīng)

28、用系統(tǒng)組件框架模型 整個(gè)LSPMIS Web瀏覽器應(yīng)用系統(tǒng)主要包括主控、發(fā)電、設(shè)備、熱工、物資、燃料、勞資、化學(xué)、綜合、可靠性、財(cái)務(wù)等28個(gè)子系統(tǒng)130個(gè)網(wǎng)頁(yè),每個(gè)網(wǎng)頁(yè)的功能都是實(shí)現(xiàn)數(shù)據(jù)的查詢,分析和顯示.系統(tǒng)使用的通用組件主要有:數(shù)據(jù)對(duì)象組件、內(nèi)容鏈接組件、文件系統(tǒng)組件、瀏覽器功能性組件、廣告轉(zhuǎn)子組件、曲線圖顯示組件、條形圖顯示組件、圓餅圖顯示組件、數(shù)據(jù)列表顯示組件等;專用組件有:設(shè)備可靠性分析組件、人員結(jié)構(gòu)分析組件、財(cái)務(wù)分析組件等.系統(tǒng)采用VBScript腳本語(yǔ)言粘貼組合各類公用組件和專用組件,形成對(duì)應(yīng)網(wǎng)頁(yè)的腳本程序,通過(guò)ASP(Active Server Page)5執(zhí)行網(wǎng)頁(yè)腳本程序,訪

29、問(wèn)DBMS,完成相應(yīng)功能。第2步,根據(jù)圖1進(jìn)行組件準(zhǔn)備,公用組件一局部從Internet下載,一局部從公司購(gòu)置;專用組件那么用Java語(yǔ)言自行設(shè)計(jì).第3步,根據(jù)組件的特征,選擇VBScript作為腳本語(yǔ)言.第4步,開(kāi)發(fā)小組通過(guò)2天學(xué)習(xí),熟悉VBScript,HTML,明確具體編程任務(wù).在實(shí)際編程過(guò)程中,由于有大量現(xiàn)存組件作根底和VBScript強(qiáng)有力的組件粘貼特性及組件的重用特性,使得我們的開(kāi)發(fā)工作共用了120個(gè)工作日就圓滿完成了,根據(jù)過(guò)去用C或C+開(kāi)發(fā)的經(jīng)驗(yàn),像這樣復(fù)雜的程序恐怕1200個(gè)工作日也完成不了。 腳本語(yǔ)言效果統(tǒng)計(jì)分析根據(jù)本文開(kāi)發(fā)的多個(gè)應(yīng)用系統(tǒng)以及國(guó)外的有關(guān)實(shí)例,分別對(duì)采用系統(tǒng)程序

30、設(shè)計(jì)語(yǔ)言C或C+、腳本語(yǔ)言VBScript、JavaScript進(jìn)行編程對(duì)源程序代碼行數(shù)以及行數(shù)比、腳本程序組件重用率、開(kāi)發(fā)費(fèi)用比、開(kāi)發(fā)周期比等特征參數(shù)進(jìn)行了統(tǒng)計(jì),其統(tǒng)計(jì)結(jié)果為表所示。表2.1 C或C+語(yǔ)言和腳本語(yǔ)言的效果分析注*組件重用率=各種組件使用總次數(shù)/不同組件個(gè)數(shù);*行數(shù)比=C或C+代碼行數(shù)/腳本代碼行數(shù) 從表2.1可以看出,使用腳本語(yǔ)言編程在減少編程工作量、提高組件重用率、縮短開(kāi)發(fā)周期、降低開(kāi)發(fā)費(fèi)用等方面較系統(tǒng)編程語(yǔ)言具有明顯的優(yōu)勢(shì),這一方法適應(yīng)了軟件組件體系結(jié)構(gòu)和組件技術(shù)的開(kāi)展。需要指出的是:在開(kāi)發(fā)一個(gè)實(shí)際的應(yīng)用系統(tǒng)時(shí),究竟采用什么樣的編程語(yǔ)言,這是需要認(rèn)真考慮的.正如作者在第3

31、節(jié)中指出的那樣,只有具有4個(gè)特征之一者,使用腳本語(yǔ)言編程才有顯著的效果.并且在設(shè)計(jì)系統(tǒng)時(shí),必須采用軟件組件體系結(jié)構(gòu)方法,盡量采用商用組件,以獲得更高的軟件生產(chǎn)效率。第三章 Windows腳本組件技術(shù)Windows腳本組件技術(shù)為開(kāi)發(fā)者提供了用腳本語(yǔ)言創(chuàng)立功能強(qiáng)大、可復(fù)用的COM組件的簡(jiǎn)便方式. 開(kāi)發(fā)者可以使用任何支持Microsoft ActivcX Scripting接口的腳本語(yǔ)言來(lái)創(chuàng)立腳本組件,支持這些接口的腳本語(yǔ)言有JScript, VB-Script和PERLScript等。使用腳本組件uJ以為多種任務(wù)創(chuàng)立COM組件,如訪問(wèn)和操作數(shù)據(jù)庫(kù)數(shù)據(jù)、給應(yīng)用程序添加事務(wù)處理以及使用DHTML Be

32、havior給Web頁(yè)添加交互效果等。腳本組件技術(shù)腳本組件的運(yùn)行腳本組件的運(yùn)行涉及三方面內(nèi)容:腳本組件運(yùn)行時(shí)程序( Scrobj.dll),接口處理程序和腳本組件文件(擴(kuò)展名為wsc)。(1)腳本組件運(yùn)行時(shí)程序Scrobj.dll)用來(lái)幫助將COM請(qǐng)求發(fā)送到腳本組件。Serobj.dll是主機(jī)應(yīng)用程序的入口點(diǎn)并作為腳本組件的inproc效勞器執(zhí)行。(2)接口處理程序是己經(jīng)編譯好的實(shí)現(xiàn)特定COM接口的組件。復(fù)雜的COM組件叫以包括多個(gè)接口的實(shí)現(xiàn)。最常使用的接口處理程序包括COM Automation接口處理程序、ASP接口處理程序以及用于DHTML Behavior的處理程序。這些處理程序都己內(nèi)

33、置于腳本組件運(yùn)行時(shí)程序中,其它處理程序叫作為外接組件或嵌在相關(guān)的應(yīng)用程序中。其中,Automation組件是最常使用的COM組件類刑,該組件擁有屬性和方法,其它應(yīng)用程序可以調(diào)用這些屬性和方法。實(shí)現(xiàn)這些功能所必需的低層次COM接口都內(nèi)置于Automation接口處理程序中。在腳本組件文件中只需定義需要說(shuō)明的屬性、方法和事件,便可確保主應(yīng)用程序?qū)u-tomation處理程序的正確調(diào)用。(3)腳本組件文件屬于可擴(kuò)展的標(biāo)記語(yǔ)言(eXtcnsiblcMarked Language,簡(jiǎn)稱XML)文件。用戶可遵循XML元索的規(guī)那么來(lái)開(kāi)發(fā)只包含簡(jiǎn)單函數(shù)功能的COM,也叫開(kāi)發(fā)包括外接組件的復(fù)雜COM。3腳本組

34、件文件的框架Windows腳本組件文件采用XML來(lái)編寫(xiě)。XML元索定義了腳本組件及其操作。下面的例如演示了個(gè)腳本組件文件的框架。其中幾個(gè)主要腳本元索意義如下:(1) 元索包含的是個(gè)完整的腳本組件定義。在同一個(gè).wsc文件中可出現(xiàn)多個(gè)元索,但這些元索應(yīng)包含在一個(gè)元索內(nèi)。(2) 元索包括用來(lái)將腳本組件注冊(cè)為C_OM組件的信息。如果宿主應(yīng)用程序(如IE)在創(chuàng)立該腳本組件的實(shí)例時(shí)沒(méi)有直接用到Window、注冊(cè)表,那么該元索可省略。(3)元素包含用來(lái)實(shí)現(xiàn)腳本組件邏輯的腳本,這取決于所創(chuàng)立的COM組件類型。如果開(kāi)發(fā)者創(chuàng)立的是COM Automation組件,-那么可以在元素中聲明屬性、方法和事件,然后用一

35、個(gè)或多個(gè)元素編寫(xiě)腳本來(lái)定義這些內(nèi)容。(4 ) 元素引用在腳本中需使用的類型庫(kù). 3.腳本組件的使用在Windows資源管理器中, 用鼠標(biāo)右鍵單擊腳本組件(.wsc) 文件,然后選擇注冊(cè),或者使用新發(fā)布的Regsvr32.exe注冊(cè)程序,并使用下述命令。R在創(chuàng)立和注冊(cè)Windows腳本組件后,就可以像使用任何COM組件一樣,通過(guò)宿主應(yīng)用程序調(diào)用來(lái)使用該腳本組件。宿主應(yīng)用程序可以是VB、C+、IE等應(yīng)用程序。根據(jù)宿主應(yīng)用程序和腳本組件類型,以及部署該腳本組件的位置,在創(chuàng)立腳本組件的實(shí)例時(shí)會(huì)有各種選項(xiàng)。其中最主要的差異是在本地還是遠(yuǎn)程創(chuàng)立腳本組件的實(shí)例。實(shí)例化本地組件實(shí)例化遠(yuǎn)程組件3.2腳本組件應(yīng)用

36、實(shí)例編寫(xiě)腳本組件不像使用VC、VB等高級(jí)語(yǔ)言編寫(xiě)COM組件那樣需要復(fù)雜的集成開(kāi)發(fā)環(huán)境。開(kāi)發(fā)者只需使用簡(jiǎn)單的文本編輯器就可以進(jìn)行腳本組件的開(kāi)發(fā)。下面結(jié)合一個(gè)腳本組件實(shí)例簡(jiǎn)要闡述應(yīng)用腳本組件進(jìn)行系統(tǒng)業(yè)務(wù)開(kāi)發(fā)的過(guò)程。這個(gè)腳本組件將連接數(shù)據(jù)庫(kù)效勞器,并翻開(kāi)數(shù)據(jù)庫(kù)連接.3.腳本組件文件3.應(yīng)用腳本組件創(chuàng)立和注冊(cè)腳本組件以后,開(kāi)發(fā)者就可以在VC、VB、IE等宿主程序中使用組件,如下是在IE中使用組件的一個(gè)例子。開(kāi)發(fā)者除了可以像以上直接實(shí)例化組件對(duì)象使用腳本組件外,還可以為腳本組件生成一個(gè)類型庫(kù),該類型庫(kù)包括組件的接口和成員的信息。在有些宿主應(yīng)用程序如VB中,如果要給腳本組件編寫(xiě)事件能力,那么類型庫(kù)是必需的

37、。使用類型庫(kù)可以將事件綁定到腳本組件上,并且在VB中可見(jiàn)。此外,在編寫(xiě)腳本組件的相關(guān)VB代碼時(shí),對(duì)象瀏覽器中將出現(xiàn)類型庫(kù)信息,從而使開(kāi)發(fā)者能夠很方便地查看和使用腳本組件的方法、事件等成員。開(kāi)發(fā)者可以像以下這樣為一個(gè)腳本組件生成類型庫(kù)。在Windows資源管理器中,用鼠標(biāo)右鍵單擊腳本組件文件,然后選擇生成類型庫(kù)。這將為腳本組件生成一個(gè)與腳本組件文件名同名的.tlb文件,并在Windows注冊(cè)表中注冊(cè)。該文件將與腳本組件文件處在同一文件夾。如果要更精確控制類型庫(kù)的生成,開(kāi)發(fā)者可以在腳本組件文件中動(dòng)態(tài)地生成類型庫(kù),或者也可以使用命令行接口,如下為腳本組件創(chuàng)立了一個(gè)類型庫(kù)。第四章 C/C+代碼自動(dòng)生成

38、腳本語(yǔ)言接口的實(shí)現(xiàn)國(guó)內(nèi)外現(xiàn)狀解決腳本語(yǔ)言和C/C+代碼集成的主要方法是開(kāi)發(fā)一個(gè)可擴(kuò)展的接口編譯器,將C/C+代碼轉(zhuǎn)換成指定的腳本語(yǔ)言接口。這樣,很多問(wèn)題就迎刃而解。比擬知名的工具有:1SWIGsimplified wrapper and interface generator:它是由一個(gè)具有特殊用途的C+編譯器開(kāi)展而來(lái)的。最早出現(xiàn)在1995年Los Alamos國(guó)家實(shí)驗(yàn)室,用來(lái)為SPaSM短程分子動(dòng)態(tài)學(xué)代碼生成腳本語(yǔ)言接口。2F2PYFortran to Python interface generator:主要是在Fortan和Python之間提供一個(gè)連接。它實(shí)際上是Python的一個(gè)擴(kuò)展工

39、具,根據(jù)指示文件產(chǎn)生Python C/API模塊。它不支持C/C+。我們自己設(shè)計(jì)了一個(gè)IGInterface Generator可擴(kuò)展的接口編譯器。它支持Tcl、Python、Perl和C、C+等多種語(yǔ)言,同時(shí)也高效地支持了C/C+高級(jí)編程風(fēng)格。目前,IG用于自動(dòng)測(cè)試工具中并取得了良好的效果。隨著IG的不斷優(yōu)化,其用途必將越來(lái)越廣??蓴U(kuò)展的編譯器IGIG是一個(gè)簡(jiǎn)化腳本語(yǔ)言和科學(xué)軟件集成的接口編譯器,但不是一個(gè)完整的C/C+編譯器。其根本原理是:直接把C/C+頭文件編譯成腳本語(yǔ)言接口。 IG的實(shí)現(xiàn).1實(shí)現(xiàn)IG的前端是由一個(gè)擴(kuò)展的C+預(yù)處理器和分析器組成,但它們的實(shí)現(xiàn)方式與傳統(tǒng)的不一樣。原因在于它

40、們的輸入文件同時(shí)混合了特殊的IG指示(前面以%開(kāi)頭)和C+聲明。IG主要關(guān)心的是接口,因此不會(huì)去分析函數(shù)體。從內(nèi)部來(lái)說(shuō),IG構(gòu)造了一個(gè)完整的分析樹(shù)并提供了一個(gè)橫向的API。那些API與XML-DOM標(biāo)準(zhǔn)中所描述的相類似。在代碼生成期間,一系列分層次的處理函數(shù)來(lái)處理分析樹(shù)節(jié)點(diǎn)。處理函數(shù)會(huì)決定是直接生成包代碼還是轉(zhuǎn)換節(jié)點(diǎn)并交給其它處理函數(shù)來(lái)處理。利用C+類虛擬方法選擇機(jī)制來(lái)定義每個(gè)目標(biāo)語(yǔ)言的行為。從最小要求來(lái)看,一個(gè)語(yǔ)言模型僅僅需要實(shí)現(xiàn)產(chǎn)生函數(shù)和變量的處理函數(shù)。例如:為了能對(duì)類和結(jié)構(gòu)體打包,一個(gè)語(yǔ)言模型通常會(huì)實(shí)現(xiàn)更多的處理函數(shù)。下面是IG實(shí)現(xiàn)Tcl語(yǔ)言模型:其余的語(yǔ)言模型實(shí)現(xiàn)方式都是類似的。.2

41、IG組織結(jié)構(gòu)圖1顯示了IG的組織結(jié)構(gòu)。預(yù)處理器的功能是實(shí)現(xiàn)條件編譯和宏擴(kuò)展,生成IG和C編譯器都可接受的接口/頭文件。IG的核心局部是一個(gè)YACCYet AnotherCompiler-Compiler分析器。分析器的輸入是一個(gè)包含IG指示和聲明的文件。為了生成代碼,分析器調(diào)用大約10多個(gè)的函數(shù)來(lái)實(shí)現(xiàn)如下的一些功能:寫(xiě)一個(gè)包裝函數(shù),連接一個(gè)變量,對(duì)一個(gè)C+成員函數(shù)打包等。每個(gè)目標(biāo)語(yǔ)言都是以一個(gè)C+類來(lái)實(shí)現(xiàn)的。當(dāng)然,這個(gè)類也包含能產(chǎn)生C代碼的函數(shù)。文檔系統(tǒng)實(shí)現(xiàn)的方式也是類似的。能產(chǎn)生的文檔有:ASCII,LaTeX或HTML。IG的輸出是一個(gè)C文件和一個(gè)文檔文件。C文件也可以集成到解釋器中;文檔

42、文件僅供大家參考。圖1 IG的組織結(jié)構(gòu)關(guān)鍵技術(shù)該小節(jié)主要解決類型、類、對(duì)象和一些C+高級(jí)編程風(fēng)格的轉(zhuǎn)換問(wèn)題。.1類型體系實(shí)現(xiàn)IG真正的問(wèn)題在于復(fù)雜的類型體系。對(duì)于類型,需要正確地處理程序中的typedef,名字空間和其它類型相關(guān)的聲明。類型是語(yǔ)言之間數(shù)據(jù)編組的焦點(diǎn);同時(shí)也是許多C+問(wèn)題包括:內(nèi)存管理,重載,模板和繼承的根底。IG的默認(rèn)方法是:導(dǎo)出所有的非根本的類型并把它們看成是非透明的類型標(biāo)簽指針。這樣就可以防止上述相關(guān)問(wèn)題;同時(shí)在腳本解釋器中可以操作任何類型的對(duì)象。IG使用一個(gè)運(yùn)行類型體系來(lái)確認(rèn):只有可以接受的類型指針才傳遞到包中。下面以指針為例來(lái)分析IG處理類型的方法。IG把指針映射成包括

43、值和類型的字符串。例如,一個(gè)Vector*指針在Python中類似:_100f8e2_p_Vector。在Python中,指針是非透明的對(duì)象。但能夠在不同的C函數(shù)之間傳遞并操作??偟恼f(shuō)來(lái),指針在Python中和C中的工作方式是一樣的。二者根本區(qū)別在于:Python中不能廢棄指針。換言之,不能夠查看對(duì)象內(nèi)部并進(jìn)行操作。這樣做的好處在于,防止了許多數(shù)據(jù)表示相關(guān)的難題,并且適合多目標(biāo)語(yǔ)言。其實(shí),Python中操作C+對(duì)象也是采用類似指針的方法。結(jié)構(gòu)體和聯(lián)合體的實(shí)現(xiàn)機(jī)制與節(jié)中的類實(shí)現(xiàn)相似。.2類和對(duì)象對(duì)于面向?qū)ο缶幊虂?lái)說(shuō),IG把過(guò)程和變量映射到目標(biāo)語(yǔ)言等價(jià)對(duì)象中去。例如,一個(gè)C函數(shù)映射成腳本語(yǔ)言中的一

44、個(gè)命令,一個(gè)全局變量映射成腳本語(yǔ)言中的變量。對(duì)于C+來(lái)說(shuō),IG能夠創(chuàng)立一個(gè)真實(shí)反映目標(biāo)語(yǔ)言中類接口的包。例如,定義一個(gè)類如下:為把類打包,首先把類壓縮成過(guò)程包。如:接下來(lái),這些過(guò)程用來(lái)構(gòu)建用目標(biāo)語(yǔ)言寫(xiě)的代理類。如,用Python:在代理類中,對(duì)于下層的C+對(duì)象保存在一個(gè)特殊的屬性中.this。屬性值包括指針值和類型表示符。例如,一個(gè)Complex*對(duì)象的屬性值:_100f8ea0_p_Complex在包中的類型信息用于運(yùn)行類型檢查。類型檢查遵循C+相同的規(guī)那么,如:繼承,域和typedef。此外,IG完全支持多重繼承。.3特殊的指示對(duì)于復(fù)雜的應(yīng)用程序,IG可能需要一些幫助才能產(chǎn)生包。IG提供了

45、很多特殊的指示用來(lái)控制包代碼產(chǎn)生。這些指示可以放在輸入文件的任何地方,也可以與C+聲明混合。假設(shè)想把C+重載操作符與Python操作符聯(lián)系起來(lái)。一種方法如下:特殊的指示還可以解決如其它一些問(wèn)題:C+中的模板和目標(biāo)語(yǔ)言并不支持的C+風(fēng)格。例如,Python中的賦值語(yǔ)法完全不同于C+中的。于是,可以忽略賦值操作符:.4自定義利用一些特殊的指示可以修改IG代碼生成器。最常用的指示如類型映射。類型映射改變IG中轉(zhuǎn)換包中函數(shù)數(shù)據(jù)的方式并集成到類型體系中。其余自定義是與所有聲明有關(guān)。例如,如果想在一個(gè)指定的類方法中獲得一個(gè)C+異常并轉(zhuǎn)換成一個(gè)Python異常,那么可以按如下方法:如果Object是一個(gè)基類

46、,異常處理代碼會(huì)被粘貼到衍生類中出現(xiàn)getitem的地方。既然只需定義一次且衍生類自動(dòng)繼承,所以這種方法非常有利于用抽象類定義接口。常見(jiàn)的自定義指示有:%rename,用于解決名字沖突;%ignore,忽略無(wú)用的C+風(fēng)格;%exception;%extend,簡(jiǎn)單的使用新屬性來(lái)擴(kuò)展已經(jīng)存在的類和結(jié)構(gòu);%feature等.其具體應(yīng)用參考IG用戶手冊(cè)。事實(shí)上,大量的IG指示只不過(guò)是宏的預(yù)處理,最后都擴(kuò)展成%typemap或%feature指示。4.3小結(jié)及以后的工作IG是一個(gè)簡(jiǎn)化腳本腳本語(yǔ)言和科學(xué)軟件集成的編譯器。它特別適合現(xiàn)有軟件并支持一系列的C+語(yǔ)言特點(diǎn)。使用自動(dòng)代碼生成器如IG,程序人員很容

47、易在程序開(kāi)發(fā)的各個(gè)階段使用腳本語(yǔ)言。科學(xué)家利用腳本語(yǔ)言很容易構(gòu)造集數(shù)據(jù)分析、可視化、數(shù)據(jù)庫(kù)管理和網(wǎng)絡(luò)等一體的軟件。設(shè)計(jì)IG的目的是用來(lái)支持C/C+開(kāi)發(fā)軟件,它不適合其他語(yǔ)言。IG不是一個(gè)完整的C+編譯器,也不支持某些先進(jìn)的C+特性,如嵌套類定義。此外,諸如重載操作符和模板也需要額外的指示。IG以后的工作主要集中在生成代碼的質(zhì)量,支持更多的語(yǔ)言和增加可靠的特點(diǎn)。參考資料1 ?Windows腳本技術(shù)? 介紹Windows腳本的根底知識(shí) HYPERLINK :/download.microsoft /download/winscript56/Install/5.6/W982KMe/CN/scd56chs.exe t _blank 2 WMITools學(xué)習(xí)腳本必備,包括CIM Studio、Event Registration、Event Viewer和Object Browser四個(gè)工具 HYPERLINK :/download.microsoft /download/.NetStandardServer/Install/V1.1/NT5XP

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論