摘 要: 和欣操作系統(tǒng)是基于CAR構件技術" title="構件技術">構件技術、支持構件化應用的嵌入式操作系統(tǒng)" title="嵌入式操作系統(tǒng)">嵌入式操作系統(tǒng)。分析了當前嵌入式應用開發(fā)" title="應用開發(fā)">應用開發(fā)模式所存在的問題,提出了基于CAR構件技術的腳本語言加CAR構件的XML-Glue編程范式。它一方面充分利用了現(xiàn)有系統(tǒng)的特點,另一方面采用腳本語言的強大功能使得開發(fā)更加簡單高效,并提供了對將來新興網絡業(yè)務" title="網絡業(yè)務">網絡業(yè)務應用的必要的支持,將成為和欣嵌入式操作系統(tǒng)中更適合應用開發(fā)的編程范式,進而推動人們對構件化編程思想的理解與應用。
關鍵詞: 和欣操作系統(tǒng) 元數(shù)據(jù)" title="元數(shù)據(jù)">元數(shù)據(jù) CAR技術 腳本語言
面向構件編程技術是從面向過程和面向對象編程技術發(fā)展而來,它使得軟件工廠的理想成為可能。而隨著互聯(lián)網上新興網絡業(yè)務的逐漸興起,對傳統(tǒng)的軟件運行方式提出了新的要求和挑戰(zhàn)。不論是采取面向過程、面向對象的開發(fā)應用,還是采取面向構件技術的開發(fā)應用,一旦它們被安裝、固化到操作系統(tǒng)中,除了修改源代碼、重新編譯和重新安裝以外將不能對其進行修改。在這樣的背景下,完全采用構件技術的應用開發(fā)將有如下幾個缺點:
(1)如果一個應用程序僅需要改變應用的表現(xiàn)層(UI),而不需要大量修改構件的功能,傳統(tǒng)開發(fā)模式所要經過的修改-編譯-安裝-運行的過程就顯得效率低下,開發(fā)周期長且不能隨需求靈活變化的弱點就會暴露出來。
(2)完全采用強類型語言(如C/C++等)實現(xiàn)功能構件并將這些構件組裝成應用程序,造成了構件之間強耦合的關系。雖然這些程序運行效率比較高,但是會使得開發(fā)與維護的難度加大。
(3)在未來網絡無所不在的情況下,運行在網絡中的嵌入式設備(如3G手機)將要與運營商所提供的服務經常打交道,服務并不是一定要固化到用戶的手機中,而是有可能來自網絡,現(xiàn)有技術并不能做到接收來自網絡的服務并在客戶機上自動運行,從而很難滿足新興網絡業(yè)務的需求。
為了實現(xiàn)構件間的松散耦合,提高開發(fā)維護的效率和適應需求變化的能力并支持新興網絡業(yè)務,有必要在應用的開發(fā)中引入新的開發(fā)模式??紤]到腳本語言的語法簡單、功能強大、易學易用的特點,本文基于CAR(Component Assembly Runtime)構件技術[1],提出了新的XML[2]+CAR+其他腳本語言(JavaScript等)的XML-Glue編程范式,并應用于和欣嵌入式操作系統(tǒng)中,實現(xiàn)了更為靈活的構件組裝機制,這為將來在和欣平臺上的應用開發(fā)提供了更加快速和靈活的編程范式。
1 CAR技術與和欣嵌入式操作系統(tǒng)
1.1 CAR技術
CAR是一個具有國內自主知識產權的先進的構件系統(tǒng)。它規(guī)定了一組構件間相互調用的標準,使得二進制構件能夠自描述,能夠在運行時動態(tài)鏈接,并且實現(xiàn)軟件的目標代碼級的重用。其主要目的是從操作系統(tǒng)層面上引入構件的概念,所有的服務均由構件來提供,從而為網絡編程和Web Services提供強大的支持。
1.2 和欣嵌入式操作系統(tǒng)
和欣嵌入式操作系統(tǒng)(Elastos)是面向SOA(Service-Oriented Architecture)設計的,是一個采用CAR技術并基于構件化軟件模型的系統(tǒng)。構件化軟件設計思想貫穿于整個系統(tǒng)的設計和實現(xiàn),系統(tǒng)實現(xiàn)本身就是采用構件模式。系統(tǒng)提供了構件自動尋址、自動加載的機制,用戶不必知道調用的構件是本地的還是來自于網上的,也就是說,構件運行環(huán)境對用戶透明。構件化系統(tǒng)的實現(xiàn)使得操作系統(tǒng)本身具有高度的靈活性和可擴展性。
2 XML-Glue編程范式
XML-Glue是和欣操作系統(tǒng)上的一個Rich Client應用的MVC(Model-View-Controller,模型-視圖-控制器)編程范式,其核心思想是使用XML和其他腳本語言描述應用,由CAR構件封裝應用的邏輯,然后由XMLGlue完成二者的組裝,形成一個完整的應用。這個思想在桌面應用中已經得到了較廣的應用,如Mozilla的XUL,Microsoft的XAML等。XML-Glue也為嵌入式操作系統(tǒng)提供了相應的技術支持,為嵌入式應用的開發(fā)注入了新的活力。
2.1 XML-Glue的特點
(1)采用符合W3C文法的XML標記和多種腳本語言描述應用。XML描述了整個應用的架構、構件及構件間的關系,而其他腳本語言則彌補了XML在描述邏輯上的缺陷,進一步增強了運行在客戶端的XML-Glue程序的表現(xiàn)力。
(2)設計了通用的構件組裝機制。這一機制從理論上使任何可被擴展的腳本語言可以實現(xiàn)對構件的操作,從而使得這些腳本語言具有粘合構件的能力。目前已經采用這一機制實現(xiàn)了XML和JavaScript對構件的粘合。
(3)XML-Glue支持MVC模型,如圖1所示。XML和其他腳本語言用來描述應用(View),CAR構件封裝應用的邏輯(Model),然后由XMLGlue完成二者的組裝(Controller)。除了作為Model的CAR構件是用強類型的C++語言編寫外,其余的View和Controller都可以用腳本編寫,簡化了開發(fā)的難度,提高了開發(fā)效率。

2.2 XML-Glue的實現(xiàn)
XML-Glue是基于CAR構件技術發(fā)展起來的。它對外提供了XML-Glue應用的運行環(huán)境以及多種腳本語言,使開發(fā)人員能更方便、更快捷地開發(fā)應用,對內則在腳本語言和CAR構件系統(tǒng)之間搭起了通信的橋梁,實現(xiàn)了以腳本方式完成構件組裝。
2.2.1 XML-Glue的架構
完整的XML-Glue架構如圖2所示。

(1)最外層是XML-Glue運行環(huán)境(Runtime),負責初始化和釋放XML-Glue應用所需資源。
(2)內部頂層是腳本語言及其配套設施。這一層相當于提供了對MVC中View的支持。
XML/JavaScript/Other Scripts提供了多種描述XML-Glue應用的形式,讓開發(fā)人員能夠靈活利用各種腳本語言。
Script Adapter是各個腳本語言中實現(xiàn)ISCIParameterNormalizer接口的構件(稱為SCIParamConvertor)的總稱。這些構件負責將其對應腳本代碼中弱類型方法的參數(shù)轉換為CAR中的強類型方法的參數(shù),而在構件方法返回的時候將返回值封裝成腳本可識別的數(shù)據(jù)類型。
Error Interpreter是每種腳本語言中負責翻譯調用構件方法的出錯信息的翻譯器的總稱,它將CAR中方法調用發(fā)生錯誤后返回的HRESULT值翻譯成文本,并以腳本語言特定的錯誤機制(如JavaScript中的異常)通知開發(fā)人員和使用人員。
(3)SCI(Script Callable Interface)是腳本語言與CAR構件系統(tǒng)通信的橋梁。這一層相當于提供了對MVC中Controller的支持,在下一節(jié)會詳細敘述。
(4)CAR構件系統(tǒng)。它是服務的提供者。這一層相當于提供了對MVC中Model的支持。
2.2.2 XML-Glue的構件組裝機制的實現(xiàn)
Model由CAR構件系統(tǒng)支持,View由腳本語言支持,作為Controller的構件組裝則是XML-Glue的核心工作。XML-Glue利用腳本語言的眾多優(yōu)點,實現(xiàn)了一種新的適合于嵌入式系統(tǒng)的構件組裝機制,使得應用開發(fā)方便快捷。XML-Glue中構件組裝機制的實現(xiàn)過程如圖3所示。

(1)腳本發(fā)起調用;
(2)SCI通過SCIModule或者SCIObjectFactory獲取相應的構件模塊并創(chuàng)建腳本所請求的構件實例,封裝成SCIObject;
(3)SCIObject使用Script Adapter進行腳本弱類型參數(shù)向構件強類型參數(shù)的轉換;
(4)SCIObject向實際的構件實例發(fā)起調用請求;
(5)構件實例的方法運行結束并返回;
(6)SCIObject調用Script Adapter將返回值進行相應的封裝,提供給腳本語言;
(7)腳本語言通過Script Adapter獲取返回值,完成調用。
實現(xiàn)這一機制的關鍵是解決腳本與構件間的交互問題。從圖3可以看出,SCI處于腳本語言與構件系統(tǒng)之間,是腳本語言與構件系統(tǒng)通信的橋梁。SCI最主要的功能是調用構件類實例的成員方法,所以其主要工作除了封裝構件類實例外,就是將腳本參數(shù)轉換為構件參數(shù)。這一轉換過程是通過CAR構件技術對元數(shù)據(jù)的支持來實現(xiàn)的。元數(shù)據(jù)中存放了描述所有類、接口、方法和參數(shù)的數(shù)據(jù)。通過對元數(shù)據(jù)的分析計算,SCI能夠找到所需接口方法的入口點以及參數(shù)信息,使得以腳本方式操作構件成為可能。參數(shù)轉換過程大致分為如下三個步驟:
(1)由腳本語言引擎分析腳本從而獲得原始的參數(shù)。
(2)將腳本語言對應的SCIParamConvertor作為參數(shù)傳遞給SCIObject的Invoke方法。在Invoke過程中,SCIObject根據(jù)內部構件實例方法的元數(shù)據(jù),調用SCIParamConvertor的Normalize方法向腳本語言提出轉換請求(如果在XML中只有字符型數(shù)據(jù)〈METHOD1 b="“100”/" a="“50”"〉,而構件中方法的聲明為HRESULT Method1(int a,int b);則需要將“50”,“100”轉換成int類型)。SCIParamConvertor就根據(jù)元數(shù)據(jù)中描述的參數(shù)類型要求將腳本參數(shù)轉換成CAR中的強類型參數(shù)。這個階段稱為參數(shù)正規(guī)化。
(3)將正規(guī)化后的參數(shù)轉換為機器棧參數(shù)壓入堆棧,調用內部構件的目標方法,完成方法調用。這一步依賴目標編譯器的棧機制,對整個系統(tǒng)概念無影響,這里不做討論。
SCI由三個模塊組成,其描述如表1所示。

本文提出了一種基于面向構件編程模型的XML-Glue編程范式,它將應用的表現(xiàn)層和邏輯層分離開,服務提供商只需提供功能獨立的正確構件,應用開發(fā)人員就可以根據(jù)需求的變化快速更改構件之間的關聯(lián)關系,從而降低了服務提供者和使用者的耦合程度,并且提供了對將來新興網絡業(yè)務應用的必要的支持,將成為和欣嵌入式操作系統(tǒng)中更適合應用開發(fā)的編程范式。從目前的實際運行情況來看,XML-Glue基本上能夠支持各種應用的開發(fā),下一階段的主要任務是提高XML-Glue對應用的支撐能力,使其能夠支持更復雜的應用開發(fā),并優(yōu)化XML-Glue的性能。
參考文獻
1 科泰世紀.和欣1.1資料大全[EB/OL].http://www.koretide.com.cn/download/download.php?id=2
2 Didier Martin著,李 譯.XML高級編程[M].北京:機械工業(yè)出版社,2001
3 Munindar P Singh,Michael N Huhns.Service-Oriented Com-puting:Semantics,Processes,Agents[M].Wiley,2005
4 MVC[EB/OL].http://ootips.org/mvc-pattern.html
5 Andre Deienno Pansani.XUL and the building processe of a UI[EB/OL].http://luxor-xul.sourceforge.net/download/qatar.pdf
6 Brent Rector.Controls and XAML[EB/OL].http://msdn.mi-crosoft.com/library/default.asp?url=/library/en-us/dnintlong/html/longhornch03.asp
