時(shí)間:2023-05-29 17:46:53
開篇:寫作不僅是一種記錄,更是一種創(chuàng)造,它讓我們能夠捕捉那些稍縱即逝的靈感,將它們永久地定格在紙上。下面是小編精心整理的12篇c語(yǔ)言開發(fā),希望這些內(nèi)容能成為您創(chuàng)作過(guò)程中的良師益友,陪伴您不斷探索和進(jìn)步。
關(guān)鍵詞 微機(jī)原理與接口 匯編語(yǔ)言與C語(yǔ)言比較
中圖分類號(hào):TP368.1 文獻(xiàn)標(biāo)識(shí)碼:A
0 引言
“微機(jī)原理與接口”是信息學(xué)科的一門必修課,主要介紹8086微處理器的原理及其擴(kuò)展接口的應(yīng)用。然而8253芯片是接口芯片中的一個(gè)重要組成部分,因此本文就從8253出發(fā),闡述用匯編語(yǔ)言和C語(yǔ)言對(duì)其開發(fā),讓學(xué)生更好地用軟件對(duì)硬件進(jìn)行開發(fā)。
1 8253知識(shí)點(diǎn)進(jìn)行描述
8253工作方式:
1.1 頻率發(fā)生器
在該方式下,計(jì)數(shù)器裝入初值,開始工作后,計(jì)數(shù)器的輸出OUT將連續(xù)輸出一個(gè)時(shí)鐘周期寬的負(fù)脈沖。兩負(fù)脈沖之間的時(shí)鐘周期數(shù)就是計(jì)數(shù)器裝入的初值。在這種初始方式下,門控信號(hào)GATE用作控制信號(hào)。當(dāng)GATE為低電平時(shí),強(qiáng)迫OUT輸出高電平。當(dāng)GATE為高電平時(shí),分頻開始。時(shí)序波形如圖1所示。
1.2 方波產(chǎn)生器
當(dāng)裝入數(shù)值為N時(shí),若N為偶數(shù),則完成N/2計(jì)數(shù)時(shí)OUT為高電平,完成另外N/2計(jì)數(shù)時(shí)OUT低電平,一直進(jìn)行下去。若N為奇數(shù),則(N+1)/2計(jì)數(shù)時(shí)OUT保持高電平,而(N-1)/2計(jì)數(shù)期間OUT為低電平。在GATE為高電平的時(shí),產(chǎn)生對(duì)稱方波。時(shí)序波形如圖2所示。
1.3 C語(yǔ)言的優(yōu)點(diǎn)
C語(yǔ)言是一種計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,它既具有高級(jí)語(yǔ)言的特點(diǎn),又具有匯編語(yǔ)言的特點(diǎn)。C語(yǔ)言已先后被移植到大、中、小及微型機(jī)上,它可以作為工作系統(tǒng)設(shè)計(jì)語(yǔ)言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計(jì)語(yǔ)言,編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序。由于C語(yǔ)言的易可移植性,在嵌入式系統(tǒng)里面應(yīng)用廣泛。
1.4 匯編語(yǔ)言的優(yōu)點(diǎn)
匯編語(yǔ)言是面向機(jī)器的程序設(shè)計(jì)語(yǔ)言。匯編語(yǔ)言是一種功能很強(qiáng)的程序設(shè)計(jì)語(yǔ)言,也是利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的語(yǔ)言。匯編語(yǔ)言的長(zhǎng)處在于編寫高效且需要對(duì)機(jī)器硬件精確控制的程序。
總之,雖然匯編語(yǔ)言執(zhí)行起來(lái)速度比較快,但開發(fā)起來(lái)比較麻煩,尤其是8086架構(gòu)里面只有有限的寄存器,在開發(fā)大型的軟件時(shí)就會(huì)顯得捉襟見肘,采用C語(yǔ)言開發(fā)就可以提高代碼的質(zhì)量,用一句C就可以代替好幾句匯編語(yǔ)言,會(huì)讓開發(fā)人員輕松很多,更會(huì)讓很多初學(xué)者對(duì)嵌入式系統(tǒng)的開發(fā)產(chǎn)生興趣。
2 實(shí)例:C語(yǔ)言方式下和匯編語(yǔ)言下控制8253
8253控制端口地址為 203H;計(jì)數(shù)器0地址為 200H;計(jì)數(shù)器1地址為 201H;計(jì)數(shù)器2地址為 202H。
outportb(0x203, 0x56)
//56H(01010110B).選擇計(jì)數(shù)器1,低八位讀寫,方式3(方波發(fā)生器),二進(jìn)制計(jì)數(shù).
outportb(0x201, 8); // 向計(jì)數(shù)器1寫入低八位初值8H(00001000B).
outportb(0x203, 0x94); // 向8253控制端口寫控制字94H(10010100B)。選擇計(jì)數(shù)器2,低八位后讀寫,方式2(分頻脈沖發(fā)生器),二進(jìn)制計(jì)數(shù)。
outportb(0x202, 6); // 向計(jì)數(shù)器2寫入低八位初值6H(00000110B).
如果使用匯編語(yǔ)言程序,則變成
MOV DX,203H;指向控制端口
MOV AL, 56H ;設(shè)置工作方式
OUT DX, AL;往端口送數(shù)據(jù)
MOV DX, 201H;指向計(jì)數(shù)器1
MOV AL, 8;給計(jì)數(shù)值
OUT DX, AL;往端口送數(shù)據(jù)
MOV DX,203H;指向控制端口
MOV AL,94H;設(shè)置工作方式
OUT DX,AL;往端口送數(shù)據(jù)
MOV DX,202H;指向計(jì)數(shù)器2
MOV AL,6;給計(jì)數(shù)值
OUT DX,AL;往端口送數(shù)據(jù)
從中可以直觀地可以看出,如果使用匯編語(yǔ)言對(duì)8253寫入控制字MOV DX,203H,MOV AL,36H,OUT DX,AL,需要三條語(yǔ)句完成,而且需要3個(gè)寄存器,并且寄存器本來(lái)就是很少的了,這樣很浪費(fèi)資源;用C語(yǔ)言只需調(diào)用outport函數(shù):outport(0x203,0x36),C語(yǔ)言的代碼長(zhǎng)度短了很多,并且也方便學(xué)生們掌握,使學(xué)生在嵌入式軟件開發(fā)上產(chǎn)生更多的興趣,為大型嵌入式軟件的開發(fā)奠定堅(jiān)實(shí)的基礎(chǔ)。
3 結(jié)束語(yǔ)
根據(jù)本文比較C語(yǔ)言和匯編語(yǔ)言對(duì)8253的開發(fā),會(huì)讓更多的學(xué)生明白C語(yǔ)言作為一種面向結(jié)構(gòu)的語(yǔ)言對(duì)嵌入式系統(tǒng)開發(fā)的優(yōu)勝性,希望越來(lái)越多的學(xué)生在微機(jī)原理和接口的實(shí)驗(yàn)課上,采用C語(yǔ)言進(jìn)行開發(fā),削減代碼量,提高效率。由于目前我國(guó)正處于信息化高速建設(shè)的時(shí)代,對(duì)嵌入式系統(tǒng)的開發(fā)水平也決定著我國(guó)在世界上的影響力。因此,讓更多的學(xué)生學(xué)會(huì)用更高效的語(yǔ)言進(jìn)行嵌入式系統(tǒng)軟件的開發(fā)顯得尤其重要,本文就此發(fā)表自己的看法。
參考文獻(xiàn)
[1] 馬義德,張?jiān)诜澹旃庵殴鸱?微型計(jì)算機(jī)原理及應(yīng)用(第二版).北京:高等教育出版社,2001.
[2] 王永山,楊宏五.微型計(jì)算機(jī)原理與應(yīng) 用(第二版).西安:西安電子科技大學(xué)出版社,1999.5.
摘要:近些年來(lái),隨著時(shí)代經(jīng)濟(jì)的飛速發(fā)展以及科技的進(jìn)步,當(dāng)下主流的編程語(yǔ)言中,C++語(yǔ)言作為一種特殊的編程語(yǔ)言,主要來(lái)源于C語(yǔ)言的演化,同時(shí)C++語(yǔ)言跨平臺(tái)軟件開發(fā)的如何設(shè)計(jì)始終是當(dāng)前軟件開發(fā)行業(yè)領(lǐng)域研究的熱點(diǎn)之一。本文在對(duì)基于C++語(yǔ)言的跨平臺(tái)軟件開發(fā)設(shè)計(jì)研究時(shí),首先分析了C++語(yǔ)言,其次分析了跨平臺(tái)軟件開發(fā)環(huán)境,最后探討總結(jié)了C++語(yǔ)言的跨平臺(tái)軟件開發(fā)設(shè)計(jì)過(guò)程。
關(guān)鍵詞 :C++語(yǔ)言;跨平臺(tái);軟件開發(fā);設(shè)計(jì)研究
現(xiàn)如今計(jì)算機(jī)語(yǔ)言中C++語(yǔ)言使用頻率和次數(shù)最多,同時(shí)編程速度較高,進(jìn)而廣泛的應(yīng)用于跨平臺(tái)軟件的開發(fā)設(shè)計(jì)中。跨平臺(tái)作為軟件開發(fā)中的重要概念之一,不僅僅依賴于實(shí)際的操作系統(tǒng),結(jié)合跨平臺(tái)開發(fā)的實(shí)際需求,逐漸推動(dòng)了現(xiàn)代化軟件工程的蓬勃發(fā)展。因此本文對(duì)基于C++語(yǔ)言的跨平臺(tái)軟件開發(fā)設(shè)計(jì)進(jìn)行研究有一定的經(jīng)濟(jì)價(jià)值和現(xiàn)實(shí)意義。
1、C++語(yǔ)言的相關(guān)概述
C++語(yǔ)言主要是由C語(yǔ)言演化而來(lái)的,C語(yǔ)言開發(fā)演化過(guò)程中,逐漸注重系統(tǒng)軟件開發(fā)的特性,并伴隨著C++語(yǔ)言的興起,其新特性逐漸增加。當(dāng)前C++語(yǔ)言和其它相對(duì)高級(jí)的語(yǔ)言相比較而言,有著特殊的運(yùn)行性能,在實(shí)際的運(yùn)行過(guò)程中,并不需要借助于虛擬機(jī)將其作為中介,進(jìn)而將C++語(yǔ)言的運(yùn)行效率顯著提高。
同時(shí)C++語(yǔ)言在實(shí)際的開發(fā)過(guò)程中,往往有著相對(duì)較低的開發(fā)成本,C++語(yǔ)言應(yīng)用的過(guò)程中,逐漸被引入各種各樣的特性,將其在泛型編程拓展過(guò)程中,對(duì)于高層次的軟件工程問(wèn)題有著一定的積極作用。
總之,C++語(yǔ)言有著相對(duì)根本性的優(yōu)勢(shì),不僅僅可以用于高級(jí)系統(tǒng)程序的設(shè)計(jì)和3D游戲的開發(fā)應(yīng)用,同時(shí)也可用于數(shù)值科學(xué)計(jì)算以及通用程序設(shè)計(jì)等。
2、跨平臺(tái)軟件開發(fā)環(huán)境
2.1 跨平臺(tái)的相關(guān)概念
跨平臺(tái)作為現(xiàn)代化軟件開發(fā)中相對(duì)重要的一種概念,不僅僅對(duì)操作系統(tǒng)沒(méi)有一定的依賴性,同時(shí)對(duì)于硬件環(huán)境也沒(méi)有一定的依賴性,而在實(shí)際的開發(fā)應(yīng)用程序過(guò)程中,更要將其在另一個(gè)操作系統(tǒng)下保持有著正常性的運(yùn)行,基于跨平臺(tái)的實(shí)際需求,就要結(jié)合現(xiàn)代軟件工程的發(fā)展,對(duì)各種不同的平臺(tái)加以支持,進(jìn)而將其帶給市場(chǎng)的潛力充分發(fā)揮。
2.2 跨平臺(tái)軟件開發(fā)需要的環(huán)境
一般而言,開發(fā)環(huán)境構(gòu)成的過(guò)程中,往往需要有著一定的軟件編輯器、程序調(diào)試器以及程序編譯器三種,但是就其實(shí)質(zhì)性而言,Sandbox這種軟件不僅僅可以實(shí)現(xiàn)代碼的編譯,同時(shí)也可實(shí)現(xiàn)代碼的調(diào)試,其內(nèi)部同樣各種各樣的平臺(tái)中往往需要有著各種各樣的代碼庫(kù)和依賴庫(kù)。開發(fā)程序中,同樣也存在多種類型的源代碼,在C++語(yǔ)言的軟件開發(fā)和編譯中,就要做好最終結(jié)果質(zhì)量的控制,并有最好的代碼產(chǎn)生,在對(duì)錯(cuò)誤捕捉和調(diào)試過(guò)程中往往需要一定的支持。
跨平臺(tái)軟件開發(fā)主要是將抽象實(shí)現(xiàn)的一種重要因素,往往需要將抽象以及相關(guān)的一些設(shè)計(jì)逐漸的借助于新的開發(fā)手段進(jìn)行開發(fā)研究,實(shí)現(xiàn)在不同平臺(tái)上都能實(shí)現(xiàn)特殊的編譯。
3、C++語(yǔ)言的跨平臺(tái)軟件開發(fā)設(shè)計(jì)
C++語(yǔ)言跨平臺(tái)軟件開發(fā)設(shè)計(jì)過(guò)程中,更要做好各個(gè)環(huán)節(jié)的綜合設(shè)計(jì),就其實(shí)質(zhì)性而言,C++語(yǔ)言的跨平臺(tái)軟件開發(fā)設(shè)計(jì)可以從以下幾個(gè)環(huán)節(jié)做起:
3.1 將語(yǔ)言的擴(kuò)展特性避免
一般而言,任何語(yǔ)言在編程的過(guò)程中,往往都是對(duì)相對(duì)較老的程序以及文件進(jìn)行選擇。這些相對(duì)較老的程序包含一些原有的程序和基本公式,相對(duì)來(lái)說(shuō)這些程序和公式不僅僅有著規(guī)范性,同時(shí)也有著標(biāo)準(zhǔn)型,而當(dāng)前現(xiàn)代化的新程序庫(kù)相對(duì)來(lái)說(shuō)是雜亂無(wú)章的,在跨平臺(tái)上產(chǎn)生過(guò)程中,常常面臨各種各樣的故障,雖然會(huì)獲得一定的支持,同時(shí)也會(huì)有不精確定義的事故存在。
C++語(yǔ)言的跨平臺(tái)軟件開發(fā)設(shè)計(jì)過(guò)程中,就要避免語(yǔ)言存在一定的擴(kuò)展特性,這種跨平臺(tái)開發(fā)過(guò)程中往往有著相對(duì)較高的異常靈敏度,無(wú)限度的對(duì)新特性利用中,就要借助于C++語(yǔ)言標(biāo)準(zhǔn)函數(shù)的基本模型,并保證開發(fā)軟件和產(chǎn)品有著相對(duì)較強(qiáng)的穩(wěn)定性。
3.2 將動(dòng)態(tài)處理實(shí)現(xiàn)
C++語(yǔ)言跨平臺(tái)軟件開發(fā)中,就要對(duì)多種環(huán)境運(yùn)行的可移植代碼庫(kù)加以編寫,在實(shí)際的項(xiàng)目開發(fā)過(guò)程中,就要對(duì)可能存在的問(wèn)題加以避免,并處理好一個(gè)平臺(tái)在另一個(gè)平臺(tái)上沒(méi)有特性這一問(wèn)題,進(jìn)而實(shí)現(xiàn)動(dòng)態(tài)性的處理。
3.3 借助于腳本文件實(shí)現(xiàn)管理
就C++語(yǔ)言的跨平臺(tái)軟件開發(fā)設(shè)計(jì)而言,就要做好腳本文件的基本管理工作,保證編寫的程序代碼不僅僅有著簡(jiǎn)單易懂的特點(diǎn),同時(shí)也要有著一定的簡(jiǎn)潔性,對(duì)合理的軟件結(jié)構(gòu)進(jìn)行構(gòu)建,將和平臺(tái)相關(guān)的一些文件以及數(shù)據(jù)庫(kù)充分的分隔,在實(shí)際的開發(fā)過(guò)程中借助于腳本文件進(jìn)行某種程度上的編譯,將其在各個(gè)部位合理的分配。對(duì)應(yīng)用程序使用的過(guò)程中,就要將配置文件中的相關(guān)配置選項(xiàng)調(diào)出來(lái),進(jìn)而將里面的程序讀取,并在跨平臺(tái)軟件開發(fā)過(guò)程中,盡可能的保證平臺(tái)相關(guān)聯(lián)的文件進(jìn)行全部的分離,借助于特殊的手段將該功能充分實(shí)現(xiàn)。
3.4 對(duì)安全的數(shù)據(jù)串行化使用
現(xiàn)如今,C++語(yǔ)言的跨平臺(tái)軟件開發(fā)設(shè)計(jì)過(guò)程中,對(duì)于如何保證跨平臺(tái)數(shù)據(jù)存儲(chǔ)的安全性和可靠性這一問(wèn)題,始終是當(dāng)前軟件開發(fā)設(shè)計(jì)的核心問(wèn)題之一,而C++語(yǔ)言的跨平臺(tái)軟件開發(fā)設(shè)計(jì)過(guò)程中,可以借助于軟件的fread指令,做好對(duì)每個(gè)編譯器和單一目標(biāo)平臺(tái)的綜合性處理,并在實(shí)際的跨平臺(tái)操作環(huán)境中,借助于實(shí)際方法對(duì)數(shù)據(jù)進(jìn)行不同程度上的存儲(chǔ)和加載,進(jìn)而對(duì)平臺(tái)的獨(dú)立性加以保障,借助于跨平臺(tái)將數(shù)據(jù)在目標(biāo)文件進(jìn)行存儲(chǔ)過(guò)程中,一般而言,不同的平臺(tái)間往往有著一定的差異,在實(shí)際的處理過(guò)程中,同樣也將會(huì)有著多樣性的結(jié)果特征。
3.5 C++語(yǔ)言跨平臺(tái)開發(fā)中的編譯和測(cè)試
C++語(yǔ)言跨平臺(tái)開發(fā)變異和測(cè)試過(guò)程中,更要做好科學(xué)化的編譯和測(cè)試,在實(shí)際的跨平臺(tái)軟件開發(fā)過(guò)程中,盡可能的保證相關(guān)聯(lián)的一些代碼在長(zhǎng)時(shí)間的使用過(guò)程中,保證其代碼可以在另外的平臺(tái)上加以檢測(cè),并借助于不同的平臺(tái)進(jìn)行測(cè)試,進(jìn)而將bug及時(shí)的發(fā)現(xiàn)。
3.6 實(shí)現(xiàn)抽象
一般而言,實(shí)現(xiàn)抽象主要是對(duì)跨平臺(tái)應(yīng)用程序中被移植過(guò)程中有著一定的有效性,通過(guò)對(duì)這種方式加以借用,進(jìn)而實(shí)現(xiàn)軟件的單獨(dú)性開發(fā),并將具有獨(dú)立性和簡(jiǎn)潔性的程序拿出,在實(shí)際的跨平臺(tái)開發(fā)設(shè)計(jì)過(guò)程中,往往需要對(duì)多種函數(shù)進(jìn)行利用,進(jìn)而在實(shí)際的開發(fā)過(guò)程中,并不用對(duì)所有的函數(shù)進(jìn)行變異,而C++語(yǔ)言跨平臺(tái)軟件設(shè)計(jì)過(guò)程中,主要是對(duì)封裝方法加以采用,進(jìn)而將抽象的過(guò)程實(shí)現(xiàn),這種封裝方法相對(duì)來(lái)說(shuō),需要視情況而定,一旦存在相對(duì)特殊的情況時(shí),就要借助于其它的方式做好程序的基本調(diào)用工作,并做好對(duì)該功能的基礎(chǔ)命名工作。實(shí)現(xiàn)抽象的過(guò)程中,一旦對(duì)該程序及其公式使用之后,就要將該功能的主要程序直接調(diào)用,并將該功能充分實(shí)現(xiàn)。
3.7 C++語(yǔ)言跨平臺(tái)軟件開發(fā)的實(shí)現(xiàn)過(guò)程
C++語(yǔ)言跨平臺(tái)軟件設(shè)計(jì)開發(fā)的實(shí)現(xiàn)過(guò)程中,首先就要做好功能模塊實(shí)現(xiàn)過(guò)程和非功能模塊實(shí)現(xiàn)過(guò)程,在代碼編寫之前,就要對(duì)源代碼在文本編寫過(guò)程中的相關(guān)編輯策略加以規(guī)定,對(duì)\t格式加以統(tǒng)一,并使得代碼的結(jié)構(gòu)盡可能有著簡(jiǎn)單化的基本特點(diǎn)。
C++語(yǔ)言跨平臺(tái)軟件開發(fā)實(shí)現(xiàn)過(guò)程,同樣也要對(duì)統(tǒng)一的工程寶建立,并對(duì)跨平臺(tái)的代碼庫(kù)加以建立,借助于平臺(tái)依賴庫(kù)對(duì)平臺(tái)相關(guān)代碼進(jìn)行封裝,做好對(duì)處理器差異、編譯器差異的合理控制,保證有著對(duì)齊的內(nèi)存和有著順序的字節(jié),并將平臺(tái)無(wú)關(guān)的代碼實(shí)現(xiàn),做好內(nèi)存的管理。
操作系統(tǒng)和接口庫(kù)實(shí)現(xiàn)的過(guò)程中,往往不同的操作系統(tǒng)將會(huì)存在各種各樣的系統(tǒng)限制,在實(shí)際的開發(fā)設(shè)計(jì)過(guò)程中,更要對(duì)限制的參數(shù)進(jìn)行適當(dāng)?shù)恼{(diào)整,并做好對(duì)文件描述符的基本限制,尤其是在Unix系統(tǒng)中,就要借助于文件的描述符這種系統(tǒng)性的資源,提高程序的通用性和靈活性。網(wǎng)絡(luò)程序開發(fā)過(guò)程中,任何一個(gè)網(wǎng)絡(luò)連接將會(huì)對(duì)一個(gè)文件描述符占用,一旦程序?qū)⒑芏嗟腟ocket連接打開,其程序在實(shí)際的運(yùn)行過(guò)程中借助于fopen將難以打開文件。對(duì)這一問(wèn)題如何加以解決呢?可以將其系統(tǒng)逐漸的升級(jí)為64位系統(tǒng),同時(shí)還可以采用64位方式編譯程序,對(duì)sys/io.h中的函數(shù)操作文件加以使用,并對(duì)文件池技術(shù)加以采用,將一部分文件描述符預(yù)留。進(jìn)程和線程在實(shí)際的限制過(guò)程中,就要對(duì)線程數(shù)進(jìn)行創(chuàng)建,并將符的數(shù)量以及進(jìn)程線大小的限制加以描述,其操作系統(tǒng)抽象層中操作系統(tǒng)函數(shù)不能直接的被調(diào)用,更應(yīng)該將其在一個(gè)操作系統(tǒng)抽象層中包裝的庫(kù)中實(shí)現(xiàn),將其在底層的操作系統(tǒng)中直接的脫離出來(lái),并保證系統(tǒng)調(diào)試有著相對(duì)有效的起點(diǎn)。
用戶界面的實(shí)現(xiàn)過(guò)程中,就要做好跨平臺(tái)軟件圖形界面的基礎(chǔ)設(shè)計(jì)工作,將程序基礎(chǔ)的邏輯代碼和數(shù)據(jù)構(gòu)成,金可的借助于跨平臺(tái)的開發(fā)工具包,借助于C++語(yǔ)言實(shí)現(xiàn),進(jìn)而開發(fā)利用C++語(yǔ)言跨平臺(tái)應(yīng)用程序的一種用戶界面,進(jìn)而做好相關(guān)界面的控制。
結(jié)語(yǔ)
總而言之,本文在對(duì)C++語(yǔ)言的跨平臺(tái)設(shè)計(jì)進(jìn)行研究時(shí),通過(guò)對(duì)C++語(yǔ)言和跨平臺(tái)需要的環(huán)境進(jìn)行分析,進(jìn)而對(duì)C++語(yǔ)言跨平臺(tái)設(shè)計(jì)做了主要的探討,進(jìn)而總結(jié)出,C++語(yǔ)言跨平臺(tái)設(shè)計(jì)過(guò)程中,不僅僅要有著相對(duì)豐富的經(jīng)驗(yàn),同時(shí)更要在開發(fā)的軟件中將更多的功能和實(shí)際的操作容積加入,借助于相對(duì)優(yōu)越的設(shè)計(jì),綜合性的提高軟件的額功能。本文研究分析C++語(yǔ)言的跨平臺(tái)設(shè)計(jì)時(shí),希望其中的設(shè)計(jì)思路以及相關(guān)的理論基礎(chǔ)為更多的跨平臺(tái)開發(fā)設(shè)計(jì)工程師給予一定的幫助,同時(shí)本文中存在的不足之處還望更多相關(guān)研究人員給予指正。
參考文獻(xiàn):
[1] 張馳. 基于C++語(yǔ)言的跨平臺(tái)軟件開發(fā)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京交通大學(xué),2010.
[2] 侯成杰. 航天器C語(yǔ)言軟件常見編程錯(cuò)誤分析及檢測(cè)方法研究[J].空間控制技術(shù)與應(yīng)用,2013,06:53-57.
[3] 楊波,沈承舒. 面向嵌入式軟件開發(fā)的C語(yǔ)言程序設(shè)計(jì)課程改革探索[J]. 計(jì)算機(jī)教育,2014,05:105-107.
[4] 吳興華. 基于C語(yǔ)言軟件開發(fā)的效率、移植及調(diào)試[J]. 數(shù)字技術(shù)與應(yīng)用,2013,12:172.
[5] 楊鵬. 基于C++語(yǔ)言的跨平臺(tái)軟件開發(fā)的設(shè)計(jì)[J]. 硅谷,2014,04:19+21.
[6] 徐巍. 跨平臺(tái)移動(dòng)開發(fā)框架的比較分析與實(shí)例開發(fā)[D]. 吉林大學(xué),2014.
[7] 謝東來(lái). C語(yǔ)言軟件設(shè)計(jì)中的主要問(wèn)題分析[J]. 計(jì)算機(jī)光盤軟件與應(yīng)用,2013,04:235-236.
【關(guān)鍵詞】 C語(yǔ)言 創(chuàng)造性 教學(xué)模式
一、引言
創(chuàng)新性思維是思維的高級(jí)形式和創(chuàng)造力的核心,是人們特別的意圖或者任務(wù)。培養(yǎng)學(xué)生的創(chuàng)造性思維是對(duì)現(xiàn)代教育的根本使命,特別是高等教育。C語(yǔ)言這門課程具有高度抽象性和邏輯性,可以提供學(xué)生廣闊的思維空間。從我多年的教學(xué)經(jīng)驗(yàn),形成意見這個(gè)過(guò)程是一個(gè)偉大的培養(yǎng)學(xué)生的創(chuàng)新思維的過(guò)程。那么我們?cè)趺纯梢耘囵B(yǎng)學(xué)生的創(chuàng)造性思維?現(xiàn)在我將闡述我的觀點(diǎn)。
二、使學(xué)生掌握C編程的一般方法
引導(dǎo)學(xué)生持有共同的方法C語(yǔ)言是發(fā)展的基礎(chǔ)學(xué)生的創(chuàng)造性思維。當(dāng)學(xué)生開始他們的C語(yǔ)言學(xué)習(xí),他們通常無(wú)法找到他們面臨的一個(gè)編程問(wèn)題的出路。為什么呢?一個(gè)原因是,學(xué)生不能擺脫在中學(xué)時(shí)的舊的思維模式,另一個(gè)是他們還沒(méi)有掌握C語(yǔ)言的編程方法。因此,教師應(yīng)該多說(shuō)多講編程方法的例子,以便我們能為培養(yǎng)學(xué)生的創(chuàng)造性思維創(chuàng)造一個(gè)良好的環(huán)境。例1:輸入兩正整數(shù)為m和n。然后找出它們的最大公約數(shù)和最小公倍數(shù)。
算法分析:
第一步,讀取問(wèn)題。學(xué)生仔細(xì)閱讀問(wèn)題,關(guān)注它是兩個(gè)正整數(shù),要輸入數(shù)據(jù)和理解最大公約數(shù)和最小公倍數(shù)的定義。
第二步,繪制的流程圖描述算法的實(shí)現(xiàn)過(guò)程(見圖1)。在該算法中,而循環(huán)使用,如果m
第三步,根據(jù)算法編寫的C代碼過(guò)程。
第四步,上機(jī)調(diào)試,最終得到程序的正確的結(jié)果。
三、舒適的環(huán)境啟發(fā)學(xué)生的創(chuàng)意靈感
教學(xué)是教師和學(xué)生表達(dá)自己的感情和相互傳染的心情的一個(gè)過(guò)程。培養(yǎng)學(xué)生的創(chuàng)造性思維,教師首先要設(shè)置一個(gè)舒適創(chuàng)意的環(huán)境。還有在課堂教學(xué)中需要注意:1、教師應(yīng)尊重每一個(gè)學(xué)生,特別是對(duì)待那些編程不好的學(xué)生。這樣,每個(gè)學(xué)生會(huì)覺(jué)得自己被認(rèn)可,然后他們可以無(wú)壓力的開拓自己的思維,找到他們的激勵(lì)創(chuàng)新。以作者為例如,筆者曾在黑板上給定一個(gè)問(wèn)題,然后讓三學(xué)生完成它,。完成之后,作者做了一些算法分析工作,即使結(jié)果是錯(cuò)誤的,還是給予更多的鼓勵(lì)、少批評(píng)。2、分組討論提倡學(xué)生互相幫助。組內(nèi)成員之間應(yīng)該沒(méi)有任何區(qū)別。當(dāng)討論明確問(wèn)題的結(jié)果,語(yǔ)言代表整個(gè)群體的智慧,并使每個(gè)組員快樂(lè)的討論學(xué)習(xí),可以有一個(gè)積極的態(tài)度和一個(gè)很好的機(jī)會(huì)培養(yǎng)學(xué)生的創(chuàng)新思維。
四、突破傳統(tǒng)的研究方法培養(yǎng)學(xué)生的創(chuàng)造性思維
通常我們?cè)趥鹘y(tǒng)的三個(gè)步驟教學(xué)理論給出的定義->解釋定義->顯示定義的例子;然而在實(shí)際的C語(yǔ)言編程課程中應(yīng)該有新的三個(gè)步驟:提出問(wèn)題發(fā)現(xiàn)解>總結(jié)規(guī)律或方法。傳統(tǒng)的方法是從理論到實(shí)踐,從抽象的示范和推廣專業(yè)化,而C編程應(yīng)遵循從實(shí)踐到理論的方法,從示范到抽象、從專業(yè)化的推廣。筆者在教學(xué)中,筆者經(jīng)常首先給出的代碼,然后讓他們的學(xué)生驗(yàn)證碼;有時(shí)作者故意犯了一些錯(cuò)誤,讓學(xué)生正確的記錄結(jié)果的程序。當(dāng)回到課堂,這作者將要求學(xué)生思考算法和代碼中的錯(cuò)誤,然后的課堂氣氛也會(huì)高,很多學(xué)生給出他們的意見,可以很好地發(fā)展他們的創(chuàng)造力。最后,老師會(huì)分析這個(gè)問(wèn)題并作出結(jié)論。作為一個(gè)結(jié)果,我們可以得到很好的理論教學(xué)效果。
例2:4×4矩陣的轉(zhuǎn)置
該程序的代碼如下:
main()
{int a[4][4]m*p,i;
printf(“Please input a(by row)4×4 matrix:\n”);
for(i=0;i
scanf(“%d%d%d%d”,&a[1][0],&a[1][1],&a[1][2],&a
[1][3]);
p=&a[0][0];
為了發(fā)展學(xué)生他的創(chuàng)造性思維,討論了該程序的算法。最后,教師應(yīng)給出分析和結(jié)論:矩陣的轉(zhuǎn)置交換一個(gè)a[i] [j]和a[j] [i]。但這個(gè)程序使用指針作為參數(shù)的函數(shù)參考,因此,交換的指針是pointer +4*i+j和pointer + 4*j +i,我考慮的要素多維數(shù)組由行(每行4個(gè))存儲(chǔ),和指針變量是用來(lái)存儲(chǔ)一些數(shù)組元素的地址,或在其他組元素。如果一個(gè)a[1] [3]和a[3][1]交換,事實(shí)上交換數(shù)組元素所指向的值pointer + 4*i+ 3 和 pointer + 4*3 +i指針,如果學(xué)生能理解算法,那么對(duì)學(xué)生創(chuàng)造力的發(fā)展是有益的。
五、鼓勵(lì)學(xué)生帶著問(wèn)題去思考
教師設(shè)置問(wèn)題應(yīng)巧妙利用課堂提問(wèn)的藝術(shù)。課堂提問(wèn)可以提高學(xué)生和老師之間的相互作用。設(shè)置問(wèn)題應(yīng)按照“學(xué)生之間的差異”,所提問(wèn)題的層次是發(fā)展的學(xué)生創(chuàng)造性思維的關(guān)鍵。
例3:從100到200,找到所有的素?cái)?shù)。
教師根據(jù)程序提出了一些問(wèn)題:(1)素?cái)?shù)的定義是什么?(2)有多少次循環(huán)?如何開始循環(huán)工作?(3)結(jié)束循環(huán)的標(biāo)志是什么?(4)輸出格式是怎樣的?讓學(xué)生思考一會(huì)兒,然后回答這些問(wèn)題。在學(xué)生回答,老師給出了自己的結(jié)論:一個(gè)素?cái)?shù)是一個(gè)整數(shù)且大于1,除了本身和和1之外不能被整除的數(shù)。該程序是一個(gè)雙重循環(huán),每執(zhí)行一次外循環(huán),內(nèi)循環(huán)將重復(fù)執(zhí)行,直到表達(dá)式不成立;在執(zhí)行完所有運(yùn)算后退出循環(huán)并輸出結(jié)果,顯示每10個(gè)數(shù)一行。提問(wèn)是必不可少的學(xué)習(xí)環(huán)節(jié),作者應(yīng)該給學(xué)生一些時(shí)間提問(wèn),可以鼓勵(lì)他們?nèi)ニ伎己桶l(fā)展的創(chuàng)造力。作者經(jīng)常讓學(xué)生修改一些程序,他們發(fā)現(xiàn)錯(cuò)誤,提出新的問(wèn)題,完善程序,這種方法可以激發(fā)他們的興趣和創(chuàng)造力。
六、激發(fā)學(xué)生發(fā)散性思維和培養(yǎng)學(xué)生的創(chuàng)造力
發(fā)散性思維是創(chuàng)新的核心思考。發(fā)散性思維是想從不同的觀察方向和角度,發(fā)現(xiàn)更多新的信息和尋找答案。在教學(xué)過(guò)程中,讓學(xué)生激勵(lì)自己學(xué)習(xí)和鼓勵(lì)他們打破傳統(tǒng)的方式,嘗試新的方法,以找到自己的適合的方法來(lái)解決問(wèn)題。這是提出了一些新的編程方法,程序使用不同的算法,找到自己的解決方案問(wèn)題和討論這些差異答案。作為一個(gè)結(jié)果,學(xué)生可以發(fā)展他們的希望學(xué)習(xí)和創(chuàng)造性思維的能力。
例4:輸入3個(gè)數(shù),A,B,C,找出最大的一個(gè)數(shù)。
對(duì)于這個(gè)問(wèn)題,有些同學(xué)給出的代碼如下:
一個(gè)問(wèn)題通過(guò)多種方法來(lái)解決,教師可以拓寬學(xué)生的思想,激發(fā)他們的創(chuàng)造性思維。
七、用創(chuàng)造性的方式教授新知
在多年的教學(xué)中,筆者發(fā)現(xiàn)系統(tǒng)的教學(xué)考慮將正常教學(xué)與創(chuàng)新教學(xué)作為一種系統(tǒng),通過(guò)整合教學(xué)實(shí)現(xiàn)教學(xué)目標(biāo)。如下圖所示:形成一個(gè)系統(tǒng)的教學(xué)模式:(1)系統(tǒng)的教學(xué)模式是一種模式,可以培養(yǎng)學(xué)生的創(chuàng)新品質(zhì)、是有幫助的為了解創(chuàng)造力的概念教育。(2)系統(tǒng)的教學(xué)模式能體現(xiàn)現(xiàn)代教育理念,有利于發(fā)揮學(xué)生和教師他們的主動(dòng)性和創(chuàng)造性。(3)系統(tǒng)的教學(xué)模式有助于創(chuàng)新教學(xué)方法,更有助于拓展新教學(xué)方法的運(yùn)用。教師應(yīng)強(qiáng)化C語(yǔ)言教學(xué)中的理論教學(xué)和時(shí)間教學(xué)的互動(dòng),激發(fā)并引導(dǎo)學(xué)生學(xué)習(xí)主觀能動(dòng)性,C的教學(xué)過(guò)程是培養(yǎng)學(xué)生的興趣,激發(fā)學(xué)生的創(chuàng)新精神和培養(yǎng)他們的創(chuàng)造力思考的一個(gè)過(guò)程。
參 考 文 獻(xiàn)
[1]譚浩強(qiáng)《C程序設(shè)計(jì)(第三版)》清華大學(xué)出版社,2005。
關(guān)鍵詞:教務(wù)管理;工作流;Excel AddIn;SendKeys
一、背景概述
大學(xué)教學(xué)管理日常工作量大,涉及人員和事務(wù)復(fù)雜。以考務(wù)組織為例,對(duì)學(xué)期末的多門課程排考后,教學(xué)秘書需要根據(jù)時(shí)間節(jié)點(diǎn),查看開課課表、教務(wù)通知等多個(gè)單獨(dú)文檔或表格,在不同管理系統(tǒng)中切換錄入和修改數(shù)據(jù),并及時(shí)通知相關(guān)主考和監(jiān)考教師,提醒信息,手工操作工作效率低,容易出現(xiàn)錯(cuò)誤。
目前教務(wù)管理、辦公OA和電子郵件等信息系統(tǒng)中普遍存在“信息孤島”現(xiàn)象 [1,2 ],各種系統(tǒng)中的數(shù)據(jù)只能手工輸入和遷移。本文根據(jù)實(shí)際工作需求,以日常使用最為頻繁的Excel軟件為基礎(chǔ),應(yīng)用工作流模式和C#語(yǔ)言開發(fā)加載項(xiàng)(AddIn)插件,實(shí)現(xiàn)一鍵發(fā)送內(nèi)容到電子郵件、辦公OA、短信和微信界面。
二、軟件架構(gòu)
工作流(Workflow),就是“業(yè)務(wù)過(guò)程的部分或整體在計(jì)算機(jī)應(yīng)用環(huán)境下的自動(dòng)化”,它主要解決的是“使在多個(gè)參與者之間按照某種預(yù)定義的規(guī)則傳遞文檔、信息或任務(wù)的過(guò)程自動(dòng)進(jìn)行,從而實(shí)現(xiàn)某個(gè)預(yù)期的業(yè)務(wù)目標(biāo),或者促使此目標(biāo)的實(shí)現(xiàn)” [3 ]。經(jīng)分析調(diào)研,大學(xué)教務(wù)管理工作一般都有嚴(yán)格的時(shí)間節(jié)點(diǎn),例如監(jiān)考組織,涉及確認(rèn)考試時(shí)間地點(diǎn)、提前通知主考教師和學(xué)生時(shí)間、提前通知監(jiān)考教師時(shí)間等,因此,擬開發(fā)“教務(wù)助手”輔助應(yīng)用程序,以時(shí)間軸為主線將各項(xiàng)工作從不同的系統(tǒng)中導(dǎo)出,整合到日常辦公平臺(tái)中,其架構(gòu)如圖1:
三、主要實(shí)現(xiàn)方法
在微軟Visual 2010平臺(tái)上,新建一個(gè)Excel 2010外接程序(Excel AddIn) [4 ],這是一種托管代碼外接程序,用戶安裝后的軟件后,會(huì)自動(dòng)在Excel軟件上增加加載項(xiàng)菜單 [5 ],在使用Excel軟件過(guò)程中隨時(shí)點(diǎn)擊菜單項(xiàng),即可執(zhí)行相應(yīng)功能,調(diào)取工作簿內(nèi)容,并啟動(dòng)其他應(yīng)用程序,實(shí)現(xiàn)協(xié)同工作。
本軟件命名為“教務(wù)助手”,主要功能有“發(fā)OA”“發(fā)郵件”“發(fā)短信”等3種,并且可以在同一架構(gòu)下自由擴(kuò)展。用戶在使用Excel時(shí),可以隨時(shí)點(diǎn)擊菜單欄的“加載項(xiàng)”,調(diào)出“教務(wù)助手”的子菜單(圖2)。
1.在Excel中創(chuàng)建菜單并響應(yīng)用戶操作的核心代碼(有刪減):
private void ThisAddIn_Startup(object sender, System.EventArgs e){menuCreateMail = commandBarPopupTmp.Controls.Add(Office.MsoControlType.msoControlButton, Type.Missing, Type.Missing, 1, true); menuCreateMail.Caption = “發(fā)OA”;}
2.查找并控制其它Windows窗體的核心代碼(有刪減):
【DllImport(“user32.dll”, EntryPoint = “FindWindow”, SetLastError = true)】
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
IntPtr hwndCalc = FindWindow(null, “工作任務(wù) ―― 新建任務(wù)―― 網(wǎng)頁(yè)對(duì)話框”);
3.發(fā)送字符串和自動(dòng)填充表單的核心代碼(有刪減):
if (hwndCalc != IntPtr.Zero){ SetForegroundWindow(hwndCalc);
Clipboard.SetText(“監(jiān)考通知”); SendKeys.SendWait(“^v”);SendKeys.SendWait(“{Tab}”); }
四、應(yīng)用效果
在安裝該軟件后,教務(wù)工作人員如果需要批量通知幾十名監(jiān)考教師,只須點(diǎn)擊相應(yīng)菜單,軟件即可自動(dòng)逐行復(fù)制Excel工作簿中的單元格文本,自動(dòng)匹配人員,獲取手機(jī)號(hào)碼、Email地址或OA用戶名,使用SendKeys功能,發(fā)送文本信息到相關(guān)程序或網(wǎng)頁(yè),填寫表單 [6 ],經(jīng)操作人員手工確認(rèn)或修改后,執(zhí)行發(fā)送功能,實(shí)現(xiàn)半自動(dòng)的信息批量發(fā)送,可大幅節(jié)省工作量,并防止手工錄入錯(cuò)誤。圖2顯示了軟件讀取數(shù)據(jù),控制用友致遠(yuǎn)A8 辦公系統(tǒng)發(fā)送監(jiān)考通知的過(guò)程。
五、總結(jié)
教務(wù)管理輔助應(yīng)用程序優(yōu)化了傳統(tǒng)教學(xué)管理中的工作流程,以時(shí)間軸為基礎(chǔ),對(duì)涉及到的多個(gè)信息系統(tǒng)中的人員、任務(wù)和數(shù)據(jù)進(jìn)行整合,實(shí)現(xiàn)多種渠道的信息公開和傳達(dá),提升了教務(wù)工作效率,減少了教學(xué)事故發(fā)生。
參考文獻(xiàn):
[1]張珍義.高校數(shù)字化校園建設(shè)中“信息孤島”現(xiàn)象的探討[J].中國(guó)教育信息化,2008(13).
[2]涂振宇.數(shù)字化校園建設(shè)存在的問(wèn)題與對(duì)策研究[J].信息與電腦(理論版),2014(4).
[3]曹風(fēng)華. 基于工作流技術(shù)的學(xué)生評(píng)語(yǔ)生成系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 現(xiàn)代計(jì)算機(jī)(專業(yè)版),2011(10).
[4]苑青,孔捷,冷靜. 利用VSTO和.NET的Office開發(fā)技術(shù)[J]. 電腦編程技巧與維護(hù),2009(6).
【關(guān)鍵詞】編程語(yǔ)言 計(jì)算機(jī)應(yīng)用 軟件開發(fā) 選擇 研究
計(jì)算機(jī)應(yīng)用軟件開發(fā)在我們的學(xué)習(xí)、工作和生活中扮演著重要的角色,被社會(huì)大眾廣泛的應(yīng)用與推廣,發(fā)揮著不可忽視的作用和影響。編程語(yǔ)言在計(jì)算機(jī)應(yīng)用軟件開發(fā)的選擇中,既能夠減輕計(jì)算機(jī)工作的難度,也能夠有效地提高編程工作量的質(zhì)量和效率,對(duì)于計(jì)算機(jī)技術(shù)的發(fā)展和運(yùn)作有著極其重要的建設(shè)性意義。編程語(yǔ)言要加大研發(fā)力度,充分發(fā)揮出自身的優(yōu)勢(shì)和價(jià)值,不斷與計(jì)算機(jī)應(yīng)用軟件開發(fā)相適應(yīng)、相契合,從而更好地推動(dòng)計(jì)算機(jī)技術(shù)的穩(wěn)定進(jìn)步與發(fā)展。
1 計(jì)算機(jī)編程語(yǔ)言的相關(guān)論述
計(jì)算機(jī)編程語(yǔ)言的形式、內(nèi)容較為廣泛和系統(tǒng),其中具有代表性的是:C語(yǔ)言、C++語(yǔ)言以及JAVA語(yǔ)言等等方面。
1.1 C語(yǔ)言
C語(yǔ)言是處于高級(jí)語(yǔ)言與匯編語(yǔ)言之間的一種中級(jí)語(yǔ)言,是集高級(jí)語(yǔ)言與匯編語(yǔ)言的優(yōu)點(diǎn)于一身的編程語(yǔ)言。具體來(lái)說(shuō),C語(yǔ)言具有以下三個(gè)方面的特點(diǎn):
(1)C語(yǔ)言具有清晰化和結(jié)構(gòu)化的特點(diǎn),對(duì)于模塊程序的進(jìn)行具有很大的推動(dòng)作用,而且在調(diào)試和維護(hù)方面也有著強(qiáng)大的作用和功能。
(2) C語(yǔ)言的使用效率較高,移植性較強(qiáng),進(jìn)而使C語(yǔ)言能夠移植到各種計(jì)算機(jī)上,形成各種獨(dú)具特色的CZ言模式。
(3) C語(yǔ)言的編寫代碼的質(zhì)量較高,使執(zhí)行效率大幅度提升上來(lái);也能夠最大程度地發(fā)揮匯編語(yǔ)言的作用。
1.2 C++語(yǔ)言
C++語(yǔ)言是C語(yǔ)言的擴(kuò)展和延伸,是一種全新的編程語(yǔ)言形式。C++語(yǔ)言匯聚了C語(yǔ)言的眾多特點(diǎn)和優(yōu)勢(shì),在具備C語(yǔ)言特點(diǎn)的基礎(chǔ)之上,又對(duì)編程對(duì)象注入了新的編程思想,可以更好地適應(yīng)編程項(xiàng)目的需求,而且C++語(yǔ)言在很多計(jì)算機(jī)系統(tǒng)編程中得到了廣泛的應(yīng)用。
1.3 JAVA語(yǔ)言
JAVA語(yǔ)言主要應(yīng)用在網(wǎng)絡(luò)應(yīng)用系統(tǒng)之中,具有安全性強(qiáng)、簡(jiǎn)易性強(qiáng)、移植性強(qiáng)以及性能高等等特點(diǎn),具體的特點(diǎn)表現(xiàn)在以下幾個(gè)方面:
(1)JAVA語(yǔ)言不易造成程序錯(cuò)誤的發(fā)生;
(2) JAVA語(yǔ)言是完成面向?qū)ο蟮木幊陶Z(yǔ)言,具有全面性和統(tǒng)一性;
(3)JAVA語(yǔ)言可以方便我們查閱很多軟件在初期開發(fā)的過(guò)程中容易出現(xiàn)的錯(cuò)誤,提高內(nèi)存的正確率;
(4)JAVA語(yǔ)言可以有效防止非法內(nèi)存操作的現(xiàn)象發(fā)生,因?yàn)樗詣?dòng)屏蔽、阻擋了手動(dòng)釋放內(nèi)存的功能。
總而言之,編程語(yǔ)言中每一種語(yǔ)言都具有自身的特點(diǎn)和優(yōu)勢(shì),在計(jì)算機(jī)應(yīng)用軟件開發(fā)中,要選擇正確地、適合自身的編程語(yǔ)言模式,對(duì)于減輕我們的工作量,提升工作效率具有極大的幫助和推動(dòng)作用。
2 計(jì)算機(jī)應(yīng)用軟件開發(fā)選擇中應(yīng)遵循的原則
(1)要從開發(fā)項(xiàng)目的整體結(jié)構(gòu)出發(fā),計(jì)算機(jī)應(yīng)用系統(tǒng)對(duì)于各種編程語(yǔ)言的選擇要十分慎重,積極尋找適合自己的編程語(yǔ)言。
(2)對(duì)于計(jì)算應(yīng)用軟件開發(fā)的成本費(fèi)用要十分慎重,例如對(duì)視頻處理和信號(hào)處理等方面的操作。因此,在此建議使用靜態(tài)類型的編程語(yǔ)言,不僅開銷較低,而且效果也非常明顯;
(3)如果應(yīng)用軟件的開發(fā)需要大量的手工勞動(dòng)和處理,可以考慮選擇簡(jiǎn)易性強(qiáng)、靈動(dòng)性較強(qiáng)的編程語(yǔ)言。與此同時(shí),對(duì)于編寫出來(lái)的程序我們還要及時(shí)地檢查和調(diào)節(jié)。
(4)在計(jì)算機(jī)應(yīng)用軟件開發(fā)之前,要對(duì)開發(fā)環(huán)境及時(shí)地了解,硬件環(huán)境對(duì)于各種編程語(yǔ)言的適用性有所不同,所以我們要尋找與自身相匹配的硬件環(huán)境,要讓編寫程序在硬件環(huán)境中得到最大程度地發(fā)揮。
(5)在編程語(yǔ)言的過(guò)程中,我們還要充分考慮項(xiàng)目是否適用于位操作,如果適用性較好,就恰恰可以提供出合適數(shù)據(jù)類型的編程語(yǔ)言。此外,要盡可能地采用專業(yè)的編程語(yǔ)言,可以節(jié)省很多工作時(shí)間,提高工作效率,從而更好地防止編輯錯(cuò)誤的現(xiàn)象發(fā)生。
3 不同編程語(yǔ)言對(duì)于計(jì)算機(jī)應(yīng)用軟件開發(fā)選擇的影響因素
3.1 在軟件的整體規(guī)劃方面
在計(jì)算機(jī)軟件開發(fā)過(guò)程中,軟件開發(fā)人員要對(duì)軟件的整體結(jié)構(gòu)進(jìn)行把握和設(shè)計(jì),其中包括了軟件開發(fā)的功能和屬性以及軟件延伸等方面的問(wèn)題。要在首次語(yǔ)言編寫版本助中充分挖掘軟件功能,因此,在編輯語(yǔ)言的選擇過(guò)程中,要做好展開整體規(guī)劃的準(zhǔn)備。
(1)軟件開發(fā)人員要充分了解應(yīng)用程序的功能,要在數(shù)據(jù)庫(kù)語(yǔ)言中選擇一種較為適合的語(yǔ)言。例如:JAVA語(yǔ)言具有相對(duì)簡(jiǎn)單的功能;而C語(yǔ)言、C++語(yǔ)言就具有相對(duì)繁瑣的功能。
(2)在軟件規(guī)模方面,要以數(shù)據(jù)庫(kù)的處理對(duì)象為基礎(chǔ)和前提,例如:在數(shù)據(jù)庫(kù)的功能相對(duì)簡(jiǎn)易,可以選用ACCESS語(yǔ)言;
3.2 在軟件開發(fā)人員專業(yè)技能方面
軟件開發(fā)人員的專業(yè)技能有限,只能掌握幾種基礎(chǔ)、常用的編程語(yǔ)言,并不能掌握所有的編程軟件;如果軟件開發(fā)人員對(duì)編程語(yǔ)言不熟悉,就很難保證編程工作的正常運(yùn)作。這就說(shuō)明了在開展軟件長(zhǎng)期規(guī)劃過(guò)程中,首先要對(duì)編程語(yǔ)言進(jìn)行合理的分類和管理,軟件開發(fā)人員在掌握自身熟悉的編程語(yǔ)言基礎(chǔ)上,要學(xué)習(xí)不同的編程語(yǔ)言,豐富自身的專業(yè)技能和專業(yè)水平。
3.3 在軟件開發(fā)平臺(tái)方面的影響
計(jì)算機(jī)軟件的開發(fā)可以有高級(jí)語(yǔ)言和低級(jí)語(yǔ)言之分。例如:C語(yǔ)言和C++語(yǔ)言對(duì)運(yùn)行環(huán)境的要求相對(duì)較低。軟件開發(fā)人員要想有效、合理利用編程環(huán)境,就必須要處理好如軟件開發(fā)平臺(tái)的相關(guān)問(wèn)題。
3.4 在硬件資源的限度方面
在計(jì)算機(jī)應(yīng)用軟件的開發(fā)之中,針對(duì)硬件資源的使用是非常有限的。例如:在照相機(jī)和汽車的嵌入式設(shè)備中,表現(xiàn)得很明顯。因此。我們可以考慮采用C語(yǔ)言和C++語(yǔ)言,進(jìn)而保證硬件資源得到最大程度地利用和發(fā)揮。
4 不同編程語(yǔ)言的應(yīng)用范圍和領(lǐng)域
4.1 C語(yǔ)言的應(yīng)用領(lǐng)域及范圍
往往體現(xiàn)在編譯器的開發(fā)、硬件驅(qū)動(dòng)的開發(fā)以及工業(yè)控制方面等等;
4.2 JAVA語(yǔ)言的應(yīng)用領(lǐng)域及范圍
體現(xiàn)在WEB應(yīng)用、嵌入式以及系統(tǒng)編程方面等等,側(cè)重于企業(yè)級(jí)的應(yīng)用開發(fā),現(xiàn)已成為WEB開發(fā)中不可或缺的一部分;
4.3 C++語(yǔ)言的應(yīng)用領(lǐng)域及范圍
C++語(yǔ)言綜合了高級(jí)語(yǔ)言和低級(jí)語(yǔ)言,具有一定的科學(xué)性優(yōu)點(diǎn),主要體現(xiàn)在通訊系統(tǒng)、電子郵件以及仿真方面得到了明顯的應(yīng)用和成效,適用范圍也比較廣闊。
4.4 PHP語(yǔ)言的應(yīng)用領(lǐng)域及范圍
體現(xiàn)在中小型網(wǎng)站的開發(fā)之中和WEB頁(yè)面辦公等等。
5 編程語(yǔ)言在計(jì)算機(jī)應(yīng)用軟件開發(fā)選擇中的建議、對(duì)策
計(jì)算機(jī)應(yīng)用軟件開發(fā)的思想要不斷與時(shí)俱進(jìn)、開拓創(chuàng)新。積極引進(jìn)先進(jìn)、科學(xué)、高效的計(jì)算機(jī)技術(shù);借鑒成功的經(jīng)驗(yàn),吸取失敗的教訓(xùn);提高編程語(yǔ)言的選擇能力。在具體的應(yīng)用軟件開發(fā)中,編程語(yǔ)言的注意事項(xiàng)有以下幾個(gè)方面:
5.1 注重韌饣肪車慕岷嫌朐擻
計(jì)算機(jī)應(yīng)用軟件開發(fā)的前提和基礎(chǔ)是硬件環(huán)境,軟件開發(fā)人員要及時(shí)、充分地考慮外部的硬件環(huán)境。硬件環(huán)境對(duì)于計(jì)算機(jī)應(yīng)用軟件的開發(fā)至關(guān)重要,如果開發(fā)軟件與硬件環(huán)境不適合,就會(huì)造成軟件不匹配,引發(fā)不必要的故障和問(wèn)題的發(fā)生。
所以,在計(jì)算機(jī)開發(fā)之前,首先要選擇好編程語(yǔ)言的適用環(huán)境,不能一概而論,要確保編寫程序符合科學(xué)技術(shù)的發(fā)展模式;同時(shí),軟件開發(fā)人員要針對(duì)編寫程序及時(shí)進(jìn)行調(diào)整和改造
5.2 結(jié)合應(yīng)用的行業(yè)和范圍
在計(jì)算機(jī)應(yīng)用軟件開發(fā)的選擇中,要綜合考慮各個(gè)方面所存在的問(wèn)題和因素。例如:要考慮軟件開發(fā)人員所從事的事業(yè)、不同編程語(yǔ)言的特點(diǎn)等等,要全面、系統(tǒng)的分析,選擇適用于自身軟件開發(fā)的編程語(yǔ)言。
此外,軟件開發(fā)編程語(yǔ)言由于行業(yè)的不同,也會(huì)有所限制和約束。例如:要想更好地面向開發(fā)對(duì)象,可以選擇C語(yǔ)言、C++語(yǔ)言、JAVA語(yǔ)言;計(jì)算機(jī)軟件開發(fā)也會(huì)受到一定的工作范圍的影響,例如:C++語(yǔ)言比較適用于信息和通訊的領(lǐng)域。
5.3 合理、有效地運(yùn)用最為熟悉的編程語(yǔ)言
軟件開發(fā)人員在計(jì)算機(jī)應(yīng)用軟件的開發(fā)過(guò)程中,要在最短的時(shí)間內(nèi)熟悉基礎(chǔ)的編程語(yǔ)言,這樣可以節(jié)省大量的人力,而且能夠有效節(jié)省工作時(shí)間,保證了一定的工作質(zhì)量。而且,軟件開發(fā)人員也要注重結(jié)合不同編程語(yǔ)言的特性,更好地在計(jì)算機(jī)平臺(tái)中操作和運(yùn)行,對(duì)于編程語(yǔ)言也要注入一定的創(chuàng)新因素,創(chuàng)造最為理想的編程語(yǔ)言形式。
5.4 結(jié)合編程語(yǔ)言的需求進(jìn)行選擇
在需求選擇方面,高級(jí)語(yǔ)言適用于后期的開發(fā)和維護(hù),使用起來(lái)更加便捷、簡(jiǎn)易,但是相對(duì)復(fù)雜、繁瑣,是一個(gè)漫長(zhǎng)的過(guò)程。低級(jí)語(yǔ)言適用于對(duì)存儲(chǔ)空間和運(yùn)行時(shí)間較高的需求。此外,根據(jù)開發(fā)環(huán)境的不同要慎重考慮適合自身的語(yǔ)言級(jí)別。
6 結(jié)束語(yǔ)
綜上所述,計(jì)算機(jī)應(yīng)用軟件開發(fā)是一項(xiàng)復(fù)雜、系統(tǒng)的工程,而對(duì)于編程語(yǔ)言的選擇也是這項(xiàng)工程中的重中之重。我們要樹立正確的判斷和分析能力,選擇出最適用自身的編程語(yǔ)言。因此,軟件開發(fā)人員要全面掌握各種編程語(yǔ)言的特征,加強(qiáng)探索和實(shí)踐的能力,以全面熟悉各種編程語(yǔ)言。編程語(yǔ)言在計(jì)算機(jī)應(yīng)用軟件開發(fā)中,可以大大提高計(jì)算機(jī)技術(shù)的質(zhì)量和效率,從而推動(dòng)計(jì)算機(jī)應(yīng)用軟件開發(fā)更好地走向世界、走向全球,實(shí)現(xiàn)計(jì)算機(jī)技術(shù)的可持續(xù)發(fā)展的戰(zhàn)略需求。
參考文獻(xiàn)
[1]張旭.不同編程語(yǔ)言對(duì)計(jì)算機(jī)軟件開發(fā)的影響[J].電腦與電信,2016(10):52-54.
[2]劉嵩鶴,孫和勤.不同編程語(yǔ)言對(duì)計(jì)算機(jī)應(yīng)用軟件開發(fā)的影響[J].數(shù)字技術(shù)與應(yīng)用,2015(01):201.
[3]李開元.探究計(jì)算機(jī)應(yīng)用軟件開發(fā)過(guò)程中不同編程語(yǔ)言的影響[J].信息化建設(shè),2015(06):48.
1 計(jì)算機(jī)軟件開發(fā)中匯編語(yǔ)言種類介紹
1.1 C語(yǔ)言。C語(yǔ)言的使用歷史較長(zhǎng),距現(xiàn)在已有40年的歷史,是編程語(yǔ)言中應(yīng)用較廣泛的語(yǔ)言,是軟件開發(fā)中的基礎(chǔ)語(yǔ)言,被廣泛應(yīng)用在我們的生活中。與它同時(shí)代出現(xiàn)的編程語(yǔ)言,早已經(jīng)被淘汰,足見其強(qiáng)大的生命力。開發(fā)者們首選的計(jì)算機(jī)編程軟件便是C語(yǔ)言,因?yàn)樗哂泻芏鄡?yōu)點(diǎn),如短小精悍,靈活方便,表達(dá)方式靈活使用,便于理解,數(shù)據(jù)類型與運(yùn)算符相當(dāng)豐富等眾多優(yōu)點(diǎn)。
1.2 C++和Visual C++。C++語(yǔ)言是基于C語(yǔ)言升級(jí)以后的編程語(yǔ)言,它不僅包含了C語(yǔ)言的眾多優(yōu)點(diǎn),更是具有面向?qū)ο笳Z(yǔ)言的特點(diǎn)。視覺(jué)窗口系統(tǒng)的出現(xiàn)使圖形窗口界面成為標(biāo)準(zhǔn),C語(yǔ)言很難實(shí)現(xiàn)這種開發(fā)任務(wù),所以C++的出現(xiàn)便解決了這樣的難題。其應(yīng)用也是非常的廣泛,甚至是任何領(lǐng)域都能應(yīng)用。因?yàn)樗鼜?qiáng)大的功能使我們運(yùn)用起來(lái)相當(dāng)?shù)撵`活多變,事實(shí)證明,掌握了C++在學(xué)習(xí)其他的匯編語(yǔ)言就很容易了。使用VC++可以很容易的編寫出窗口界面,此外VC++在微軟的地位也是很高的,其功能相當(dāng)?shù)闹匾O喈?dāng)多的微軟基礎(chǔ)類庫(kù)便在運(yùn)用C++時(shí)用上的,提高了計(jì)算機(jī)軟件開發(fā)的發(fā)展進(jìn)程。
1.3 Java語(yǔ)言。Java語(yǔ)言現(xiàn)在被廣泛的應(yīng)用,原因是Java具有良好的完備性,它在很大程度上避開了C語(yǔ)言和C++語(yǔ)言在軟件開發(fā)中出現(xiàn)的困難。特別的將以前的單機(jī)模式發(fā)展成目前的網(wǎng)絡(luò)模式。Java語(yǔ)言與普通的編譯與解釋的計(jì)算機(jī)語(yǔ)言有所不同。Java語(yǔ)言集合了C語(yǔ)言與C++語(yǔ)言的特點(diǎn),取其精華去其糟粕,是較C++語(yǔ)言簡(jiǎn)單并且基于其之上的語(yǔ)言。Java語(yǔ)言是完全面向?qū)ο蟮恼Z(yǔ)言,Java還具有出眾的通用性,平臺(tái)移植性。還具有更高的安全性及高效性等優(yōu)點(diǎn),是軟件開發(fā)者運(yùn)用起來(lái)更加方便快捷。
1.4 C#語(yǔ)言。C#語(yǔ)言是在Java語(yǔ)言之后有的另一種編程語(yǔ)言,它繼承了Java語(yǔ)言的優(yōu)點(diǎn),也比其有更大的優(yōu)勢(shì)。它是NET構(gòu)架中重要的參與者,C#語(yǔ)言作為微軟使其得到了廣泛的關(guān)注,這更源于它出色的表現(xiàn)。
1.5 Visual Basic。Visual Basic最大的特點(diǎn)是包含事件驅(qū)動(dòng)編程語(yǔ)言。此類編程語(yǔ)言的主要作用是協(xié)助開發(fā)環(huán)境,現(xiàn)在此程序也被大多數(shù)開發(fā)者所使用。數(shù)據(jù)庫(kù)語(yǔ)言在計(jì)算機(jī)軟件開發(fā)中占有著不可或缺的地位,VB語(yǔ)言的主要功能有圖形用戶界面(GUI)和快速應(yīng)用程序開發(fā)(RAD)。VB較VC++語(yǔ)言來(lái)講更加的方便靈活,其結(jié)構(gòu)化查詢(SQL)語(yǔ)言更是被使用頻繁,VB語(yǔ)言在軟件開發(fā)前景中大有發(fā)展。
1.6 Delphi語(yǔ)言。這是具有強(qiáng)大功能的第四代編輯語(yǔ)言,與VB相比較,Delphi語(yǔ)言功能更加強(qiáng)大,也更加的具有實(shí)用性。具有強(qiáng)大而成熟的組件技術(shù)的Windows程序的結(jié)合功能,并且擁有強(qiáng)大的數(shù)據(jù)庫(kù)支持,以及高速的翻譯器。其適用于眾多的數(shù)據(jù)庫(kù)結(jié)構(gòu),而且其數(shù)據(jù)庫(kù)的管理系統(tǒng)最為高效。
1.7 Pascal語(yǔ)言。Pascal語(yǔ)言作為一種高級(jí)的程序語(yǔ)言被計(jì)算機(jī)所通用,其特點(diǎn)主要有,嚴(yán)格的結(jié)構(gòu)化形式,運(yùn)行效率比較高,繁多的數(shù)據(jù)類型和糾錯(cuò)能力迅速等。此語(yǔ)言可以描述多種數(shù)據(jù)結(jié)構(gòu)及算法,并且也能充分體現(xiàn)和保持出軟件設(shè)計(jì)者的風(fēng)格及習(xí)慣。
2 計(jì)算機(jī)軟件開發(fā)中編程語(yǔ)言的選擇
在軟件開發(fā)中選擇合適的編程語(yǔ)言至關(guān)重要,其影響著整個(gè)軟件的使用質(zhì)量,如果我們選擇了合適的語(yǔ)言編程,它能大大提高軟件的實(shí)用效率。所以在計(jì)算機(jī)軟件我們必須最大限度的了解各個(gè)編程語(yǔ)言的功能及特點(diǎn),實(shí)現(xiàn)其最大的實(shí)用價(jià)值。進(jìn)行匯編語(yǔ)言選擇前,我們要考慮諸多因素。所以,對(duì)計(jì)算機(jī)編程擁有更多的了解,可以讓我們對(duì)以后的軟件開發(fā)有很好的掌握。
2.1 考慮應(yīng)用的行業(yè)和領(lǐng)域。依據(jù)所從事的行業(yè)及領(lǐng)域進(jìn)行選擇。如果是面向開發(fā)對(duì)象的可利用Java語(yǔ)言和C++語(yǔ)言,如果是通訊或信息領(lǐng)域可選擇C++和VC++語(yǔ)言較為合適。商業(yè)領(lǐng)域也可利用COBOT,利用LIST和PROLOC在工程運(yùn)算方面使其應(yīng)用在人工智能上。如果從事的工作是底層或硬件,則可以選擇簡(jiǎn)單的C語(yǔ)言和C++語(yǔ)言較好。
2.2 考慮整體內(nèi)外環(huán)境。軟件開發(fā)的基礎(chǔ)為硬件環(huán)境,其所有的匯編語(yǔ)言都必須適用于硬件環(huán)境,所以我們?cè)谲浖_發(fā)中必須考慮其外部的硬件環(huán)境。在編程前對(duì)語(yǔ)言的選擇尤為重要,我們必須決定語(yǔ)言的分布選擇,也要考慮工程的整體框架。匯編語(yǔ)言之間都是有很強(qiáng)的聯(lián)系性,所以學(xué)習(xí)眾多語(yǔ)言,是為了學(xué)精其中一門或是幾門語(yǔ)言做基礎(chǔ)的。軟件開發(fā)中我們運(yùn)用編程的過(guò)程靈活多變,因此,在軟件編寫前選擇的匯編語(yǔ)言需要很好地適應(yīng)環(huán)境。只有這樣才能確保我們編寫出的程序快速調(diào)整及高效的應(yīng)用。
2.3 考慮平臺(tái)的支持性。在眾多的考慮因素中,平臺(tái)的支持性也是至關(guān)重要的,如瀏覽器中程序語(yǔ)言,其在運(yùn)行中根據(jù)語(yǔ)言的適應(yīng)性選擇使用的編程語(yǔ)言。在平臺(tái)這個(gè)大環(huán)境下,一切的操作都必須適應(yīng)平臺(tái)。根據(jù)編程語(yǔ)言自身的優(yōu)勢(shì)在合適的平臺(tái)上進(jìn)行操作,這是一個(gè)重要的選擇依據(jù),如代碼是在瀏覽器上運(yùn)行的,這就使得被選擇的編程語(yǔ)言減少。所以在計(jì)算機(jī)軟件開發(fā)中我們必須要考慮平臺(tái)對(duì)編程語(yǔ)言的支持性。
2.4 考慮編寫程序的實(shí)際需求。在眾多編程語(yǔ)言的使用中,我們都需要保證我們編寫出的程序在實(shí)際運(yùn)用的需求性,并作出及時(shí)的調(diào)整。在軟件開發(fā)中運(yùn)用我們熟練使用的編程語(yǔ)言來(lái)進(jìn)行編寫,可以大大降低我們軟件開發(fā)的時(shí)間,也提高了編寫軟件的效率。即便是我們使用了不同的編程語(yǔ)言來(lái)進(jìn)行編寫,但是最后我們還是會(huì)完成快速調(diào)整程序。所以,快速原型環(huán)境對(duì)我們來(lái)說(shuō)是很重要的,并且在此環(huán)境下,也極大地提升了動(dòng)態(tài)語(yǔ)言和相關(guān)性的結(jié)合。
2.5 考慮所需的位操作。相當(dāng)多的文件格式和協(xié)議相關(guān)工作都需要進(jìn)行位操作。如果出現(xiàn)眾多的位操作,我們需要選擇簡(jiǎn)單的位操作,所以位操作也是軟件開發(fā)者們考慮的因素。
2.6 考慮成本問(wèn)題。我們也應(yīng)該根據(jù)項(xiàng)目的功能進(jìn)行來(lái)進(jìn)行編程語(yǔ)言的選擇,一個(gè)整體的系統(tǒng)是由多個(gè)部分組成的,這并不是說(shuō)一整個(gè)系統(tǒng)都需要用一種編程語(yǔ)言來(lái)完成,它也是由多種語(yǔ)言來(lái)進(jìn)行編寫的。
對(duì)于成本開銷較大的操作,例如,視頻處理,密碼學(xué)以及信號(hào)處理等,軟件開發(fā)者需進(jìn)行充足的考慮,選擇一些靜態(tài)型的語(yǔ)言來(lái)進(jìn)行程序的編寫,如JAVA,C#語(yǔ)言等就是很好的選擇。
1.計(jì)算機(jī)常用的編程語(yǔ)言
C語(yǔ)言:該語(yǔ)言應(yīng)用廣泛,是所有計(jì)算機(jī)語(yǔ)言里最常用的編程語(yǔ)言,從開始出現(xiàn)到現(xiàn)在已經(jīng)有40年的歷史,C語(yǔ)言具有很多優(yōu)點(diǎn), 如:語(yǔ)法簡(jiǎn)潔、運(yùn)算符豐富、數(shù)據(jù)結(jié)構(gòu)類型豐富、代碼和數(shù)據(jù)分離的結(jié)構(gòu)化、語(yǔ)法要求不嚴(yán)格、功能強(qiáng)大等。C語(yǔ)言是具有兼容能力強(qiáng)的程序語(yǔ)言,移植起來(lái)非常容易,利用 C語(yǔ)言為某種計(jì)算機(jī)寫的軟件可以用到另一種機(jī)器上去。如:如果為蘋果機(jī)寫的一個(gè)程序能夠方便地改為可以在IBM PC上運(yùn)行的程序。C語(yǔ)言的主要結(jié)構(gòu)成分是函數(shù)C的獨(dú)立子程序,編寫的程序語(yǔ)言比較容易維護(hù),并且容易實(shí)現(xiàn)。
C++:該語(yǔ)言是C語(yǔ)言的升級(jí),它幾乎包含了C語(yǔ)言的所有功能, 在C語(yǔ)言的廣泛引用前提下,C++也應(yīng)用的非常廣泛,可以說(shuō)任何領(lǐng)域都可以使用,包括各種操作平臺(tái),這也決定了C++是一種最難學(xué)的編程語(yǔ)言,因?yàn)椋鼜?qiáng)大的功能背景下,使用起來(lái)非常的靈活多樣。 實(shí)踐證明,如果掌握了C++,再學(xué)習(xí)其他編程語(yǔ)言的時(shí)候就會(huì)非常容易,因?yàn)樗灤┝藦挠布綄?duì)象的各個(gè)環(huán)節(jié),學(xué)完該語(yǔ)言以后就會(huì)對(duì)計(jì)算機(jī)語(yǔ)言有個(gè)深刻的認(rèn)識(shí)。
Jav和C#:Java和C#都是出現(xiàn)在 C語(yǔ)言之后,以面向?qū)ο鬄橹鞯恼Z(yǔ)言,Java 語(yǔ)言是在充分吸收了C++的優(yōu)點(diǎn),摒棄了C++的一些缺點(diǎn)的基礎(chǔ)上誕生的,并且形成了具有自身特色的優(yōu)勢(shì),而C#則是在Java 語(yǔ)言之后出現(xiàn)的,它更多地借鑒了Java的優(yōu)點(diǎn),同時(shí)增加了一些自己的特點(diǎn)。在一定意義上可以說(shuō),Java站在C++的肩膀上,而C#站在了 Java的肩膀上。除了跨平臺(tái)以外,Java和C# 相比沒(méi)有太多優(yōu)勢(shì),.NET 可以控制迅雷,調(diào)用 dll等,這個(gè)是Java很難做到的,雖然有JNI或第三方開源程序,但是那些第三方不太成熟,而JNI則需要會(huì)寫VC代碼,很難做到。
Pascal語(yǔ)言。是計(jì)算機(jī)通用設(shè)計(jì)語(yǔ)言的一種,是高級(jí)程序語(yǔ)言,主要特點(diǎn)有:具有嚴(yán)格的結(jié)構(gòu)化形式、豐富的數(shù)據(jù)類型、較高的運(yùn)行效率和較快的糾錯(cuò)能力等。這些優(yōu)點(diǎn)決定了該語(yǔ)言能夠描述各種算法以及數(shù)據(jù)結(jié)構(gòu),另外,在應(yīng)用這種語(yǔ)言的過(guò)程中,能夠幫助編程者保持一個(gè)很好的習(xí)慣和設(shè)計(jì)風(fēng)格。
每一種語(yǔ)言都有其存在的理由,都有其獨(dú)特的優(yōu)勢(shì)和應(yīng)用范圍, 編程人員在計(jì)算機(jī)應(yīng)用軟件開發(fā)過(guò)程中應(yīng)該以提升工作效率為基礎(chǔ), 以運(yùn)效果為目標(biāo),選擇適合開發(fā)項(xiàng)目的程序,選擇最適合的語(yǔ)言,達(dá)到提高工作效率,降低工作量的目的。
2.原則
2.1整體結(jié)構(gòu)
開發(fā)項(xiàng)目的整理結(jié)構(gòu)決定了用什么樣的開發(fā)軟件,使用什么樣的編程語(yǔ)言,整個(gè)系統(tǒng)是由多個(gè)部分組成,并不是說(shuō)整個(gè)系統(tǒng)都必須要使用同一種編程語(yǔ)言進(jìn)行編寫,編程語(yǔ)言的選擇應(yīng)該依據(jù)項(xiàng)目功能而定。對(duì)于成本投入較大的操作,如:圖形渲染、密碼學(xué)、視頻處理以及信號(hào)處理等,程序員要認(rèn)真考慮,盡量用一些靜態(tài)類型的語(yǔ)言。
2.2盡量使用最為熟悉的語(yǔ)言
熟練掌握的語(yǔ)言能夠運(yùn)用在開發(fā)軟件方面的話,可以節(jié)省大量的時(shí)間,并且能夠?qū)浖こ添?xiàng)目時(shí)間表進(jìn)行準(zhǔn)確預(yù)測(cè),及時(shí)完工。此外,熟悉的語(yǔ)言可以創(chuàng)新,如,開發(fā)的軟件是偏重復(fù)處理手工勞動(dòng)時(shí), 就可以根據(jù)實(shí)際情況選擇簡(jiǎn)單、靈活的編程語(yǔ)言,尤其是選擇那些自身就具備相應(yīng)功能的編程語(yǔ)言。
2.3充分考慮硬件環(huán)境
硬件環(huán)境是軟件開發(fā)的基礎(chǔ),所有軟件編程語(yǔ)言都應(yīng)該適應(yīng)硬件環(huán)境,所以軟件開發(fā)過(guò)程中要考慮外部硬件環(huán)境。
通常情況下,編程語(yǔ)言適應(yīng)了目前版本的硬件環(huán)境,但隨著硬件設(shè)備的更新,當(dāng)前的軟件可能就不適應(yīng)了,不匹配的問(wèn)題仍然存在。
因此,在程序開發(fā)以前要選擇適應(yīng)環(huán)境的編程語(yǔ)言,這樣編出來(lái)的程序就能夠長(zhǎng)時(shí)間較好地運(yùn)行。只有這樣才能確保任何編程語(yǔ)言編出來(lái)的開發(fā)軟件都能夠?qū)崿F(xiàn)并能夠快速調(diào)整,因此,快速原型是很重要的,動(dòng)態(tài)語(yǔ)言在這方面表現(xiàn)出了突出的優(yōu)點(diǎn),可以和很多相關(guān)庫(kù)進(jìn)行結(jié)合。
2.4語(yǔ)言的選擇要考慮是否支持平臺(tái)
支持平臺(tái)也是在編程語(yǔ)言選擇過(guò)程中需要考慮的因素。
例如:在瀏覽器中運(yùn)行的程序語(yǔ)言,根據(jù)語(yǔ)言是否適應(yīng)就可以有選擇的使用一些語(yǔ)言。平臺(tái)是一個(gè)大環(huán)境,所有操作都應(yīng)該適應(yīng)于平臺(tái),一些程序開發(fā)過(guò)程中,程序語(yǔ)言的格式?jīng)Q定了要涉及大量的位操作,此時(shí),要充分考慮大量的位操作是否給軟件開發(fā)帶來(lái)困難,是否可以避免大量的工作,如果必須要進(jìn)行大量的位操作,那就應(yīng)該選擇那些具有容易位操作而且可以提供合適數(shù)據(jù)類型等特點(diǎn)的編程語(yǔ)言。
同時(shí), 在一些特殊領(lǐng)域,程序員應(yīng)該使用專業(yè)的編程語(yǔ)言,因?yàn)檫@些程序語(yǔ)言具有很強(qiáng)的針對(duì)性,使用起來(lái)既能夠節(jié)省很多的工作時(shí)間,還可以防止編程出現(xiàn)較大的失誤。
3.結(jié)語(yǔ)
關(guān)鍵詞:編譯原理;工具資源;實(shí)踐教學(xué)
1.背景
編譯理論與技術(shù)是計(jì)算機(jī)科學(xué)中發(fā)展最迅速、最成熟的一個(gè)重要分支,程序設(shè)計(jì)語(yǔ)言和編譯的發(fā)展集中體現(xiàn)了計(jì)算機(jī)科學(xué)的重要成果與精華。編譯原理課程是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的專業(yè)必修課程,主要講授程序設(shè)計(jì)語(yǔ)言編譯程序構(gòu)造的基本原理和方法。編譯程序的開發(fā)堪稱經(jīng)典理論和先進(jìn)技術(shù)緊密結(jié)合的典型示范,因此理論學(xué)習(xí)和實(shí)踐的緊密結(jié)合是本課程的突出特色。通過(guò)編譯程序構(gòu)造的問(wèn)題,可以體驗(yàn)到如何從實(shí)際需求中提出理論問(wèn)題、理論研究推動(dòng)技術(shù)進(jìn)步、運(yùn)用技術(shù)工具解決實(shí)際問(wèn)題的過(guò)程。
在經(jīng)典理論的支持下,在編譯程序的研制過(guò)程中,產(chǎn)生了非常豐富的工具資源。在這些工具資源的支持下,編譯程序開發(fā)的自動(dòng)化程度得到了顯著提高;相對(duì)其他軟件開發(fā)任務(wù),編譯程序開發(fā)在效率和質(zhì)量上的優(yōu)勢(shì)非常明顯。更為重要的是,編譯的理論和技術(shù)對(duì)于計(jì)算機(jī)科學(xué)中的其他領(lǐng)域也有重要的影響。一直以來(lái),編譯的理論和技術(shù)在程序設(shè)計(jì)語(yǔ)言的實(shí)現(xiàn)、針對(duì)計(jì)算機(jī)體系結(jié)構(gòu)的優(yōu)化、新的計(jì)算機(jī)體系結(jié)構(gòu)的設(shè)計(jì)、自然語(yǔ)言理解、網(wǎng)絡(luò)信息處理、網(wǎng)絡(luò)協(xié)議的分析與實(shí)現(xiàn)等領(lǐng)域都是不可或缺的。國(guó)外著名大學(xué)(如美國(guó)哥倫比亞大學(xué)、哈佛大學(xué)和斯坦福大學(xué)等)的編譯課程教學(xué)都特別重視相關(guān)的課程實(shí)踐項(xiàng)目。以哥倫比亞大學(xué)為例,在編譯原理的課程教學(xué)中開展了貫穿整個(gè)學(xué)期的課程實(shí)踐項(xiàng)目。在項(xiàng)目中,學(xué)生分成小組,自主設(shè)計(jì)并實(shí)現(xiàn)一個(gè)小的語(yǔ)言,而這個(gè)語(yǔ)言涉及了豐富的領(lǐng)域,包括量子計(jì)算、音樂(lè)合成、計(jì)算機(jī)圖形學(xué)、游戲、矩陣計(jì)算和很多其他領(lǐng)域。在這些教學(xué)實(shí)踐中,很多編譯開發(fā)工具都被應(yīng)用于各種案例中,包括ANTLR、LEX和YACC等編譯領(lǐng)域經(jīng)典的開源軟件工具。
通過(guò)收集編譯資源(包括開源的編譯器和編譯程序開發(fā)工具),以及這些工具在計(jì)算機(jī)科學(xué)各領(lǐng)域中的成功應(yīng)用案例,可以為開展案例式教學(xué)改革打下堅(jiān)實(shí)的基礎(chǔ)。筆者收集了編譯領(lǐng)域常用的開源軟件工具及其應(yīng)用案例,并對(duì)其進(jìn)行歸類分析和整理,以形成支撐編譯課堂教學(xué)和實(shí)踐教學(xué)的資源庫(kù)。基于該資源庫(kù),在今后的編譯原理課程教學(xué)中,可以通過(guò)采取基于案例的教學(xué)方法,形象地向?qū)W生展示編譯研究中“經(jīng)典理論和先進(jìn)技術(shù)有機(jī)結(jié)合”的突出特點(diǎn),使學(xué)生能夠通過(guò)具體的案例切實(shí)體驗(yàn)編譯經(jīng)典理論在各領(lǐng)域的重要作用。
2.編譯資源分析
在幾十年的研究過(guò)程中,編譯領(lǐng)域已經(jīng)形成了很多編譯資源,如LEX、YACC、JavaCC為代表的編譯模塊開發(fā)工具,以及精簡(jiǎn)語(yǔ)言編譯器、產(chǎn)品級(jí)開源編譯器等。這些工具實(shí)現(xiàn)了從Ada、C、Pascal等面向過(guò)程語(yǔ)言到Java、C++等面向?qū)ο笳Z(yǔ)言的編譯程序,覆蓋了文法、詞法分析、語(yǔ)法分析、中間代碼生成、代碼優(yōu)化、目標(biāo)代碼生成等編譯原理教學(xué)中所有的知識(shí)點(diǎn)。基于這些工具也開發(fā)了SQL、XML分析等計(jì)算機(jī)科學(xué)其他領(lǐng)域的應(yīng)用。下面,筆者從生成語(yǔ)言、知識(shí)點(diǎn)覆蓋等角度對(duì)互聯(lián)網(wǎng)上的編譯資源進(jìn)行整理分析。
2.1從編程語(yǔ)言的角度分析
從編譯資源所面向的程序語(yǔ)言來(lái)看,從面向特殊領(lǐng)域的Fortran語(yǔ)言、DSP語(yǔ)言,面向過(guò)程的C語(yǔ)言、Pascal語(yǔ)言,到常見的面向?qū)ο蟮腏ava語(yǔ)言、C++、C#語(yǔ)言等,均有種類繁多的分析器、生成器、目標(biāo)代碼優(yōu)化器等可用于案例教學(xué)的編譯資源。
1)面向過(guò)程語(yǔ)言的編譯資源。
這方面的編譯資源主要針對(duì)C語(yǔ)言和Pascal語(yǔ)言。C語(yǔ)言作為最被廣泛使用的編程語(yǔ)言,也擁有最多的編譯工具資源,如YACC、LEX、ACCENT、BANSHEE等經(jīng)典工具均可用來(lái)產(chǎn)生C語(yǔ)言編程的分析器、生成器。其中,最知名的C語(yǔ)言解析器生成器YACC已經(jīng)在各種場(chǎng)合得到了廣泛應(yīng)用。YACC也是常用于編譯課程教學(xué)的工具,它采用LALR(1)語(yǔ)法分析方法,最初由AT&T為Unix操作系統(tǒng)開發(fā),在漫長(zhǎng)的演變中產(chǎn)生了如Berkeley YACC、GNU BISON、MKS YACC和Abraxas YACC等變種版本,也出現(xiàn)了AYACC、YACC++等面向ADA、c++其他語(yǔ)言的編譯器。由于所產(chǎn)生的解析器需要詞法分析器配合,因此YACC經(jīng)常和詞法分析器產(chǎn)生器LEX一起使用,目前已有IEEE相關(guān)標(biāo)準(zhǔn)對(duì)YACC和LEX的功能進(jìn)行了標(biāo)準(zhǔn)化描述。此外,ACCENT、BEG、CKIT等面向c語(yǔ)言的編譯資源也可以用于編譯課程教學(xué)。據(jù)我們初步統(tǒng)計(jì),目前互聯(lián)網(wǎng)上可用的針對(duì)c語(yǔ)言的編譯資源多達(dá)20余種,涵蓋了詞法分析、語(yǔ)法分析、前端、后端生成器、代碼優(yōu)化、程序分析等編譯過(guò)程中的各個(gè)環(huán)節(jié)。
2)面向?qū)ο笳Z(yǔ)言的編譯資源。
面向?qū)ο笳Z(yǔ)言已成為程序開發(fā)的主流語(yǔ)言,在應(yīng)用層軟件、網(wǎng)絡(luò)服務(wù)開發(fā)上占據(jù)著絕對(duì)優(yōu)勢(shì)地位。因此,目前也相應(yīng)出現(xiàn)了很多針對(duì)面向?qū)ο缶幊陶Z(yǔ)言的編譯資源,特別是C++語(yǔ)言和Java語(yǔ)言。C++語(yǔ)言由于與C語(yǔ)言一脈相承,許多針對(duì)c語(yǔ)言的編譯工具也擴(kuò)展了c++版本,如YACC++、Berkeley YACC、IDC-C等,均可以生成C/C++語(yǔ)言的分析器。
Java語(yǔ)言在最近20年一直是最流行的編程語(yǔ)言。Java語(yǔ)言為了實(shí)現(xiàn)跨平臺(tái)的目標(biāo),在編譯時(shí)僅生成字節(jié)碼,再由不同平臺(tái)的JVM生成目標(biāo)代碼執(zhí)行;因此,Java語(yǔ)言的編譯執(zhí)行具有明確的前端后端,非常有利于編譯程序的開發(fā)和編譯原理知識(shí)點(diǎn)的分解。目前針對(duì)Java語(yǔ)言的編譯資源與工具種類繁多,如JavaCC、JastAdd、Jax、Jfront、Soot、PAT等,我們目前已經(jīng)收集到相關(guān)編譯資源20余種,既有JavaCC等綜合編譯環(huán)境,又有Jfront前端工具、PAT正則表達(dá)式分析器、OOPS分析優(yōu)化工具等編譯工具資源。
3)其他專用語(yǔ)言、平臺(tái)的編譯資源。
為了符合特殊應(yīng)用場(chǎng)景的計(jì)算需求,出現(xiàn)了一些針對(duì)特定領(lǐng)域、特定平臺(tái)的程序語(yǔ)言,同樣,在這些領(lǐng)域中對(duì)編譯器往往也存在獨(dú)特的需求,如嵌入式系統(tǒng)、科學(xué)計(jì)算等,如針對(duì)SPARC平臺(tái)的編譯器BEG就能對(duì)Fortran、Modula等專用語(yǔ)言進(jìn)行分析編譯,而Archelon編譯器則針對(duì)DSP芯片為執(zhí)行代碼生成做了專門的優(yōu)化。ELI是這一類編譯資源的典型代表,它除了支持上述流行編程語(yǔ)言及專用語(yǔ)言如c、Fortran外,甚至支持對(duì)用戶定義的語(yǔ)言生成獨(dú)有的編譯器,從而幫助用戶快速地實(shí)現(xiàn)一種專業(yè)程序語(yǔ)言。
2.2從知識(shí)點(diǎn)的角度分析
為利于編譯原理課程的教學(xué),我們更希望從知識(shí)點(diǎn)的角度梳理相關(guān)資源,在講授相關(guān)課程時(shí),可以介紹這些經(jīng)典的編譯工具。通過(guò)認(rèn)識(shí)真實(shí)編譯系統(tǒng)的工作流程和開發(fā)技術(shù),幫助學(xué)生理解關(guān)鍵知識(shí)點(diǎn)。我們從詞法分析、語(yǔ)法分析、編譯前端、編譯后端、程序分析及優(yōu)化、完整的編譯器平臺(tái)等類別對(duì)現(xiàn)有的編譯資源進(jìn)行了梳理和分類。
1)詞法分析。
詞法分析器以UNIX/LINUX上的LEX為典型代表,能夠生成c語(yǔ)言描述的詞法分析器;而AFLEX作為L(zhǎng)EX的變種,能生成ADA語(yǔ)言描述的詞法分析器;Quex還能生成C/C++、Python語(yǔ)言描述的詞法分析器;相關(guān)的資源還包括LOLO、FLEX等。
2)語(yǔ)法分析。
支持語(yǔ)法分析的編譯工具最為豐富,從簡(jiǎn)單到復(fù)雜的相關(guān)開發(fā)案例也最多,可以很好地用于支撐課程教學(xué)。如前文所述,語(yǔ)法分析器以YACC為典型代表,這一系列的語(yǔ)法分析器還包括AYACC、BISON、BYACC、BEG。CUP、Jell等Java語(yǔ)言開發(fā)的語(yǔ)法分析器生成器,可以生成Java語(yǔ)言描述的語(yǔ)法分析器。ANTLR是一種用Java開發(fā)的強(qiáng)大的語(yǔ)法分析器生成工具,可以生成各種語(yǔ)言描述的語(yǔ)法分析器,包括Ada、C、C#、Java、JavaScript、Objective-C等,以及Perl、Python和Ruby等較新的互聯(lián)網(wǎng)程序語(yǔ)言和腳本語(yǔ)言,甚至包括SQL、一階邏輯、XPath等應(yīng)用語(yǔ)言等。ACCENT則是一個(gè)包含了詞法分析器和語(yǔ)法分析器的生成工具。JavaCC是當(dāng)前應(yīng)用非常廣的一種語(yǔ)法分析器生成工具,能產(chǎn)生Java語(yǔ)言描述的LL(K)分析程序。值得一提的是,目前已經(jīng)有非常多的利用JavaCC開發(fā)的各種語(yǔ)言的分析程序,包括了表達(dá)式等簡(jiǎn)單語(yǔ)言,如DTD、IDL、RTF等應(yīng)用語(yǔ)言,以及PHP等實(shí)用的腳本語(yǔ)言。隨著技術(shù)的發(fā)展,甚至出現(xiàn)了OOPS等面向?qū)ο蟮姆治銎魃晒ぞ摺?/p>
3)編譯前端。
面向c語(yǔ)言的中間代碼生成工具最著名的是Ckit,它支持將c語(yǔ)言程序翻譯譯成SML類型的中間語(yǔ)言,也支持用戶擴(kuò)展C語(yǔ)言語(yǔ)法的前端編譯。EDG則能將C++和Java等語(yǔ)言翻譯成一種高級(jí)的樹結(jié)構(gòu)中間語(yǔ)言,并具有錯(cuò)誤檢查功能。在面向Java語(yǔ)言方面,比較知名的編譯器前端包括Jfront等。此外,為滿足特定應(yīng)用場(chǎng)景需求,還出現(xiàn)了IDC-C、SUIF等編譯前端及中間代碼優(yōu)化工具。
4)編譯后端。
編譯器后端方面的資源相對(duì)前端來(lái)說(shuō)較少,比較知名的編譯器后端是BEG,以BEGL中間語(yǔ)言為輸入,可用于生成Motorola 68020、SPARC、MIPSl Intel 386、Pentium?Inmos T800和PowerPC等平臺(tái)的目標(biāo)代碼。在Java語(yǔ)言方面,Sable研究小組基于XML提出了JIL中間表示語(yǔ)言,利用XML的特性為執(zhí)行代碼的生成和優(yōu)化提供便利。此外,還有Trimam等針對(duì)并行環(huán)境生成執(zhí)行代碼并優(yōu)化的后端編譯器生成器等工具。
5)程序分析及代碼優(yōu)化。
在程序分析及代碼優(yōu)化方面的編譯工具較多,如BANSHEE、CodeSurfer、Omega、OOPS、PAG、SOOT等。其中BANSHEE、CodeSurfer、Kimwitu、MEMPHIS、PAG等工具針對(duì)C/C++程序進(jìn)行分析,Omega、PAT等工具則可以對(duì)Fortran、Java程序進(jìn)行分析,SOOT、OOPS提供了對(duì)Java等語(yǔ)言編譯器的優(yōu)化,上文中提到的Trimam及SUIF等則針對(duì)并行環(huán)境進(jìn)行了代碼優(yōu)化。
6)編譯器平臺(tái)。
除上述實(shí)現(xiàn)了部分編譯模塊的開發(fā)工具之外,還存在著大量實(shí)現(xiàn)了從詞法分析、語(yǔ)法分析直至最后目標(biāo)代碼生成所有環(huán)節(jié)的編譯器平臺(tái)資源,這些資源用于案例教學(xué)可以幫助學(xué)生對(duì)編譯的全過(guò)程進(jìn)行一個(gè)整體的理解和把握。這些平臺(tái)可以分為兩類:一類是以精簡(jiǎn)語(yǔ)言為源語(yǔ)言的小型編譯器,如PL語(yǔ)言(PASCAL子集)編譯器、與ADA和PASCAL類似的TINY編譯器,以及斯坦福大學(xué)開發(fā)的COOL(The Classroom ObiectOriented Language)編譯器,這些編譯器都是面向?qū)iT為教學(xué)設(shè)計(jì)的某種精簡(jiǎn)的編程語(yǔ)言,將其翻譯成某種抽象機(jī)代碼,借助抽象機(jī)解釋器執(zhí)行;另一類是以GCC、LCC為代表的產(chǎn)品級(jí)開源編譯器,面向C/C++這類主流的編程語(yǔ)言,提供開源、實(shí)用的編譯程序。
3.編譯資源在課程教學(xué)中的應(yīng)用
通過(guò)上面的分析,我們看到編譯開發(fā)工具和相關(guān)案例是非常豐富的,但是如何將這些工具和案例很好地結(jié)合到教學(xué)中,則需要做仔細(xì)的選擇和考慮。不論從課程教學(xué),還是實(shí)踐教學(xué)來(lái)看,編譯原理課程的學(xué)習(xí)可以從局部知識(shí)點(diǎn)和系統(tǒng)整體兩個(gè)層次開展。課程教學(xué)需要在掌握編譯各階段的具體知識(shí)點(diǎn)的基礎(chǔ)上,加強(qiáng)各知識(shí)點(diǎn)之間的融會(huì)貫通,并恰當(dāng)及時(shí)地從局部向系統(tǒng)整體引申。
在詞法分析、語(yǔ)法分析、語(yǔ)義分析、優(yōu)化、目標(biāo)代碼生成等知識(shí)點(diǎn)的學(xué)習(xí)過(guò)程中,可以引人相應(yīng)模塊的開發(fā)工具作為案例。如在講解詞法分析時(shí)可以結(jié)合LEX、在講解自上而下分析時(shí)結(jié)合JavaCC、講解自下而上分析時(shí)結(jié)合BISON,甚至可以在課堂教學(xué)時(shí)展示這些工具的核心代碼,加深學(xué)生對(duì)相關(guān)算法的印象。也可以在課外安排實(shí)踐作業(yè),要求學(xué)生選擇這些工具提供的案例資源,以已有的案例為基礎(chǔ)(為調(diào)動(dòng)學(xué)習(xí)興趣,可以有意識(shí)地選擇學(xué)生在其他課程中已經(jīng)熟悉的語(yǔ)言,如數(shù)據(jù)庫(kù)中的SQL、操作系統(tǒng)中的Shell命令語(yǔ)言、離散數(shù)學(xué)中的謂詞邏輯等),實(shí)際生成一個(gè)編譯模塊,閱讀分析生成程序,在此基礎(chǔ)上,可要求學(xué)生擴(kuò)展原有案例。通過(guò)結(jié)合這些工具講解理論知識(shí),并通過(guò)實(shí)踐作業(yè),使得學(xué)生能夠理解局部知識(shí)點(diǎn),并掌握相關(guān)成熟的工具的使用。
在系統(tǒng)開發(fā)層面,編譯程序的開發(fā)是一個(gè)典型復(fù)雜的軟件開發(fā)任務(wù)。如果能在理解局部知識(shí)點(diǎn)的基礎(chǔ)上,為學(xué)生提供一個(gè)理解編譯程序整體全貌的平臺(tái),以編譯過(guò)程為指導(dǎo)帶動(dòng)課程知識(shí)點(diǎn)的學(xué)習(xí),也是非常有益的。如何在編譯程序的功能實(shí)用性和教學(xué)可用性兩方面保持平衡,一直是編譯教學(xué)的難題。開展綜合性實(shí)驗(yàn),是提高學(xué)生對(duì)編譯程序整體理解和開發(fā)能力的主要途徑。在這方面,有兩種思路。一種是側(cè)重整體體驗(yàn),主要是面向一個(gè)為教學(xué)而專門設(shè)計(jì)的精簡(jiǎn)語(yǔ)言,如前文介紹的PL、TINY和COOL等,這些語(yǔ)言通常包含現(xiàn)代程序設(shè)計(jì)語(yǔ)言典型成分,但更為精簡(jiǎn),學(xué)生可以通過(guò)課程學(xué)習(xí),最后為該語(yǔ)言實(shí)現(xiàn)一個(gè)完整的編譯器。按照這種方案開展綜合性實(shí)驗(yàn),有利于學(xué)生體驗(yàn)一個(gè)完整的編譯程序開發(fā)過(guò)程。第二種思路側(cè)重實(shí)用性和真實(shí)性,主要以GCC、LCC這類實(shí)用的,甚至是產(chǎn)品級(jí)的開源編譯器為平臺(tái)開展實(shí)踐。由于GCC、LCC這類實(shí)用編譯程序代碼量非常大,如何引導(dǎo)學(xué)生在紛繁復(fù)雜的代碼中理清頭緒、找到和教學(xué)知識(shí)點(diǎn)相關(guān)的程序段,需要教師做好充分的準(zhǔn)備。這種思路,對(duì)于將來(lái)從事編譯程序開發(fā)的學(xué)生,其收獲可能更大。
計(jì)算機(jī)軟件開發(fā)語(yǔ)言在發(fā)展的過(guò)程中,一共經(jīng)歷了三個(gè)過(guò)程。即面向過(guò)程的語(yǔ)言、面向?qū)ο蠛兔嫦蚍矫娴恼Z(yǔ)言。第一,面向過(guò)程的語(yǔ)言。面向過(guò)程的語(yǔ)言的工作原則是將問(wèn)題進(jìn)行有效的分解成很多小的模塊,每個(gè)模塊中都是構(gòu)成問(wèn)題的子問(wèn)題,在程序編寫過(guò)程中,通過(guò)自上而下的順序逐步對(duì)各個(gè)問(wèn)題進(jìn)行解決,是一種結(jié)構(gòu)化編碼的語(yǔ)言。在計(jì)算機(jī)發(fā)展初期,計(jì)算機(jī)語(yǔ)言只有機(jī)器語(yǔ)言和匯編語(yǔ)言,語(yǔ)言的限制要求程序的編寫人員要對(duì)計(jì)算機(jī)的硬件很熟悉。隨著計(jì)算機(jī)的發(fā)展,計(jì)算機(jī)語(yǔ)言也開始向高級(jí)語(yǔ)言方向發(fā)展,軟件開發(fā)過(guò)程中受到硬件限制的因素變少。面向過(guò)程的語(yǔ)言進(jìn)行編程時(shí)比較簡(jiǎn)單,并且結(jié)構(gòu)性也很強(qiáng),可讀性比較高,但也有一定的缺點(diǎn),比如數(shù)據(jù)與程序模塊的分離和程序的可重用性比較差。第二,面向?qū)ο蟮恼Z(yǔ)言。面向?qū)ο蟮恼Z(yǔ)言在結(jié)構(gòu)化設(shè)計(jì)、并行處理等方面,繼承了前一種語(yǔ)言的優(yōu)點(diǎn),同時(shí),還解決了面向過(guò)程的語(yǔ)言中數(shù)據(jù)與代碼分離的缺點(diǎn)。面向?qū)ο蟮恼Z(yǔ)言被用作程序開發(fā)語(yǔ)言的主要目的是為了拉近計(jì)算機(jī)解決問(wèn)題過(guò)程中的空間結(jié)構(gòu)和應(yīng)用程序的各種體系結(jié)構(gòu)之間的距離,有助于程序開發(fā)過(guò)程朝著更加便捷順暢的方向發(fā)展。繼承性是面向?qū)ο蟮恼Z(yǔ)言的一個(gè)重要特征,很多時(shí)候通過(guò)對(duì)這些語(yǔ)言進(jìn)行層次分類來(lái)進(jìn)行管理,每個(gè)類不僅能對(duì)基類的操作進(jìn)行繼承,還能擴(kuò)展操作和數(shù)據(jù)。面向?qū)ο蟮恼Z(yǔ)言還有一個(gè)重要的特征就是多態(tài)性,使用多態(tài)性進(jìn)行處理,可以提高處理問(wèn)題的抽象級(jí)別,降低軟件設(shè)計(jì)時(shí)的復(fù)雜性。第三,面向方面的語(yǔ)言。面向方面的語(yǔ)言是在“方面”基礎(chǔ)上進(jìn)行的程序設(shè)計(jì)的一種語(yǔ)言。一般說(shuō)來(lái),可以把計(jì)算機(jī)的軟件系統(tǒng)看成是很多個(gè)為了滿足用戶的各種需求的關(guān)注點(diǎn),而這些關(guān)注點(diǎn)就是計(jì)算機(jī)要解決的需求問(wèn)題。軟件開發(fā)就是為了對(duì)這些關(guān)注點(diǎn)中的問(wèn)題進(jìn)行分析解決。關(guān)注點(diǎn)一般有兩類,一是核心關(guān)注點(diǎn),一是橫切關(guān)注點(diǎn)。而利用面向方面的語(yǔ)言進(jìn)行程序設(shè)計(jì)的關(guān)鍵就是橫切關(guān)注點(diǎn)。也就是常說(shuō)的“方面”,Aspect是面向方面的程序設(shè)計(jì)一個(gè)設(shè)計(jì)單元,面向方面的程序設(shè)計(jì)可以將核心關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)進(jìn)行一個(gè)有效的分離,實(shí)現(xiàn)更好的軟件結(jié)構(gòu)。但這兩種關(guān)注點(diǎn)對(duì)應(yīng)的代碼卻總是交織在一起的,也就是說(shuō)橫切關(guān)注點(diǎn)和核心關(guān)注點(diǎn)相互之間的交互關(guān)系不能很好地從業(yè)務(wù)功能中進(jìn)行有效的分離。面向方面的程序設(shè)計(jì)過(guò)程是一個(gè)系統(tǒng)的過(guò)程,先進(jìn)行整體的分析然后對(duì)橫切關(guān)注點(diǎn)進(jìn)行細(xì)化等,最后又進(jìn)行整合。根據(jù)關(guān)聯(lián)來(lái)實(shí)現(xiàn)橫切關(guān)注點(diǎn)之間的組合和優(yōu)化使得程序設(shè)計(jì)更加精細(xì),是面向方向的語(yǔ)言程序設(shè)計(jì)的關(guān)鍵。這種語(yǔ)言也有一個(gè)很大的好處,即一旦遇到客戶對(duì)系統(tǒng)有修改的需求時(shí),只需要在“認(rèn)證”的方面進(jìn)行修改,而不會(huì)影響到系統(tǒng)的其他方面等,可以提高工作效率。
二、常用的計(jì)算機(jī)軟件開發(fā)語(yǔ)言
(一)C語(yǔ)言
C語(yǔ)言是一種在匯編語(yǔ)言和高級(jí)語(yǔ)言之間的語(yǔ)言,它匯集了匯編語(yǔ)言和高級(jí)語(yǔ)言的有點(diǎn)。最初,C語(yǔ)言能夠應(yīng)用的系統(tǒng)只有UNIX系統(tǒng)中,隨著人們對(duì)計(jì)算機(jī)技術(shù)以及軟件開發(fā)等方面的認(rèn)識(shí)越來(lái)越多,C語(yǔ)言應(yīng)用的系統(tǒng)也越來(lái)越多,在其他的操作系統(tǒng)中也可以發(fā)揮很好的效益。具體說(shuō)來(lái),C語(yǔ)言的主要特點(diǎn)有幾個(gè)方面,第一,C語(yǔ)言是一種結(jié)構(gòu)化的語(yǔ)言,這種語(yǔ)言的一個(gè)重要特點(diǎn)就是層次非常清晰,如果是用模塊化的方式進(jìn)行程序的組織,則C語(yǔ)言是一種十分便利的語(yǔ)言,而且有利于對(duì)程序進(jìn)行調(diào)試和維護(hù)。第二,C語(yǔ)言中包含很豐富的數(shù)據(jù)類型和運(yùn)算符,而且也能夠訪問(wèn)到計(jì)算機(jī)系統(tǒng)內(nèi)存中的物理地址,有利于進(jìn)行位操作。第三,C語(yǔ)言的效率很高,移植性也比較強(qiáng),即能夠移植到不同的計(jì)算機(jī)上,C語(yǔ)言版本可以有很多種,不是單一形式的,同時(shí),在執(zhí)行的過(guò)程中,C語(yǔ)言的效率也比較高。
(二)C++語(yǔ)言
C++語(yǔ)言的一個(gè)優(yōu)點(diǎn)是利用封裝來(lái)減少程序變量對(duì)系統(tǒng)帶來(lái)的影響。C++語(yǔ)言可以看成是C語(yǔ)言的拓展和深化,但它仍然是一種全新的語(yǔ)言,因?yàn)樗哂械亩嗬^承機(jī)制能夠?qū)芏鄬?duì)象的屬性進(jìn)行一個(gè)準(zhǔn)確有效的描述。相比于C語(yǔ)言,它更容易被掌握和學(xué)習(xí),C++語(yǔ)言屬于一種面向?qū)ο蟮恼Z(yǔ)言,因此,使用C++語(yǔ)言進(jìn)行編程時(shí)可以更好地適應(yīng)大規(guī)模的軟件需求。利用C++語(yǔ)言編寫運(yùn)行程序的過(guò)程主要有四個(gè)步驟,即用C++語(yǔ)言進(jìn)行程序的編寫、對(duì)編寫的源程序進(jìn)行編譯、將一個(gè)程序的目標(biāo)程序和系統(tǒng)的庫(kù)文件以及系統(tǒng)信息進(jìn)行有效的連接,最后是運(yùn)行程序。
(三)Java語(yǔ)言
這種語(yǔ)言與C++語(yǔ)言相比而言,在安全性和簡(jiǎn)潔性方面有更多的優(yōu)勢(shì),這種語(yǔ)言的特點(diǎn)主要有幾個(gè)方面。首先,Java語(yǔ)言與C++語(yǔ)言相比,在程序編寫編譯過(guò)程中的很多錯(cuò)誤都大大減少了,例如在指針以及內(nèi)存管理中對(duì)程序出錯(cuò)率的控制上,Java語(yǔ)言有更高的效率。其次,Java語(yǔ)言是一種完全面向?qū)ο蟮恼Z(yǔ)言,同時(shí),Java語(yǔ)言還可以在計(jì)算機(jī)軟件開發(fā)初期對(duì)很多出現(xiàn)的錯(cuò)誤進(jìn)行檢查識(shí)別,以降低內(nèi)存的出錯(cuò)率。第三,使用Java語(yǔ)言進(jìn)行程序編寫的過(guò)程匯總,能夠?qū)⒊绦蚓幾g成一種中間的文件格式,這種格式的適用性更強(qiáng),也就是說(shuō),只要是包含Java運(yùn)行系統(tǒng)的機(jī)器都能對(duì)這種中間文件格式進(jìn)行讀取和執(zhí)行等。最后,Java語(yǔ)言的安全性能高,例如它刪除了手動(dòng)釋放內(nèi)存,可以很好地防止非法的內(nèi)存操作。此外,Java語(yǔ)言還具有很多其他的優(yōu)勢(shì),例如解釋性強(qiáng)、移植性好等,Java語(yǔ)言在Web瀏覽器以及網(wǎng)絡(luò)應(yīng)用系統(tǒng)之中是比較常見的。
(四)C#語(yǔ)言
關(guān)鍵詞:c語(yǔ)言;開源軟件;教學(xué)方法;程序設(shè)計(jì)
引言
現(xiàn)今國(guó)內(nèi)高校在教授c語(yǔ)言時(shí),多數(shù)教師基于Windows開發(fā)環(huán)境來(lái)講述c語(yǔ)言編程技術(shù)。由于Windows平臺(tái)的局限性,教師在教授計(jì)算機(jī)編程語(yǔ)言時(shí),無(wú)法深入講解相關(guān)的一些知識(shí)和技術(shù),使得學(xué)生對(duì)于編程語(yǔ)言的理解僅僅停留在表面,不能理解計(jì)算機(jī)編程語(yǔ)言c的本質(zhì),很多相關(guān)專業(yè)的畢業(yè)生所能從事的開發(fā)工作基本上還都是一些技術(shù)含量比較低的應(yīng)用層開發(fā)工作。究其原因是我們?cè)谑谡n的過(guò)程中過(guò)分依賴集成度很高的IDE開發(fā)工具,讓學(xué)生一鍵式完成開發(fā)全過(guò)程,而卻對(duì)整個(gè)過(guò)程一無(wú)所知,對(duì)細(xì)節(jié)基本上不清楚。高校作為承載和傳承技術(shù)的機(jī)構(gòu),理當(dāng)在平常的教學(xué)過(guò)程中竭盡所能把每一技術(shù)細(xì)節(jié)都講透、講到位,這樣才能培養(yǎng)出合格、有用、適合社會(huì)需求的高級(jí)技術(shù)開發(fā)人才。
國(guó)內(nèi)有很多優(yōu)秀的企業(yè)在基于開源軟件開發(fā)自己企業(yè)的產(chǎn)品,很多的產(chǎn)品都是用很簡(jiǎn)陋的工具而不是在諸如Vc這么強(qiáng)大的IDE開發(fā)環(huán)境下開發(fā)完成的。這些開源工具盡管集成度不是很高,但是每個(gè)工具各具功能,在產(chǎn)品開發(fā)的各個(gè)階段起著不同的作用,簡(jiǎn)單且實(shí)用。如果學(xué)生能理解這些工具的作用,實(shí)際上也就真正理解了開發(fā)一項(xiàng)產(chǎn)品的全過(guò)程,把握住了細(xì)節(jié)、核心。
鑒于以上所述并結(jié)合我校的特點(diǎn)和學(xué)以致用的辦學(xué)宗旨,我們?cè)谛!⒃侯I(lǐng)導(dǎo)的鼓勵(lì)和大力支持下,大膽嘗試基于開源軟件去講授c語(yǔ)言編程技術(shù),多角度去展現(xiàn)c的魅力和本質(zhì),放棄了在集成度很高的Windows下單純講述c語(yǔ)言知識(shí)點(diǎn)的傳統(tǒng)方式,教學(xué)取得了較好效果。
1 講授Gcc編譯器深入理解C語(yǔ)言開發(fā)過(guò)程
任何用高級(jí)語(yǔ)言編寫的程序都要經(jīng)歷由源代碼到預(yù)處理代碼、匯編代碼、計(jì)算機(jī)可識(shí)別的目標(biāo)代碼到最后的可執(zhí)行代碼的轉(zhuǎn)換才能運(yùn)行。但在Windows平臺(tái)下的IDE開發(fā)環(huán)境里僅僅需要點(diǎn)擊某個(gè)按鈕就一步生成可執(zhí)行文件,這表面上看很便捷,但學(xué)生很難在其中體驗(yàn)到高級(jí)語(yǔ)言程序運(yùn)行原理的一些相關(guān)細(xì)節(jié)。IDE幫我們做了太多的事情而隱含了過(guò)程細(xì)節(jié),使得學(xué)生很難將學(xué)習(xí)到理論和實(shí)際聯(lián)系起來(lái)。我們?cè)诮虒W(xué)實(shí)踐中嘗試使用最簡(jiǎn)單的Gee編譯器,講述Gee的各項(xiàng)參數(shù),可以使學(xué)生比較直觀的體驗(yàn)到一個(gè)高級(jí)語(yǔ)言編寫的程序是如何從源代碼逐步變成計(jì)算機(jī)可執(zhí)行文件的過(guò)程。在授課過(guò)程中講述編譯器的各項(xiàng)參數(shù),例如-E參數(shù)產(chǎn)生的結(jié)果是預(yù)處理文件,通過(guò)分析這個(gè)文件學(xué)生真正理解了預(yù)處理到底在做些什么工作,也就很容易理解include和關(guān)鍵字define的作用;而在講解Gee的_o參數(shù)時(shí),通過(guò)示例分析學(xué)生自然可以明白為什么要在源程序的開頭要調(diào)用#include和為什么我們不需要自己編寫prinff函數(shù)而直接調(diào)用也沒(méi)有錯(cuò)的原因。這樣在c語(yǔ)言教學(xué)過(guò)程中通過(guò)附帶講解這簡(jiǎn)單而又實(shí)用的Gee開源編譯器工具可以使學(xué)生深入理解開發(fā)的每一個(gè)環(huán)節(jié)。把握住了開發(fā)過(guò)程中的每一步每一細(xì)節(jié)才是真正把握了住了c語(yǔ)言程序的本質(zhì)和精髓。
2 引入Makefile概念理解項(xiàng)目本質(zhì)
企業(yè)需要的是有多年項(xiàng)目開發(fā)經(jīng)驗(yàn)、基本功扎實(shí)的開發(fā)工程師,所以在教授此門課程時(shí),注意到要讓學(xué)生建立項(xiàng)目的基礎(chǔ)概念和培養(yǎng)起扎實(shí)的基本功。一般,在講述c語(yǔ)言程序設(shè)計(jì)時(shí)多數(shù)老師會(huì)教學(xué)生使用諸如Turbo c、Vc++等軟件。這些軟件是好用,集成度高,但是屏蔽掉了很多的技術(shù)細(xì)節(jié)。隨便寫寫就可編成一個(gè)應(yīng)用程序,學(xué)生會(huì)有很多的困惑:我就寫了一個(gè)小程序怎么就生成這么大的一個(gè)應(yīng)用程序呢?而在教學(xué)過(guò)程中增補(bǔ)makefile知識(shí),使學(xué)生對(duì)系統(tǒng)和項(xiàng)目的組成關(guān)系有了一定的認(rèn)識(shí)。這較之傳統(tǒng)的一個(gè)c文件講述所有c語(yǔ)言的教學(xué)模式有了很大的變革。這樣在學(xué)生在走出校門進(jìn)入企業(yè)前已在自己的腦海里對(duì)項(xiàng)目、模塊有了一個(gè)基本的概念。磨刀不誤砍柴工,基礎(chǔ)打好了,干起活來(lái)才得心應(yīng)手。
3 放棄圖形化調(diào)試手段使用Gdb調(diào)試器
多數(shù)Windows平臺(tái)下的IDE開發(fā)工具所提供的c語(yǔ)言調(diào)試程序,可以很方便地對(duì)c語(yǔ)言代碼中的錯(cuò)誤跟蹤定位。但是越是方便的工具越是阻礙了學(xué)生處理問(wèn)題的能力的培養(yǎng),過(guò)于依賴圖形就會(huì)使學(xué)生在學(xué)習(xí)新知識(shí)的過(guò)程中逐步放棄邏輯思維和抽象思維的訓(xùn)練,也不利于學(xué)生對(duì)事物本質(zhì)的挖掘。基于此,我們?cè)赾語(yǔ)言教學(xué)過(guò)程中大膽放棄使用IDE開發(fā)工具去調(diào)試c語(yǔ)言程序,而向?qū)W生介紹使用開源軟件Gdb。學(xué)生通過(guò)學(xué)習(xí)break命令明白設(shè)置斷點(diǎn)的含義,通過(guò)學(xué)習(xí)bt命令了解函數(shù)調(diào)用棧的概念,通過(guò)學(xué)習(xí)info local了解棧幀、局部變量的意義,從而既鞏固了前期課程的知識(shí)又能深入理解調(diào)試程序的意義。實(shí)踐表明在c語(yǔ)言學(xué)習(xí)過(guò)程中介紹引入Gdb調(diào)試器知識(shí)可以使得學(xué)生養(yǎng)成獨(dú)立思考解決問(wèn)題的習(xí)慣。
4 開源工具鏈多角度展示C本質(zhì)魅力
c語(yǔ)言程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的課程,同時(shí)也是一門很難理解的課程,如果可以把一個(gè)知識(shí)點(diǎn)從多角度地向?qū)W生展現(xiàn),勢(shì)必能夠幫助學(xué)生更好地理解c語(yǔ)言。在開源軟件里有很多的小工具可以很方便地從各個(gè)方面向?qū)W生傳遞c語(yǔ)言的本質(zhì)。例如可以用vim編輯器寫入ab兩個(gè)字符并保存為ab.c,之后我們可以用oat ab.c將文件的內(nèi)容打印到屏幕上,而如果我們用od ab.c則可以以八進(jìn)制的方式把文件打印到屏幕上,而用hexdump ab.c則可以以十六進(jìn)制方式打印。顯然,一個(gè)事物可以多角度去看去辨析,才能更全面地了解事物的本質(zhì)。教學(xué)中我們采用了工程實(shí)際中常用的幾個(gè)開源工具向?qū)W生多角度展示c的本質(zhì)和魅力,例如用objdump-dsSx app>obj.txt這條命令可以很輕松地將一個(gè)應(yīng)用程序反匯編并保存下來(lái)。很多學(xué)生都想成為計(jì)算機(jī)高手,這條命令的引入極大地激發(fā)起他們的學(xué)習(xí)興趣,而再引入strings、nm等命令從不同的角度去看同一個(gè)可執(zhí)行應(yīng)用程序時(shí),學(xué)生學(xué)習(xí)c語(yǔ)言程序設(shè)計(jì)的興趣大增。學(xué)生學(xué)習(xí)這門課程的原動(dòng)力一旦得到激發(fā),學(xué)習(xí)過(guò)程自然也就由“要我學(xué)”變成“我要學(xué)”。
關(guān)鍵詞:面向?qū)ο蟮某绦蛟O(shè)計(jì);內(nèi)存分配;封裝;STL;多線程技術(shù);軟件工程
現(xiàn)代操作系統(tǒng)的誕生和發(fā)展與C語(yǔ)言是密不可分的,因此C語(yǔ)言是非常重要的程序設(shè)計(jì)語(yǔ)言。C++在C的基礎(chǔ)上增加了面向?qū)ο蟮母拍?從而具備了現(xiàn)代編程語(yǔ)言的一切特征。C和C++是密不可分的,在計(jì)算機(jī)軟件領(lǐng)域,提到C或者C++時(shí),實(shí)際上都是指C/C++。對(duì)于計(jì)算機(jī)及信息類專業(yè)的學(xué)生,甚或?qū)τ?jì)算機(jī)軟件從業(yè)人員,C/C++無(wú)疑占據(jù)著無(wú)可替代的核心位置。和C/C++語(yǔ)言本身的重要性相比,目前大多數(shù)高校的C/C++課程設(shè)置和教學(xué)內(nèi)容卻相對(duì)落后,這和教材建設(shè)滯后相關(guān),也和教材編著者缺少應(yīng)用實(shí)踐經(jīng)驗(yàn)有很大關(guān)系。
程序設(shè)計(jì)是一門實(shí)踐性非常強(qiáng)的課程,因此整個(gè)教學(xué)環(huán)節(jié)應(yīng)該以應(yīng)用為導(dǎo)向,以上機(jī)實(shí)驗(yàn)為手段,不斷強(qiáng)化和鞏固各種基本概念和核心技術(shù),才能培養(yǎng)出能勝任實(shí)際工作的合格畢業(yè)生,讓學(xué)生在走向工作崗位的第一天就具備很強(qiáng)的競(jìng)爭(zhēng)力。
現(xiàn)在,計(jì)算機(jī)和網(wǎng)絡(luò)已經(jīng)非常普及,這為教學(xué)提供了極為方便的實(shí)踐手段,與其他專業(yè)相比具有天然的優(yōu)越性。然而,也正因?yàn)橛?jì)算機(jī)和網(wǎng)絡(luò)的普及,競(jìng)爭(zhēng)也變得異常激烈,僅僅掌握一點(diǎn)基礎(chǔ)知識(shí),滿足于完成課本作業(yè),已無(wú)法適應(yīng)當(dāng)前的就業(yè)形勢(shì)。如何在激烈的就業(yè)競(jìng)爭(zhēng)中勝出,是每個(gè)大學(xué)生從入學(xué)第一天起就必須正視和嚴(yán)肅面對(duì)的問(wèn)題,也是每個(gè)高校教育工作者需要不斷思考和探索的重大課題。
1以C++為重點(diǎn),強(qiáng)調(diào)面向?qū)ο蟮某绦蛟O(shè)計(jì)思想
目前,大多數(shù)高校信息類專業(yè)將C和C++作為
兩門課程分開教學(xué),并且主要以C語(yǔ)言為主,C++甚至成為選修課程。這一方面是出于課時(shí)劃分的需要,另一方面也和當(dāng)前流行的教材相關(guān)。這樣的劃分雖然秉承了C語(yǔ)言和C++語(yǔ)言的發(fā)展歷程,卻忽略了現(xiàn)實(shí)需求。現(xiàn)代程序設(shè)計(jì)以對(duì)象為基本概念,以面向?qū)ο蟮脑O(shè)計(jì)為核心思想。面向?qū)ο蟮某绦蛟O(shè)計(jì)應(yīng)該是程序設(shè)計(jì)的起點(diǎn)和基本要求,沒(méi)有對(duì)象這個(gè)概念,軟件設(shè)計(jì)無(wú)從談起。
但是和Java等純面向?qū)ο蟮木幊陶Z(yǔ)言不同的是,C++語(yǔ)言一開始就繼承或者說(shuō)兼容了C語(yǔ)言的幾乎全部特征。因此,它并不是一個(gè)純面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,這大大增加了它的復(fù)雜性。必須強(qiáng)調(diào)的是,C++語(yǔ)言的復(fù)雜性雖然增加了學(xué)生學(xué)習(xí)的難度,但是正因?yàn)樗嫒萘薈語(yǔ)言的語(yǔ)法特征,使其具備了直接操作內(nèi)存的能力,從而成為開發(fā)系統(tǒng)級(jí)軟件和大型軟件的不二選擇,其重要性也是其他語(yǔ)言不能比擬的。掌握了C/C++,就等于擁有了通向軟件設(shè)計(jì)領(lǐng)域的金鑰匙。另一方面,所有的程序設(shè)計(jì)語(yǔ)言都是相通的,掌握了功能強(qiáng)大、既能接近系統(tǒng)底層又具有高級(jí)語(yǔ)言全部特征的C/C++程序設(shè)計(jì)語(yǔ)言,再學(xué)習(xí)其他高級(jí)語(yǔ)言就會(huì)輕車熟路。
合理分配C和C++的教學(xué)時(shí)間,將重點(diǎn)轉(zhuǎn)向C++,是一個(gè)艱難但重要的選擇。這需要好的教材,也需要好的教學(xué)計(jì)劃。C和C++是分不開的,不應(yīng)該將其割裂開,要從起點(diǎn)就強(qiáng)調(diào)面向?qū)ο蟮母拍睢?/p>
在教材內(nèi)容設(shè)置上,可以分為基礎(chǔ)篇和高級(jí)篇,這樣既利于學(xué)生循序漸進(jìn),也利于學(xué)時(shí)劃分。基礎(chǔ)篇應(yīng)包括C和C++的基本概念和語(yǔ)法,如基本數(shù)據(jù)類型、指針、函數(shù)、類的基本概念,對(duì)象的生命周期、對(duì)象的內(nèi)存映射等。高級(jí)篇應(yīng)包括類的高級(jí)特征和復(fù)雜應(yīng)用,并以最新的C++標(biāo)準(zhǔn)為基礎(chǔ),培養(yǎng)學(xué)生解決復(fù)雜和實(shí)際問(wèn)題的能力。如何合理劃分教學(xué)內(nèi)容,需要不斷地探索。高級(jí)篇的內(nèi)容可以集中教學(xué),也可以作為其他課程的實(shí)踐部分進(jìn)行。
2以內(nèi)存分配和管理為核心,強(qiáng)化專業(yè)訓(xùn)練
由于具備了直接操作內(nèi)存的能力,C/C++語(yǔ)言的功能變得十分強(qiáng)大,復(fù)雜性也大大增強(qiáng)。內(nèi)存概念應(yīng)該是編程學(xué)習(xí)和實(shí)踐的核心,是教學(xué)與實(shí)踐的重中之重。和內(nèi)存相關(guān)的主要概念有:指針、引用、數(shù)組、結(jié)構(gòu)、對(duì)象生命期、棧、堆、函數(shù)參數(shù)傳遞等。
現(xiàn)實(shí)中使用某軟件時(shí),經(jīng)常會(huì)遇到“程序崩潰”現(xiàn)象。這幾乎都是由于不當(dāng)?shù)膬?nèi)存訪問(wèn)引起的,其本質(zhì)原因是程序中存在嚴(yán)重的邏輯錯(cuò)誤。在編譯時(shí),編譯者不一定能夠及時(shí)發(fā)現(xiàn)這些錯(cuò)誤,但在運(yùn)行時(shí),當(dāng)錯(cuò)誤邏輯被觸發(fā)時(shí),很有可能造成內(nèi)存混亂,從而引起非法地址訪問(wèn),進(jìn)而導(dǎo)致程序崩潰。這種錯(cuò)誤比一般的業(yè)務(wù)邏輯錯(cuò)誤導(dǎo)致的計(jì)算結(jié)果不正確等問(wèn)題更隱蔽、更致命。一個(gè)專業(yè)的程序員,必須在編寫代碼階段就保證代碼的高質(zhì)量,不應(yīng)該等出現(xiàn)問(wèn)題再進(jìn)行查找和排除。因此,在整個(gè)程序設(shè)計(jì)教學(xué)中,必須加強(qiáng)內(nèi)存概念的理解,并不斷地訓(xùn)練和鞏固。
每個(gè)變量所代表的對(duì)象,無(wú)論是基本數(shù)據(jù)類型還是復(fù)雜對(duì)象,運(yùn)行時(shí)都需要實(shí)例化,都需要占用內(nèi)存。內(nèi)存是何時(shí)分配的?分配了多少?何時(shí)釋放?棧內(nèi)存和堆內(nèi)存的區(qū)別是什么?對(duì)象生命周期的本質(zhì)是什么?函數(shù)調(diào)用的本質(zhì)是什么?參數(shù)是如何傳遞的?函數(shù)返回值的本質(zhì)是什么?這些問(wèn)題在當(dāng)前的教學(xué)中常常被忽略,而實(shí)際上,它們是每個(gè)合格的程序員必須深刻理解和準(zhǔn)確回答出的問(wèn)題。因?yàn)椴焕斫膺@些概念,就不可能編寫出正確高效的代碼,設(shè)計(jì)出來(lái)的程序也一定是存在隱患甚至是錯(cuò)誤百出的。在教學(xué)中,應(yīng)該加強(qiáng)培養(yǎng)學(xué)生在這方面的專業(yè)素養(yǎng)。
3強(qiáng)調(diào)程序結(jié)構(gòu)和高效封裝,為職業(yè)級(jí)開發(fā)作準(zhǔn)備
簡(jiǎn)單來(lái)說(shuō),程序的流程無(wú)非順序、分支、循環(huán)三種。任何復(fù)雜、大型的程序,也是這些基本流程組成的。但是,編寫程序時(shí)如何劃分結(jié)構(gòu),合理地編寫函數(shù),做到代碼的復(fù)用,用以上幾種簡(jiǎn)單流程組合出一個(gè)結(jié)構(gòu)清晰而又效率很高的程序,是考驗(yàn)編程者水平的關(guān)鍵,也是任何編程語(yǔ)言開發(fā)程序員都要面臨的問(wèn)題。不過(guò),由于C/C++語(yǔ)言大多用于大型軟件以及系統(tǒng)級(jí)軟件的開發(fā),強(qiáng)調(diào)程序結(jié)構(gòu)的重要性顯得更為迫切和必要。
編寫程序就如同建筑師設(shè)計(jì)摩天大樓一樣,既需要嚴(yán)謹(jǐn)?shù)慕Y(jié)構(gòu),也需要藝術(shù)性的加工。好的程序代碼,閱讀起來(lái)就像欣賞藝術(shù)品,給人美的享受。而劣質(zhì)的程序,完全看不出編寫者的思路,混亂復(fù)雜,這樣的程序即使能夠正確執(zhí)行,也沒(méi)有任何生命力。
現(xiàn)代編程技術(shù)強(qiáng)調(diào)的是高效性和可讀性的結(jié)合。在不影響總體效率的情形下,以結(jié)構(gòu)清晰、高可讀性為第一要素,而強(qiáng)調(diào)封裝正是這一要求的具體體現(xiàn)。所謂封裝,有兩個(gè)層次,一是函數(shù)的封裝,二是對(duì)象的封裝。函數(shù)封裝主要是指將某個(gè)單一功能封裝在一個(gè)函數(shù)內(nèi)部。合理的函數(shù)功能定義有利于寫出結(jié)構(gòu)清晰的程序,有利于代碼的復(fù)用,而將不相關(guān)的代碼一股腦兒堆在一起,寫出超大函數(shù),則是函數(shù)封裝的大忌。對(duì)象的封裝就更重要了,這是面向?qū)ο蟪绦蛟O(shè)計(jì)中的核心問(wèn)題。對(duì)象概念要定義清晰、明確,成員函數(shù)要功能單一,除非有充足的理由,所有成員變量都應(yīng)設(shè)為私有,對(duì)象和外界打交道的唯一途徑就是公共成員函數(shù)。封裝對(duì)程序的維護(hù)至關(guān)重要,是現(xiàn)代程序設(shè)計(jì)的第一要素。
4掌握STL,理解和使用核心數(shù)據(jù)結(jié)構(gòu)
標(biāo)準(zhǔn)模板庫(kù)(Standard Template Library, STL)早已成為C++的標(biāo)準(zhǔn)。在商業(yè)軟件開發(fā)中,它們是每個(gè)程序員都要時(shí)刻使用和深度掌握的,重要性不言而喻。
在數(shù)據(jù)結(jié)構(gòu)課程中,學(xué)生會(huì)接觸到棧、隊(duì)列、鏈表、集合、映射、樹、哈希表等常見數(shù)據(jù)結(jié)構(gòu)。理解和掌握這些概念,對(duì)于簡(jiǎn)化程序設(shè)計(jì),提高程序效率,程序的標(biāo)準(zhǔn)化、模塊化設(shè)計(jì)至關(guān)重要。
大多數(shù)教材會(huì)將C/C++作為教學(xué)語(yǔ)言,來(lái)講解這些基本的數(shù)據(jù)結(jié)構(gòu)。自己動(dòng)手編寫簡(jiǎn)單的代碼并實(shí)現(xiàn),有利于概念的理解和掌握。但在商業(yè)開發(fā)中,必須使用成熟的已成為C++標(biāo)準(zhǔn)的STL,作為這些數(shù)據(jù)結(jié)構(gòu)的標(biāo)準(zhǔn)實(shí)現(xiàn)。要掌握和使用STL,首先要深度理解模板技術(shù)。模板技術(shù)是編程技術(shù)發(fā)展過(guò)程中的一次革命,它的出現(xiàn)極大地提高了代碼的復(fù)用程度,同時(shí)保持了程序的效率。它和面向?qū)ο蟮募夹g(shù)相輔相成,類似而又不同,掌握好這兩項(xiàng)技術(shù)就邁進(jìn)了C++編程的核心領(lǐng)地。
5重視高級(jí)概念
目前,多核技術(shù)得到了普通應(yīng)用,互聯(lián)網(wǎng)早已普及到千家萬(wàn)戶。在軟件開發(fā)中,開發(fā)人員必須掌握多線程技術(shù)和網(wǎng)絡(luò)技術(shù),因此教師要著力加大這方面的教學(xué),使學(xué)生的知識(shí)技能水平跟上時(shí)代的步伐。
多線程技術(shù)屬于編程中的高級(jí)領(lǐng)域,對(duì)開發(fā)者要求較高。要掌握好多線程技術(shù),必須有扎實(shí)的基本功,要深刻理解同步、事件等重要概念。在教學(xué)上,教師可結(jié)合操作系統(tǒng)等課程進(jìn)行教學(xué)。
網(wǎng)絡(luò)編程涉及到的知識(shí)也比較多,教師可配合計(jì)算機(jī)網(wǎng)絡(luò)等進(jìn)行教學(xué)。以前,這一領(lǐng)域顯得比較高深,隨著網(wǎng)絡(luò)的普及,學(xué)生對(duì)許多概念都有感性的認(rèn)識(shí),在此基礎(chǔ)上進(jìn)行專業(yè)訓(xùn)練,已沒(méi)有太多難度。
另外,數(shù)據(jù)庫(kù)操作也是軟件開發(fā)中必備的技術(shù),教師可以結(jié)合數(shù)據(jù)庫(kù)課程展開教學(xué)。
除了以上幾點(diǎn),和平臺(tái)相關(guān)的一些技術(shù),如Windows平臺(tái)下的窗口、消息、注冊(cè)表等技術(shù),以及類Unix平臺(tái)下的進(jìn)程管理、進(jìn)程間通信、文件系統(tǒng)等,也是非常重要的。對(duì)這些高級(jí)技術(shù)的學(xué)習(xí)不能僅停留在語(yǔ)言層面,要進(jìn)一步熟練掌握,這對(duì)于立志進(jìn)入軟件開發(fā)行業(yè)的學(xué)生非常重要。
6重視職業(yè)接軌,強(qiáng)調(diào)軟件工程
開發(fā)軟件,不僅僅是寫代碼。寫代碼僅是其中的一個(gè)環(huán)節(jié)。一個(gè)完整的產(chǎn)品或項(xiàng)目開發(fā)過(guò)程,都要經(jīng)歷需求分析、方案設(shè)計(jì)、代碼編寫、系統(tǒng)測(cè)試、產(chǎn)品部署、產(chǎn)品維護(hù)等各個(gè)環(huán)節(jié)。要加強(qiáng)在各個(gè)環(huán)節(jié)的訓(xùn)練,提高職業(yè)素養(yǎng),學(xué)生才能在就業(yè)競(jìng)爭(zhēng)中占得先機(jī),才能在工作崗位上快速進(jìn)入狀態(tài)。
這些訓(xùn)練可以安排在高年級(jí),特別是畢業(yè)設(shè)計(jì)階段來(lái)實(shí)施。教師要鍛煉學(xué)生用學(xué)到的知識(shí)和技能解決實(shí)際問(wèn)題的能力,要提高學(xué)生分析問(wèn)題的能力,提高其綜合設(shè)計(jì)水平。要訓(xùn)練和提高學(xué)生使用集成開發(fā)環(huán)境的能力、編譯調(diào)試程序的能力、書寫規(guī)范文檔的能力、團(tuán)隊(duì)合作開發(fā)的能力。通過(guò)這些系統(tǒng)的訓(xùn)練,學(xué)生就基本完成了從學(xué)業(yè)到職業(yè)的接軌。
7結(jié)語(yǔ)
C/C++語(yǔ)言在計(jì)算機(jī)相關(guān)專業(yè)的教學(xué)中占據(jù)著及其重要的地位,在學(xué)生的就業(yè)技能儲(chǔ)備中更是排在了十分優(yōu)先的位置。因此,C/C++語(yǔ)言教學(xué)必須緊密結(jié)合實(shí)際,針對(duì)企業(yè)對(duì)員工知識(shí)水平的真實(shí)需求,在教學(xué)內(nèi)容及課時(shí)分配等環(huán)節(jié)上進(jìn)行重大而科學(xué)的調(diào)整,才可避免教育和就業(yè)需求之間的脫節(jié)。在教學(xué)內(nèi)容的調(diào)整上,參考文獻(xiàn)[1]至[4]等提供了十分重要的素材,本文中提到的幾個(gè)方面則是重中之重。
參考文獻(xiàn):
[1] Scott Meyers. Effective C++中文版[M]. 侯捷,譯. 武漢:華中科技大學(xué)出版社,2001.
[2] 侯捷. STL源碼剖析[M]. 武漢:華中科技大學(xué)出版社,2002.
[3] Thomas H Cormen, Charles E Leiserson, Ronakd L Rivest,et al. 算法導(dǎo)論[M]. 潘金貴,顧鐵成,李成法,等譯. 北京:機(jī)械工業(yè)出版社,2007.
[4] Cay S. Horstmann,Gary Cornell. 最新Java 2 核心技術(shù)[M]. 王建華,董志敏,楊保明,等譯. 北京:機(jī)械工業(yè)出版社,2003.
Research on C/C++ Language Teaching Planning For Information Major
ZHAO Gui-qin
(Technical School, Shanghai Jiao Tong University, Shanghai 201101, China)
關(guān)鍵詞:地理信息系統(tǒng);交互式數(shù)據(jù)處理語(yǔ)言;空間數(shù)據(jù)引擎;C#;分布式應(yīng)用
0引言
進(jìn)行GIS應(yīng)用開發(fā),若直接從底層做起則開發(fā)周期長(zhǎng)、成本高。目前應(yīng)用最為廣泛的模式是集成二次開發(fā)[1],就是以當(dāng)前成熟的商業(yè)GIS平臺(tái)為基礎(chǔ),以高級(jí)開發(fā)語(yǔ)言為支持來(lái)進(jìn)行應(yīng)用開發(fā)。然而目前的商業(yè)GIS平臺(tái)價(jià)格昂貴,并且由于提供廠商在知識(shí)產(chǎn)權(quán)保護(hù)方面的考慮和限制,有些還不能用來(lái)開發(fā)完全獨(dú)立(Standalone)的應(yīng)用系統(tǒng)。
業(yè)界應(yīng)用最廣的ESRI[2]公司產(chǎn)品系列中提供了功能強(qiáng)大的基于COM技術(shù)的ArcObjects組件作為GIS二次開發(fā)工具,開發(fā)者可以借助其成熟的空間分析技術(shù)以及其與ArcSDE空間數(shù)據(jù)庫(kù)之間良好的協(xié)作特性,快速地實(shí)現(xiàn)GIS應(yīng)用系統(tǒng)的開發(fā)。然而在ArcGIS9.0之前的版本中,ArcObjects不是獨(dú)立的軟件開發(fā)工具包(SoftwareDevelopmentKit,SDK),無(wú)法脫離ArcGIS環(huán)境開發(fā)獨(dú)立的應(yīng)用系統(tǒng)[2];即便在新的ArcGIS9.0開始支持獨(dú)立開發(fā)的情形下,昂貴的許可費(fèi)用仍然使得目標(biāo)系統(tǒng)的應(yīng)用成本非常高。這對(duì)科研應(yīng)用目的而言,不但開發(fā)成本太高,而且靈活性很差。因而嘗試在系統(tǒng)的設(shè)計(jì)開發(fā)中,選擇基于矩陣運(yùn)算的交互式數(shù)據(jù)處理語(yǔ)言(InteractiveDataLanguage,IDL),以及商業(yè)化的空間數(shù)據(jù)管理引擎ArcSDE的集成開發(fā)模式,以期在性能和開發(fā)成本之間達(dá)成一個(gè)合理的平衡。
1開發(fā)環(huán)境
IDL是一種新型的面向圖形對(duì)象、基于矩陣的數(shù)據(jù)處理語(yǔ)言,自帶強(qiáng)大的數(shù)學(xué)庫(kù)支持,在數(shù)據(jù)運(yùn)算、分析和空間表現(xiàn)方面有出色的性能[3]。ArcSDE是非常成熟的空間數(shù)據(jù)庫(kù)引擎。通過(guò)結(jié)合MSSQLServer或Oracle大型關(guān)系數(shù)據(jù)庫(kù)系統(tǒng),可以建立具有良好性能的空間數(shù)據(jù)庫(kù)[2];并且通過(guò)利用ArcSDE提供的ClientAPIs(ApplicationProgrammingInterfaces,應(yīng)用編程接口)接口進(jìn)行開發(fā),系統(tǒng)的自主性較強(qiáng)。
經(jīng)過(guò)對(duì)多種開發(fā)環(huán)境和編程語(yǔ)言的比較,系統(tǒng)決定采用.NET作為實(shí)現(xiàn)平臺(tái)。C#是一種新的編程語(yǔ)言,它是專為生成運(yùn)行在.NET框架上的企業(yè)級(jí)應(yīng)用程序而設(shè)計(jì)的,同時(shí)具備C/C++的強(qiáng)大功能及VisualBasic的快速開發(fā)能力,是面向下一代操作系統(tǒng)的開發(fā)語(yǔ)言[4]。
2系統(tǒng)開發(fā)方案
2.1系統(tǒng)體系結(jié)構(gòu)
系統(tǒng)采用多層邏輯結(jié)構(gòu)的胖客戶端/瘦服務(wù)器端模式。服務(wù)器端由ArcSDE來(lái)實(shí)現(xiàn)空間數(shù)據(jù)的管理,結(jié)合服務(wù)器上的SQLServer構(gòu)成空間數(shù)據(jù)庫(kù)。客戶端由C#構(gòu)建,利用其在應(yīng)用程序開發(fā)方面的性能、快捷性及交互界面開發(fā)方面的出色能力,以彌補(bǔ)IDL在此方面的不足。IDL在系統(tǒng)中主要負(fù)責(zé)實(shí)現(xiàn)空間數(shù)據(jù)(含二維和三維)的本地訪問(wèn)管理和表現(xiàn),如空間數(shù)據(jù)的加載、本地管理、地圖渲染、三維顯示等;系統(tǒng)還可借助IDL強(qiáng)大的數(shù)據(jù)處理能力實(shí)現(xiàn)基于矩陣運(yùn)算的各種分析功能。IDL部分經(jīng)過(guò)良好的封裝被嵌入在客戶端的C#Shell中。
2.2客戶端程序框架
客戶端交互界面由C#和經(jīng)過(guò).NET封裝的IDLDrawWidget開發(fā)控件構(gòu)建。由于IDL并沒(méi)有像其他專業(yè)GIS開發(fā)組件(如ESRI的MapObjects或ArcObjects)一樣直接提供對(duì)GIS應(yīng)用開發(fā)的支持,因而基本的GIS功能需要利用IDL自行實(shí)現(xiàn)。圖層控件用標(biāo)準(zhǔn)的Windows基本控件組合開發(fā);鷹眼控件和地圖控件由經(jīng)過(guò).NET封裝的IDLDrawWidget開發(fā)控件來(lái)實(shí)現(xiàn);比例尺控件由Windows繪圖函數(shù)與IDL函數(shù)共同實(shí)現(xiàn)。
2.3空間數(shù)據(jù)管理
系統(tǒng)中所有的空間數(shù)據(jù)由ArcSDE空間數(shù)據(jù)庫(kù)統(tǒng)一管理,系統(tǒng)與ArcSDE的交互由C#Shell負(fù)責(zé)管理,具體的交互功能在體系結(jié)構(gòu)圖的DataAcess組件中實(shí)現(xiàn)。其中主要使用了經(jīng)過(guò).NET封裝的ArcSDECAPIs空間數(shù)據(jù)庫(kù)訪問(wèn)函數(shù)庫(kù)。
2.4空間數(shù)據(jù)處理與顯示
系統(tǒng)中使用IDL語(yǔ)言來(lái)進(jìn)行對(duì)空間數(shù)據(jù)的處理與運(yùn)算。IDL是目前對(duì)科學(xué)計(jì)算可視化支持較好的語(yǔ)言之一,是一種集成了所有科學(xué)計(jì)算環(huán)境中所需函數(shù)的面向矩陣運(yùn)算、用于數(shù)據(jù)可視化研究與應(yīng)用開發(fā)的第四代計(jì)算機(jī)語(yǔ)言,也是易于使用、面向矩陣的語(yǔ)言。它具有高級(jí)圖像處理能力、交互式二維和三維圖形技術(shù)、面向?qū)ο蟮木幊谭绞健penGL圖形加速、量化可視化表現(xiàn)、集成的數(shù)學(xué)與統(tǒng)計(jì)學(xué)算法、靈活的數(shù)據(jù)輸入/輸出方式、跨平臺(tái)圖形用戶界面工具包、連接ODBC兼容數(shù)據(jù)庫(kù)存取及多種程序連接工具等功能,并且能夠運(yùn)行于多種操作系統(tǒng)和硬件平臺(tái)之上。本質(zhì)上,IDL是一個(gè)巨大的C程序庫(kù),包括了編譯器、解釋器、圖像、算術(shù)處理器、用戶界面和大量依賴操作系統(tǒng)的代碼[5]。利用C#和IDL語(yǔ)言混合開發(fā)的系統(tǒng),既包含了IDL語(yǔ)言強(qiáng)大的科學(xué)計(jì)算能力,又具備了C#語(yǔ)言對(duì)系統(tǒng)開發(fā)的靈活性以及系統(tǒng)運(yùn)行的穩(wěn)定性,使得兩種語(yǔ)言在系統(tǒng)中達(dá)到優(yōu)勢(shì)互補(bǔ),是實(shí)現(xiàn)科學(xué)計(jì)算及可視化的一種有效途徑。
3SDE訪問(wèn)接口
系統(tǒng)采用了目前較為成熟的空間數(shù)據(jù)庫(kù)引擎ArcSDE與大型關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)SQLServer來(lái)實(shí)現(xiàn)對(duì)空間數(shù)據(jù)的分布式存儲(chǔ)和管理。需要解決的首要問(wèn)題是如何建立與ArcSDE的遠(yuǎn)程連接,并與之實(shí)現(xiàn)交互操作。
ArcSDE提供的訪問(wèn)通道有三條[6,7]。三條通道中:使用ArcObjects成本太高;而直接數(shù)據(jù)庫(kù)連接通過(guò)SQL語(yǔ)言直接從關(guān)系型數(shù)據(jù)庫(kù)中獲取以表、行、列為基礎(chǔ)的數(shù)據(jù),這種方法繞過(guò)了ArcSDE,適合于對(duì)非空間信息的訪問(wèn),但處理空間信息的難度很大;ArcSDE的ClientAPIs是較為基礎(chǔ)的一種功能形式,具有較長(zhǎng)的歷史和非常廣泛的應(yīng)用,它面向開放式系統(tǒng)開發(fā),可以用于客戶端與ArcSDE的交互過(guò)程。系統(tǒng)中最終采用ArcSDE提供的C語(yǔ)言客戶端API方式,以便在保證系統(tǒng)性能的前提下,降低系統(tǒng)的開發(fā)和運(yùn)行成本。
ArcSDE的CAPIs具有較高的數(shù)據(jù)訪問(wèn)性能、較完整的矢量和柵格數(shù)據(jù)訪問(wèn)和管理能力。但是它是一個(gè)復(fù)雜的體系,包括30個(gè)結(jié)構(gòu)、21個(gè)枚舉以及757個(gè)函數(shù),并且不支持面向?qū)ο螅矝](méi)有提供對(duì).NET環(huán)境的支持(只提供了C和Java兩個(gè)版本),因而難以直接在.NET環(huán)境中以不安全代碼(Unsafe)的方式訪問(wèn)。
為解決這一問(wèn)題,系統(tǒng)開發(fā)中利用托管(Managed)C++語(yǔ)言,將ArcSDE的CAPIs封裝為.NET環(huán)境支持的模塊,然后在.NET環(huán)境中使用。
4IDL與C#通信機(jī)制
4.1IDL對(duì)混合編程的支持
IDL為了更好地實(shí)現(xiàn)軟件開發(fā)的靈活性和面向?qū)ο蟮墓δ埽粩嗟貙?duì)功能進(jìn)行擴(kuò)充,并且增加了許多與其他語(yǔ)言之間的通信接口,并提供了許多與其他語(yǔ)言進(jìn)行混合編程的內(nèi)部API函數(shù)。IDL6.0可以與標(biāo)準(zhǔn)C、UNIXC、VisualC++、Java、Delphi等高級(jí)語(yǔ)言進(jìn)行混合編程。
IDL提供了以下幾種混合編程方法[8]:
(1)管道;
(2)在IDL中調(diào)用COM對(duì)象或ActiveX控件;
(3)IDLDrawWidgetActiveX控件;
(4)在IDL中使用Java對(duì)象;
(5)通過(guò)RPC調(diào)用IDL(UNIX);
(6)通過(guò)CALL_EXTERNAL函數(shù)調(diào)用外部函數(shù)。
4.2目標(biāo)系統(tǒng)適用的方式
由于目標(biāo)系統(tǒng)是在C#編程環(huán)境中使用IDL,IDL的MicrosoftWindows版本的ActiveX控件,即IDLDrawWidget最適合本文目標(biāo)系統(tǒng)開發(fā)的要求。IDLDrawWidget控件提供了在Windows程序中以ActiveX組件形式集成IDL功能的機(jī)制,為這些程序提供數(shù)據(jù)的分析和可視化能力。
IDL提供的IDLDrawWidget控件的主要特征如下[8]:
(1)IDLActiveX控件能顯示IDL直接圖形和對(duì)象圖形,通過(guò)設(shè)置“圖形顯示方式”屬性,控制圖形的顯示類型。
(2)IDLActiveX控件能夠響應(yīng)鼠標(biāo)事件。這些事件可以由外部程序觸發(fā),也可以由IDL自己產(chǎn)生。
(3)IDLActiveX控件提供了IDL與外部應(yīng)用環(huán)境之間的數(shù)據(jù)傳輸機(jī)制,使得IDL與外部程序之間的數(shù)據(jù)傳輸變得十分簡(jiǎn)單。
(4)IDLActiveX控件可以應(yīng)用于任何支持ActiveX控件的開發(fā)環(huán)境中。因此,可以將IDL強(qiáng)大的圖形顯示功能集成到外部應(yīng)用程序中,脫離IDL環(huán)境,具有很強(qiáng)的可塑性。
4.3通信及數(shù)據(jù)支持
IDL提供了以下Method用于傳遞數(shù)據(jù)和命令[8]:
(1)SetNamedData——向IDL傳遞數(shù)據(jù),支持所有的Variant數(shù)據(jù)格式;
(2)GetNamedData——支持VT_UI1、VT_I2、VT_I4、VT_R4、VT_R8和VT_BSTR;
(3)CopyNamedArray——返回IDL數(shù)組的復(fù)本;
(4)SetNamedArray——在.NET、Delphi等環(huán)境下不能實(shí)現(xiàn)數(shù)據(jù)共享,只能傳入數(shù)據(jù);
(5)ExecuteStr——執(zhí)行標(biāo)準(zhǔn)IDL語(yǔ)句,也可以作為一種數(shù)據(jù)的傳遞方式;
(6)VariableExists——用于判斷IDL環(huán)境中是否已經(jīng)存在給定變量名稱的變量;
事件傳遞:
(1)鼠標(biāo)事件由.NET環(huán)境處理;
(2)保留通過(guò)文本結(jié)果輸出來(lái)實(shí)現(xiàn)由IDL到.NET環(huán)境的主動(dòng)事件激發(fā)的方式。
IDL對(duì)空間數(shù)據(jù)存儲(chǔ)格式的支持:
(1)矢量——支持直接讀寫Shapefile(通過(guò)IDLffShape類)、DXF(IDLffDXF);
(2)柵格——不支持GRID空間數(shù)據(jù),只支持讀寫圖像格式數(shù)據(jù)。
4.4C#與IDL間的數(shù)據(jù)傳遞機(jī)制
由于IDL支持的空間數(shù)據(jù)格式有限,并且不支持ArcSDE,系統(tǒng)中不直接使用IDL讀取空間數(shù)據(jù),而是由.NET主環(huán)境中的C#Shell負(fù)責(zé)從空間數(shù)據(jù)庫(kù)讀取數(shù)據(jù),然后再傳入IDL環(huán)境。
IDL與主環(huán)境之間的數(shù)據(jù)傳遞只處理單值或者數(shù)組數(shù)據(jù);而點(diǎn)、線、多邊形等較為復(fù)雜的矢量結(jié)構(gòu)數(shù)據(jù),需要首先分解為單值或數(shù)組后傳遞給IDL,再由IDL根據(jù)所給數(shù)據(jù)生成合適的對(duì)象圖形,實(shí)現(xiàn)空間數(shù)據(jù)的表現(xiàn)和管理。
5IDL對(duì)象與GIS對(duì)象
IDL不直接支持GIS中空間數(shù)據(jù)的管理和表現(xiàn),需要自己定義和實(shí)現(xiàn)該部分功能。系統(tǒng)實(shí)現(xiàn)中采用從IDL對(duì)象圖形類繼承的方式,擴(kuò)展已有的IDL圖形功能,定義新的空間數(shù)據(jù)類。空間數(shù)據(jù)類完成從.NET環(huán)境接收單值和表格數(shù)據(jù),并進(jìn)行管理和渲染表現(xiàn)等任務(wù)。
6結(jié)束語(yǔ)
利用IDL、ArcSDE和C#來(lái)集成開發(fā)分布式GIS應(yīng)用系統(tǒng),三者相輔相成,優(yōu)勢(shì)互補(bǔ)。其不但在很短的開發(fā)周期內(nèi)以極低的開發(fā)成本建立非常專業(yè)的GIS應(yīng)用系統(tǒng),而且系統(tǒng)在保證數(shù)據(jù)安全性及性能的前提下,運(yùn)行成本也很低廉,為GIS的應(yīng)用提供了一種新的途徑。
參考文獻(xiàn):
[1]劉光.地理信息系統(tǒng)二次開發(fā)教程——組件篇[M].北京:清華大學(xué)出版社,2003:1-2.
[2]ESRIInc.ESRI:theGISsoftwareleader[EB/OL].[2005]..
[3]RSIInc.RSI:dataanalysisandvisualizationsoftware[EB/OL].[2005]./pr/detail.asp?PRID=46.
[4]MicrosoftInc.MSDNhomepage[EB/OL].[2005]..
[5]閆殿武.IDL可視化工具入門與提高[M].北京:機(jī)械工業(yè)出版社,2003:1-360.
[6]ESRIInc.UnderstandingArcSDE[M/CD].[S.l.]:[s.n.],2002.