摘要:為了滿(mǎn)足重用性和自動(dòng)化的需要,從支持用戶(hù)界面自動(dòng)生成的FMP模型出發(fā),提出了用XML文檔保存所有模型信息的方法以及相應(yīng)的轉(zhuǎn)換算法;并在此基礎(chǔ)上詳細(xì)介紹了界面生成引擎的設(shè)計(jì)以及相應(yīng)的代碼生成算法。
關(guān)鍵詞:FMP;XML;界面生成引擎;UseCase;界面模板
中圖法分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1001-3695(2006)09-0075-03
構(gòu)建用戶(hù)界面是費(fèi)時(shí)和昂貴的。據(jù)統(tǒng)計(jì),在圖形用戶(hù)界面系統(tǒng)中,差不多源代碼和開(kāi)發(fā)時(shí)間的50%都被用來(lái)創(chuàng)建用戶(hù)界面[1],因此開(kāi)發(fā)支持自動(dòng)生成用戶(hù)界面的開(kāi)發(fā)工具就顯得尤為重要了。現(xiàn)在國(guó)內(nèi)外已有一些界面工具,盡管得到了一些用戶(hù)的認(rèn)可和好評(píng),但未得到廣泛的應(yīng)用,如基于模型的用戶(hù)界面開(kāi)發(fā)環(huán)境(MB_UIDEs)中的Mastermind,Telleach,Trident。這些基于模型的方法,沒(méi)有考慮對(duì)象與對(duì)象間的關(guān)系對(duì)界面展示形式的影響,使其處理復(fù)雜界面的能力受到了影響。另外,這些環(huán)境開(kāi)發(fā)出來(lái)的界面,專(zhuān)用性太強(qiáng),不利于重用。
本文提出的這種自動(dòng)生成界面的方法是在原來(lái)基于FMP模型的支持自動(dòng)生成VisualBasic代碼的開(kāi)發(fā)環(huán)境的基礎(chǔ)上改進(jìn)而得到的。這個(gè)生成VB代碼的環(huán)境是在UML基礎(chǔ)上提出的模型(FMP模型),其符號(hào)體系也就是對(duì)UML符號(hào)體系的擴(kuò)充,它很好地解決了交互能力問(wèn)題[2]。通過(guò)引入XML,將原來(lái)的FMP模型的信息和生成界面的所有信息進(jìn)行歸檔存儲(chǔ),然后由界面生成引擎解析XML文檔并生成目標(biāo)代碼,從而能很好地實(shí)現(xiàn)界面描述信息的重用,在不同平臺(tái)下生成不同的目標(biāo)語(yǔ)言。其關(guān)系如圖1所示。
1FMP模型
FMP界面模型中,F(xiàn)(Function)是功能模型,M(Model)是界面內(nèi)在模型(包括對(duì)象模型和交互模型),P(Presentation)是基于界面模板的表示模型。
圖1中的功能模型主要使用擴(kuò)展用例圖來(lái)進(jìn)行表達(dá)描述,并通過(guò)分析需求來(lái)確定界面功能、界面框架、界面之間的關(guān)系以及界面對(duì)內(nèi)在模型(對(duì)象模型和交互模型)的需求。對(duì)象模型是界面的數(shù)據(jù)模型,主要使用對(duì)象關(guān)系描述應(yīng)用領(lǐng)域的內(nèi)部數(shù)據(jù),它從靜態(tài)的角度描述交互系統(tǒng),為功能模型和交互模型提供基礎(chǔ)支持。一般說(shuō)來(lái),對(duì)象成員的基本數(shù)據(jù)類(lèi)型有數(shù)值、字符串、枚舉,而對(duì)象模型全面擴(kuò)展了對(duì)象的數(shù)據(jù)成員描述特性,以滿(mǎn)足界面描述的需要。交互模型在對(duì)象模型和功能模型的基礎(chǔ)上對(duì)界面構(gòu)成和構(gòu)成元素之間的關(guān)系予以描述,從動(dòng)態(tài)的方面來(lái)描述交互系統(tǒng)。表示模型的功能是定義界面的可視外觀,描述可視成分的組成和成分彼此之間的關(guān)系,主要處理界面元素的可視形式顯示和界面布局問(wèn)題。
2界面信息的XML描述
XML的最大特點(diǎn)是可擴(kuò)展性。用戶(hù)可以隨意定義適合自
己的數(shù)據(jù)屬性和標(biāo)簽,描述那些具有邏輯結(jié)構(gòu)和豐富語(yǔ)義的數(shù)據(jù)。XML所描述的數(shù)據(jù)的結(jié)構(gòu)和語(yǔ)法可以由一個(gè)DTD來(lái)定義。
2.1用XML描述UseCase
在FMP模型中,用例圖中的角色與UML中的角色定義不同,該模型中的角色是指與系統(tǒng)交互的人,其通過(guò)界面發(fā)出操作請(qǐng)求,提供輸入信息,接收系統(tǒng)的服務(wù)或從系統(tǒng)獲得信息。復(fù)合用例與用例不同,除了描述系統(tǒng)功能之外,還描述了這些功能所操縱的數(shù)據(jù)信息,這些數(shù)據(jù)在對(duì)象模型中以對(duì)象的形式存在,因此說(shuō)功能模型確定了對(duì)對(duì)象模型的需求。復(fù)合用例的分層細(xì)化以及對(duì)其所操縱的數(shù)據(jù)進(jìn)行加工的描述,不僅表達(dá)了界面功能,而且還確定了數(shù)據(jù)的界面顯示要求。我們根據(jù)一般UseCase的特點(diǎn)并結(jié)合FMP模型,給出描述一個(gè)UseCase所需的信息:
(1)UseCase的名稱(chēng)或編號(hào)。用來(lái)標(biāo)志這個(gè)UseCase。
(2)UseCase的說(shuō)明。是對(duì)該UseCase所捕捉的系統(tǒng)需求的簡(jiǎn)單描述。
(3)角色。描述這個(gè)UseCase所涉及的角色。在此為簡(jiǎn)化起見(jiàn),我們把角色也當(dāng)成復(fù)合用例看待。
(4)復(fù)合用例。是FMP模型中用例的重要組成部分,描述一個(gè)復(fù)合用例需要唯一確定的名字,簡(jiǎn)單描述該復(fù)合用例與其他用例的關(guān)系。
(5)備注及其他說(shuō)明。
(6)界面。復(fù)合用例導(dǎo)航到的界面。
根據(jù)以上的分析,我們可以得出描述UseCase的XML文件的DTD如下:
在FMP模型中,復(fù)合用例以及它們之間的關(guān)系是通過(guò)樹(shù)型結(jié)構(gòu)來(lái)存儲(chǔ)的。因此采用深度優(yōu)先遍歷的方法得到XML文檔,其算法描述如下:
Node*child;//表示與復(fù)合用例圖元發(fā)生關(guān)系的孩子節(jié)點(diǎn)
Node*next;//表示復(fù)合用例圖元的兄弟節(jié)點(diǎn)
Intrelationtype;//表示復(fù)合用例圖元與其父節(jié)點(diǎn)的關(guān)系類(lèi)型
VoidgetXMLFromUseCase(Node*p)
{if(p>relationtype==調(diào)用關(guān)系或擴(kuò)展關(guān)系)
{打印
打印復(fù)合用例圖元名字及其他屬性;
打印關(guān)系的屬性;
if(p>child>relationtype==導(dǎo)航關(guān)系)
打印p指向的孩子復(fù)合用例圖元(界面)的屬性;
打印;
getXMLFromUseCase(p>child);
}
While(p>next!==NULL)
{getXMLFromUseCase(p>next);
p=p-next;
}
}
2.2用XML描述界面模板
界面模板(UserInterfaceTemplate,UIT)是對(duì)用戶(hù)界面的宏觀構(gòu)成、布局以及風(fēng)格等總體屬性的描述。其元素由抽象表示單元(AbstractPresentationUnit,APU)構(gòu)成。抽象表示單元是實(shí)際界面元素的抽象,是界面模板UIT的組成部分,它可分為原子APU和復(fù)合APU。原子APU(用apu來(lái)表示)是組成界面模板UIT的最小單元,其屬性包括名稱(chēng)、IO類(lèi)型、內(nèi)容類(lèi)型、位置等;復(fù)合APU由原子APU組合而成。界面模板是交互模型的外在描述,是在交互模型基礎(chǔ)上對(duì)界面外觀形式的描述,主要處理界面宏觀布局和表示控制。界面被分割成不同的框架區(qū)域,框架區(qū)域之間有水平相鄰和垂直相鄰兩種關(guān)系。因此,描述界面模板所需要的信息有:
(1)界面的名稱(chēng)。它唯一地確定一個(gè)界面模板和自動(dòng)生成后的頁(yè)面。
(2)界面模板的總體屬性。是對(duì)表示模型的宏觀布局的描述,相應(yīng)的參數(shù)信息主要有基本屬性、位置、邊距、外觀、布局控制等。
(3)原子apu的組成描述。它是組成界面模板UIT的最小單元,其屬性包括名稱(chēng)、I/O(輸入/輸出)類(lèi)型、風(fēng)格、內(nèi)容類(lèi)型、位置、大小等。
(4)界面模板的簡(jiǎn)單描述。
下面的DTD文檔描了述界面模板的XML文件結(jié)構(gòu),而生成界面模板的XML文檔的算法參考文獻(xiàn)[3]。
2.3XML文檔的復(fù)用
在用XML描述界面信息的基礎(chǔ)上,用XML的查詢(xún)技術(shù)如Xquery,XPath等進(jìn)行模型信息的查詢(xún),可將以前的系統(tǒng)開(kāi)發(fā)所獲得的界面信息用XML文件的形式存儲(chǔ)起來(lái),并組織成一個(gè)界面信息庫(kù)。對(duì)于界面信息的查詢(xún),可以分別從名稱(chēng)、描述信息、XML文檔中定義的元素和屬性等關(guān)鍵字進(jìn)行查詢(xún),也可以綜合上述各個(gè)方面進(jìn)行復(fù)合查詢(xún)。將查詢(xún)到的界面描述信息,經(jīng)過(guò)簡(jiǎn)單修改和擴(kuò)展就可以加入到新工程的設(shè)計(jì)中,能夠大大提高開(kāi)發(fā)效率。復(fù)用關(guān)系如圖2所示。
3界面自動(dòng)生成技術(shù)
3.1界面生成引擎
從圖1可以看出,在將FMP模型中的功能模型、交互模型、對(duì)象模型的所有信息都表達(dá)成XML文檔以后,要生成一個(gè)界面的目標(biāo)代碼首先需要啟動(dòng)界面生成引擎對(duì)XML文檔進(jìn)行解析。界面生成引擎負(fù)責(zé)讀取界面描述的XML文檔,根據(jù)界面的描述信息對(duì)界面中的控件進(jìn)行布局,實(shí)現(xiàn)從XML描述的FMP模型擴(kuò)展對(duì)象到具體平臺(tái)對(duì)象的映射機(jī)制。由于XML文檔信息是與平臺(tái)無(wú)關(guān)的,若要生成與具體平臺(tái)相關(guān)的界面只要調(diào)用相應(yīng)的界面生成引擎對(duì)象即可。界面生成引擎還提供了XML文檔的數(shù)據(jù)驗(yàn)證功能,以驗(yàn)證界面的描述文檔的正確性——文檔的格式規(guī)范性和有效性。
3.2界面生成引擎的實(shí)現(xiàn)
界面生成引擎的設(shè)計(jì)是生成目標(biāo)代碼的關(guān)鍵一步。其設(shè)計(jì)與具體的平臺(tái)相關(guān),也與生成的目標(biāo)代碼相關(guān)。以生成ASP.NET網(wǎng)頁(yè)為例,通過(guò)以下步驟實(shí)現(xiàn)一個(gè)界面生成引擎。
3.2.1讀取XML文檔并驗(yàn)證
讀取XML文檔可采用兩種應(yīng)用程序接口,即DOM和SAX接口。由于要從FMP模型得到的XML文檔生成目標(biāo)代碼,需要對(duì)文檔進(jìn)行復(fù)雜的搜索和過(guò)濾,所以我們選擇使用DOM接口。DOM接口具有可隨機(jī)訪問(wèn)、復(fù)雜搜索、用XPATH進(jìn)行方便過(guò)濾的優(yōu)點(diǎn)。將XML文檔讀入內(nèi)存建立DOM樹(shù)時(shí),可以用DTD,XDR或XSD驗(yàn)證文檔的正確性。若采用.NET框架中的XML讀取器類(lèi)(XmlTextReader或XmlValidatingReader),能夠方便地讀取XML文檔并完成其驗(yàn)證功能。
3.2.2確定映射轉(zhuǎn)換關(guān)系
就總體上而言,映射轉(zhuǎn)換關(guān)系主要包括兩個(gè)方面:①XML文檔包含了對(duì)象、交互、展示等不同的模型信息,因此必須要確定模型之間的映射關(guān)系,如功能模型中的界面輪廓線與交互模型是如何通過(guò)用戶(hù)界面相對(duì)應(yīng)的;②模型中具體的組成元素與目標(biāo)語(yǔ)言之間的映射關(guān)系。體系結(jié)構(gòu)模型中包括部件以及部件之間的關(guān)聯(lián)、部件的全局變量、共用函數(shù);對(duì)象模型包括類(lèi)、對(duì)象、視圖等元素以及它們之間的范化、關(guān)聯(lián)等關(guān)系;功能模型中用復(fù)合用例表示界面需要完成的功能及功能之間的關(guān)系,包括角色、用例和關(guān)系。交互模型反映界面對(duì)象和其靜態(tài)關(guān)系,并表達(dá)它們之間的動(dòng)態(tài)交互行為,包括角色、用例、對(duì)象、匯集等及之間的方法調(diào)用、界面導(dǎo)航等關(guān)系。很顯然,第②方面的映射是關(guān)鍵核心的部分(表1)。
表1映射關(guān)系
3.2.3目標(biāo)代碼的生成
從XML文檔生成ASP.NET目標(biāo)代碼,主要有兩類(lèi)文件的生成,即工程信息文件的生成和ASP.NET頁(yè)面的生成,而后者又分為用例圖的代碼生成和界面模板描述的Web頁(yè)的代碼生成。因?yàn)楣こ绦畔⑴c具體的工程有關(guān),故只給出用例圖的代碼生成算法和Web頁(yè)的生成算法。
算法一用例圖的代碼生成(生成樹(shù)型菜單)
在內(nèi)存中的XML文檔也是一棵樹(shù),每個(gè)復(fù)合用例作為DOM樹(shù)根節(jié)點(diǎn)的子節(jié)點(diǎn),復(fù)合用例之間通過(guò)關(guān)系而聯(lián)系起來(lái)。
因此只要順序遍歷DOM樹(shù)來(lái)構(gòu)造樹(shù)型菜單即可。
VoidCreateTreeNode(Tree*t)
{for(XML文檔中每一個(gè)節(jié)點(diǎn))
if(節(jié)點(diǎn)i的Realation>RelaType==調(diào)用關(guān)系)
創(chuàng)建一個(gè)樹(shù)節(jié)點(diǎn)賦值后,插入到樹(shù)t;
elseif(節(jié)點(diǎn)i的Realation>RelaType==擴(kuò)展關(guān)系或?qū)Ш疥P(guān)系)
{從樹(shù)t中查找與Realation>RelaFrom同名的節(jié)點(diǎn)p;
創(chuàng)建節(jié)點(diǎn)賦值后,插入樹(shù)中作為節(jié)點(diǎn)p的子節(jié)點(diǎn);
}
}
算法二Web頁(yè)的代碼生成
VoidCreateInterface(InterfaceTemplateti)
{得到界面模版的交互模型p;
for(界面模版ti中的每一個(gè)區(qū)域節(jié)點(diǎn))
for(區(qū)域節(jié)點(diǎn)中的每一個(gè)對(duì)象ob)
{確定對(duì)象ob的一些屬性(位置、大小、顏色等)
搜索交互模型p,確定方法以及對(duì)ob的其他屬性;
}
}
4結(jié)論
XML是結(jié)構(gòu)化數(shù)據(jù)的標(biāo)準(zhǔn)機(jī)制,它一般被認(rèn)為是解決應(yīng)用程序之間數(shù)據(jù)交換問(wèn)題的方案。本文所提出的用XML描述FMP模型的所有信息與相應(yīng)的算法,可很好地解決模型信息歸檔存儲(chǔ)問(wèn)題,能為以后的重用和對(duì)界面描述文檔的擴(kuò)充打下良好的基礎(chǔ);也能為在不同平臺(tái)下開(kāi)發(fā)并生成不同的目標(biāo)代碼提供一種開(kāi)發(fā)方法?,F(xiàn)在已經(jīng)實(shí)現(xiàn)了生成ASP.NET的一些基本功能,下一步的研究工作將是繼續(xù)完善功能,將樣式表和組件技術(shù)、模板庫(kù)加入到界面生成引擎中來(lái),以使界面展示形式更為豐富。
參考文獻(xiàn):
[1]MyersBA,MBRosson.SurveyonUserInterfaceProgramming[C].ProceedingsoftheConferenceonHumanFactorsinComputingSystems,1992.195202.
[2]徐龍杰,萬(wàn)建成.基于模型的用戶(hù)界面代碼自動(dòng)生成[J].計(jì)算機(jī)工程與應(yīng)用,2004,40(12):112115.
[3]吳桂陽(yáng),萬(wàn)建成,等.基于XML的界面模板技術(shù)[J].計(jì)算機(jī)應(yīng)用研究,2004,21(10):5455.
[5]MarkBirbect,etal.XML高級(jí)編程(第2版)[M].裴劍鋒,等.北京:機(jī)械工業(yè)出版社,2002.
作者簡(jiǎn)介:
馮文堂(1980),男,山東濟(jì)南人,碩士研究生,主要研究方向?yàn)檐浖こ蹋缓鷱?qiáng)(1980),男,山東鄒城人,主要研究方向?yàn)檐浖こ蹋蝗f(wàn)建成(1949),教授,博導(dǎo),主要研究方向?yàn)檐浖こ?、程序設(shè)計(jì)語(yǔ)言、人工智能、自然語(yǔ)言和中文信息處理。