Ada屬于一種強(qiáng)類型通用程序設(shè)計(jì)語言,它比較適用于大型的復(fù)雜軟件系統(tǒng),尤其是實(shí)時(shí)和嵌入式系統(tǒng)?,F(xiàn)在我國很多衛(wèi)星型號(hào)軟件都采用Ada語言 進(jìn)行開發(fā)。由于衛(wèi)星使用的芯片代碼區(qū)容量有限,為了實(shí)現(xiàn)更多的功能,提高衛(wèi)星的使用率,對(duì)于代碼的復(fù)用顯得尤為重要。研究Ada語言的可重用性技術(shù)方法很 有必要,通過對(duì)Ada語言重用性技術(shù)方法研究以及其實(shí)際應(yīng)用介紹,能夠更好的幫助軟件開發(fā)人員以盡量少的代碼來實(shí)現(xiàn)盡量多功能。 關(guān)鍵詞:衛(wèi)星;Ada語言;可重用性;類屬單元;C++綁定 自從問世以來,Ada得到了世界各國的廣泛重視,已相繼成為美國、歐洲主要西方國家的軍用標(biāo)準(zhǔn)和國家標(biāo)準(zhǔn),我國也于1992年制定為了國家標(biāo) 準(zhǔn)語言(GJB1383-92)??梢园袮da語言視為現(xiàn)代程序設(shè)計(jì)語言的一個(gè)里程碑和頂峰,Ada語言在很多方面的評(píng)估上都要優(yōu)于其他編程語言,如對(duì)風(fēng) 險(xiǎn)程度的評(píng)估、生存期費(fèi)用的評(píng)估、可維護(hù)性以及可擴(kuò)展性的評(píng)估、可用性和可靠性的評(píng)估、效率的評(píng)估、能力的評(píng)估等六個(gè)方面,它的評(píng)分時(shí)優(yōu)于現(xiàn)在比較常用的 C、C++、FORTRAN、PASCAL等主要流行編程語言。 Ada語言的特點(diǎn)主要有:可讀性好、允許分離編譯、支持抽象和信息隱藏、促進(jìn)軟件的重用、實(shí)施強(qiáng)類型機(jī)制、提供多任務(wù)功能、具有異常處理能力 等。因Ada在上述方面具有明顯優(yōu)點(diǎn),所以它是非常適于大型和實(shí)時(shí)嵌入式系統(tǒng)開發(fā)和維護(hù)的通用高級(jí)語言。目前我國衛(wèi)星型號(hào)的軟件廣泛應(yīng)用Ada語言開發(fā)。 1 Ada 語言的可重用性方法 1.1 軟件可重用性 軟件的可重用性一直都是軟件工程中人們所追求的目標(biāo)之一??芍赜眯圆坏兄谔岣哕浖馁|(zhì)量及其開發(fā)效率、而且有助于降低軟件的開發(fā)費(fèi)用和維 護(hù)費(fèi)用。從另一個(gè)方面上理解,軟件工程的可重用性還應(yīng)該包括多個(gè)方面,比如說:應(yīng)用項(xiàng)目的重用性,規(guī)格說明的重用性,設(shè)計(jì)的重用性,概念和方法的重 用性等等??偟膩碚f,層次越高的重用,也就會(huì)帶來的越大效益。 模板元的編程是一種編程方式,在編譯期通過模板實(shí)例化進(jìn)行計(jì)算。早在1994 年,由Erwin Unruh 在一次C++標(biāo)準(zhǔn)委員會(huì)的會(huì)議上提出的。因?yàn)槠渚幾g器執(zhí)行的獨(dú)特的優(yōu)點(diǎn),模板元編程很快就引起了大家廣泛興趣。此后,模板元編程得到了快速的發(fā)展, 并且在軟件開發(fā)過程中得到了成功的應(yīng)用。到目前為止,很多種編程語言都對(duì)模板元編程提供了很好地支持。 然而在傳統(tǒng)的編程過程中,每個(gè)程序都要經(jīng)過編譯、鏈接以及執(zhí)行這三個(gè)必不可少的步驟。編譯過程做的只是將代碼翻譯成機(jī)器能識(shí)別的機(jī)器語言。一般來說,在編譯期能做的還是很少的,編程的任務(wù)大都在運(yùn)行期執(zhí)行。與傳統(tǒng)編程相比較而言,模板元編程它具有如下2個(gè)特點(diǎn): 1)在編譯期進(jìn)行編程是模板元編程最顯著的特點(diǎn) 通過在編譯期進(jìn)行編程,這樣的話很多在運(yùn)行期才能進(jìn)行的任務(wù)都可以在編譯期來完成,這樣做的好處就是能夠在性能或者接口簡(jiǎn)單化方面帶來很多好處。 2)以更少的開銷提供更多的功能 通過對(duì)編碼的“再生”,能夠提供比源代碼更多的功能。由于在編譯期承擔(dān)了運(yùn)行的一些執(zhí)行期的任務(wù),這就意味著運(yùn)行期的開銷就會(huì)減少很多。 模板元編程在軟件開發(fā)中的作用也是十分明顯的,在軟件開發(fā)中有著廣泛的應(yīng)用前景。 1.2 Ada語言類屬單元 代碼重用是多年來軟件開發(fā)一直強(qiáng)調(diào)的重點(diǎn),也是程序員們的一個(gè)希望。但在 C 這些語言中,由于語言的先天不足,代碼重用是有限的。Ada 里提供了類屬單元(Generic unit)的功能(和 C++的模板 template差不多),使得有可能創(chuàng)建更為通用的子程序或程序包。 類屬單元是一個(gè)程序單元,但它只是一個(gè)樣板,不能直接使用,只有通過取例才能使用。類屬單元體現(xiàn)了類型抽象的一種機(jī)制,這種機(jī)制支持了軟件的 可重用性概念。類屬單元是一種參數(shù)化的模板,它的主要用途是可以提高程序開發(fā)的生產(chǎn)效率,可以避免源代碼的重復(fù),可以提高程序的可維護(hù)性、可讀性以及有效 性。 一個(gè)類屬單元可以是程序包或子程序,允許執(zhí)行的運(yùn)算不依賴特定數(shù)據(jù)類型。
1.3 Ada95中對(duì)C++模板的綁定 C++是當(dāng)今公認(rèn)的最為流行的面向?qū)ο缶幊淘O(shè)計(jì)語言之一,擁有著大量的、成熟的可重用類庫資源。但Ada95標(biāo)準(zhǔn)中僅僅定義了針對(duì)C語言、 FORTRAN語言和COBOL語言的過程級(jí)綁定接口。所以,研究Ada95與C++這兩種面向?qū)ο笳Z言的在類層次上的綁定生成技術(shù),能夠?qū)χ赜肅++的 資源具有非常重要意義。 Ada95和C++都支持參數(shù)的多態(tài)機(jī)制。C++提供的模板以描述具有相似特性的一組為一個(gè)類,與之對(duì)應(yīng)的是在Ada95中的類屬單元程序 包。模板與類屬的主要功能是將相似或重復(fù)定義交給編譯器來完成。軟件設(shè)計(jì)人員僅在程序設(shè)計(jì)時(shí)定義單一的模板或類屬,以不同的類型參數(shù)來指定區(qū)別不同的實(shí) 例。在編譯階段,編譯器會(huì)通過用實(shí)例的類型實(shí)參替換模板或類屬定義中的形參,由模板或類屬來生成具體的實(shí)例。因此,模板和類屬本身其實(shí)只是一個(gè)類似于宏定 義的框架,并不具有任何可執(zhí)行的代碼,它的具體可執(zhí)行的實(shí)例代碼都是在編譯時(shí)產(chǎn)生的。因此,模板和類屬均屬于基于源代碼、而不是基于目標(biāo)代碼的重用。 Ada95-C++綁定,實(shí)質(zhì)上來說是對(duì)已有二進(jìn)制代碼的重用,通過Ada95編譯器提供給使用者的編用指令和C++二進(jìn)制代碼形式的內(nèi)部鏈 接來實(shí)現(xiàn)跨語言環(huán)境的調(diào)用。在重用C++資源時(shí),對(duì)模板的綁定不可避免。C++模板屬于一種源代碼重用機(jī)制,它在遇到類型實(shí)參進(jìn)行具體實(shí)例化之前,編譯器 對(duì)模板不產(chǎn)生實(shí)際可用的目標(biāo)代碼,然而Ada95中類屬綁定程序包的體部分需要將方法以及屬性的實(shí)現(xiàn)鏈接到C++的目標(biāo)代碼上。因此,在C++模板實(shí)例化 之前不會(huì)生成直接可用的類屬程序包。如果要生成直接可用的綁定程序包,必須使得模板實(shí)例化,然后再進(jìn)行編譯,產(chǎn)生一個(gè)含有可用的二進(jìn)制代碼的目標(biāo)代碼文 件。 2 結(jié)論 在軟件開發(fā)過程當(dāng)中,編程的可重用性應(yīng)用可以給開發(fā)者省去很多寫重復(fù)代碼的工作,減少代碼量,也可以給軟件的可讀性、易維護(hù)性帶來很大的改 善。針對(duì)Ada語言的可重用性技術(shù)方法做的學(xué)習(xí)和研究很有必要,對(duì)2種可重用性方法進(jìn)行的研究,包括類屬單元的應(yīng)用以及Ada95如何與C++模板的綁 定,并對(duì)如何通過綁定利用C++的可重用資源做了簡(jiǎn)要介紹,對(duì)相關(guān)開發(fā)人員提供理論技術(shù)支持。
|