抽象控件模型編程裝置和方法
【專利摘要】本發(fā)明提供了一種抽象控件模型編程裝置,包括:抽象封裝單元,用于利用抽象控件模型對原生控件的抽象封裝,進(jìn)行抽象控件編程;數(shù)據(jù)通訊單元,用于抽象控件編程結(jié)束后,進(jìn)行抽象控件與原生控件之間的數(shù)據(jù)通訊。本發(fā)明還提供了一種抽象控件模型編程方法。通過本發(fā)明的技術(shù)方案,可以在現(xiàn)有的模型編程方式基礎(chǔ)上,充分利用常規(guī)對象類型完成抽象對象類型的模型編程,建立多對象類型參與的面向抽象控件模型編程模的通用、統(tǒng)一編程思路。
【專利說明】抽象控件模型編程裝置和方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)【技術(shù)領(lǐng)域】,具體地,涉及一種抽象控件模型編程裝置和一種抽象控件模型編程方法。
[0002]
【背景技術(shù)】
[0003]移動開發(fā)領(lǐng)域中存在著不同的操作系統(tǒng)。軟件開發(fā)人員不得不需要在不同的移動操作系統(tǒng)和移動設(shè)備之間為了兼容而重復(fù)進(jìn)行開發(fā)。在傳統(tǒng)的開發(fā)中,針對不同的運(yùn)行平臺,要使用不同的語言和開發(fā)工具來開發(fā)出不同的應(yīng)用。例如:開發(fā)一個能運(yùn)行在103之上的移動應(yīng)用,通常就需要開發(fā)人員使用(?知語言來進(jìn)行編碼開發(fā),相應(yīng)的需要在八!1(601(1操作系統(tǒng)之上的移動應(yīng)用就需要開發(fā)人員使用拓妨語言按照如^01(1開發(fā)方式進(jìn)行開發(fā)。運(yùn)行平臺的差異化越大,開發(fā)一款運(yùn)行于多個平臺之上的應(yīng)用軟件的成本就越高。
[0004]在移動開發(fā)中,對控件的編程是最常見、最基本的編程方式。然而每一個移動平臺給開發(fā)者提供了各式各樣的控件,開發(fā)者為了能開發(fā)出運(yùn)行在不同移動平臺上的仙?,就需要學(xué)習(xí)使用各種控件體系,并且各個平臺控件仙I也不盡相同。如果能有一套標(biāo)準(zhǔn)的控件模型,通過這一套控件模型即可實現(xiàn)跨平臺編程的夙愿將是一件極其有意義的事情。
[0005]自互聯(lián)網(wǎng)誕生以來,以為代表的“3技術(shù)經(jīng)過多年的錘煉與洗禮似乎已經(jīng)變得深入人心,近幾年肌115的崛起,大有一統(tǒng)天下之勢。使用111115開發(fā)出來的應(yīng)用可以在108^811(11-01(1^13180^1361-1-7等各大手機(jī)平臺上運(yùn)行,具有跨平臺的優(yōu)勢。然而肌115在諸如性能、流暢、用戶體驗等方面也有不盡人意的地方,與原生應(yīng)用有著天然的差距。
[0006]因此,需要一種新的模型編程技術(shù),可以在現(xiàn)有的模型編程方式基礎(chǔ)上,充分利用常規(guī)對象類型完成抽象對象類型的模型編程,建立多對象類型參與的面向抽象控件模型編程模的通用、統(tǒng)一編程思路。
[0007]
【發(fā)明內(nèi)容】
[0008]本發(fā)明正是基于上述問題,提出了一種新的模型編程技術(shù),可以在現(xiàn)有的模型編程方式基礎(chǔ)上,充分利用常規(guī)對象類型完成抽象對象類型的模型編程,建立多對象類型參與的面向抽象控件模型編程模的通用、統(tǒng)一編程思路。
[0009]有鑒于此,本發(fā)明提出了一種抽象控件模型編程裝置,包括:抽象封裝單元,用于利用抽象控件模型對原生控件的抽象封裝,進(jìn)行抽象控件編程;數(shù)據(jù)通訊單元,用于抽象控件編程結(jié)束后,進(jìn)行抽象控件與原生控件之間的數(shù)據(jù)通訊。在該技術(shù)方案中,可以通過抽象控制編程,方便地訪問操作原生控件,屏蔽不同移動平臺的差異化,實現(xiàn)跨平臺開發(fā)。
[0010]在上述技術(shù)方案中,優(yōu)選地,所述抽象封裝單元,具體包括:文檔對象模型(001)抽象控件與編程方式的演化模塊,用于將一個原生頁面看作是一個肌祖^
1^1^-1113匕叩皿陰,是一種制作萬維網(wǎng)頁面的標(biāo)準(zhǔn)語言)頁面,將原生頁面內(nèi)每一個原生控件抽象成一個元素(£1606111:)對象;在](^8801-11)1:是屬于網(wǎng)絡(luò)的腳本語言)中通過文檔((100111116111:)對象(每個載入瀏覽器的文檔都會成為00(3111116111:對象)使用001對象的方式實現(xiàn)對!1111中每一個控件的訪問與操作;抽象控件模型生成模塊,用于將原生控件用肌見來定義,并使用了語言中的了30~013^601:
^0^1011,是一種輕量級的數(shù)據(jù)交換格式)對象來描述這個肌祖^對應(yīng)的001對象;抽象控件模型編程及應(yīng)用程序編程接口(八卯11(^1:1011 ?1~0取'咖1111118,八?I )模塊,用于借鑒肌見001的編程方式,提供對象和同名八?I,完成抽象控件編程;抽象控件編程完成后,基于肌見001編程,使用八?I對抽象控件進(jìn)行讀取、訪問、操作。在該技術(shù)方案中,可以通過該控件模型提供的!II見001八?I及編程方式,通過該抽象控件模型提供的八?I來屏蔽不同移動平臺帶來的開發(fā)的差異性,輕松實現(xiàn)跨平臺編程,降低開發(fā)人員的學(xué)習(xí)成本,從而降低跨平臺移動開發(fā)門檻。
[0011]在上述技術(shù)方案中,優(yōu)選地,所述抽象控件模型生成模塊描述001對象的了30~
013^601: ^01^1:1011,是一種輕量級的數(shù)據(jù)交換格式),包含控件的唯一標(biāo)識1(1、對應(yīng)的肌祖^的丨叫標(biāo)簽、使用肌祖^元素的基本屬性來表示原生控件的屬性的』801!對象、一個抽象控件對象在控件樹中的狀態(tài)描述符和容器控件通過也11辦611來描述其子控件信息的數(shù)組;和/或,所述抽象控件模型編程及仙I模塊提供的丨如⑶腕社對象,是一個
1)00111116111:類型的單例對象,通過它能夠訪問到任何一個抽象控件。
[0012]在上述技術(shù)方案中,優(yōu)選地,所述抽象封裝單元進(jìn)行抽象控件編程的操作之前,還包括:將肌祖^5和原生控件的瓜信息結(jié)合,提煉得到基于拓討的抽象控件模型。在該技術(shù)方案中,開發(fā)人員只需要使用了狀必⑶丨討語言通過這套抽象控件模型即可控制不同移動平臺上的原生控件,既能發(fā)揮原生仙?【應(yīng)用程序(外語縮寫:八卯、外語全稱:八卯在用戶界面(1)861方面的天然優(yōu)勢,又可以使用語言來解決跨平臺編程的問題。
[0013]在上述技術(shù)方案中,優(yōu)選地,所述數(shù)據(jù)通訊單元,具體包括:原生調(diào)用模塊,用于當(dāng)抽象控件編程結(jié)束后,通過了3 (是屬于網(wǎng)絡(luò)的腳本語言)端執(zhí)行一個方法后發(fā)起一個原生調(diào)用,將抽象控件對應(yīng)的了30~數(shù)據(jù)提供給原生端主線程;原生控件的操作與更新模塊,用于原生端主線程接受到這份了30~數(shù)據(jù)后,根據(jù)幾數(shù)據(jù)中的每一個抽象控件的描述信息,執(zhí)行更新原生瓜控件的代碼,從而完成對原生控件的操作與更新。在該技術(shù)方案中,采用肌祖^技術(shù)中的拓語言和文檔對象模型(001)的特點(diǎn),提出一套基于001編程風(fēng)格的抽象控件模型。開發(fā)人員只需使用了狀必⑶丨!)!:針對這套抽象控件模型一次編碼,就能支持在不同運(yùn)行平臺之上運(yùn)行。
[0014]根據(jù)本發(fā)明的又一個方面,還提出了一種抽象控件模型編程方法,包括:步驟202:利用抽象控件模型對原生控件的抽象封裝,進(jìn)行抽象控件編程;步驟204:抽象控件編程結(jié)束后,進(jìn)行抽象控件與原生控件之間的數(shù)據(jù)通訊。在該技術(shù)方案中,可以通過抽象控制編程,方便地訪問操作原生控件,屏蔽不同移動平臺的差異化,實現(xiàn)跨平臺開發(fā)。
[0015]在上述技術(shù)方案中,優(yōu)選地,所述步驟202,具體包括:步驟302:將一個原生頁面看作是一個頁面,將原生頁面內(nèi)每一個原生控件抽象成一個對象;在1^8801-11)1:中通過(10(3111116111:對象使用001對象的方式實現(xiàn)對中每一個控件的訪問與操作;步驟304:將原生控件用肌見來定義,并使用拓的語言中的了30^對象來描述這個肌見對應(yīng)的001對象;步驟306:借鑒肌見001的編程方式,提供對象和同名八?I,完成抽象控件編程;抽象控件編程完成后,基于肌見001編程,使用八?I對抽象控件進(jìn)行讀取、訪問、操作。在該技術(shù)方案中,可以通過該控件模型提供的肌見001八?I及編程方式,通過該抽象控件模型提供的八?I來屏蔽不同移動平臺帶來的開發(fā)的差異性,輕松實現(xiàn)跨平臺編程,降低開發(fā)人員的學(xué)習(xí)成本,從而降低跨平臺移動開發(fā)門檻。
[0016]在上述技術(shù)方案中,優(yōu)選地,所述步驟304描述001對象的了30~,包含控件的唯一標(biāo)識1(1、對應(yīng)的!1111^的標(biāo)簽、使用肌祖^元素的基本屬性來表示原生控件的屬性的』8011對象、一個抽象控件對象在控件樹中的狀態(tài)描述符和容器控件通過來描述其子控件信息的數(shù)組;和/或,所述步驟306提供的$(100111116111:對象,是一個00(3111116111:類型的單例對象,通過它能夠訪問到任何一個抽象控件。
[0017]在上述技術(shù)方案中,優(yōu)選地,所述步驟102進(jìn)行抽象控件編程的操作之前,還包括:將肌祖^5和原生控件的VI信息結(jié)合,提煉得到基于拓討的抽象控件模型。在該技術(shù)方案中,開發(fā)人員只需要使用了狀必⑶丨的語言通過這套抽象控件模型即可控制不同移動平臺上的原生控件,既能發(fā)揮原生仙?在口I方面的天然優(yōu)勢,又可以使用了狀必⑶1討語言來解決跨平臺編程的問題。
[0018]在上述技術(shù)方案中,優(yōu)選地,所述步驟104,具體包括:步驟402:當(dāng)抽象控件編程結(jié)束后,通過了3端執(zhí)行一個方法后發(fā)起一個原生調(diào)用,將抽象控件對應(yīng)的幾數(shù)據(jù)提供給原生端主線程;步驟404:原生端主線程接受到這份幾數(shù)據(jù)后,根據(jù)了30^數(shù)據(jù)中的每一個抽象控件的描述信息,執(zhí)行更新原生VI控件的代碼,從而完成對原生控件的操作與更新。在該技術(shù)方案中,采用肌祖^技術(shù)中的拓語言和文檔對象模型(001)的特點(diǎn),提出一套基于001編程風(fēng)格的抽象控件模型。開發(fā)人員只需使用了狀必⑶丨討針對這套抽象控件模型一次編碼,就能支持在不同運(yùn)行平臺之上運(yùn)行。
[0019]通過以上技術(shù)方案,可以在現(xiàn)有的模型編程方式基礎(chǔ)上,充分利用常規(guī)對象類型完成抽象對象類型的模型編程,建立多對象類型參與的面向抽象控件模型編程模的通用、統(tǒng)一編程思路。
[0020]
【專利附圖】
【附圖說明】
[0021]圖1示出了根據(jù)本發(fā)明的實施例的抽象控件模型編程裝置的框圖;
圖2示出了根據(jù)本發(fā)明的實施例的抽象控件模型編程方法的流程圖;
圖3示出了根據(jù)本發(fā)明的實施例的抽象封裝單元的流程圖;
圖4示出了根據(jù)本發(fā)明的實施例的數(shù)據(jù)通訊單元的流程圖;
圖5示出了根據(jù)本發(fā)明的實施例的001抽象控件與編程方式的演化的原理圖。
[0022]圖6示出了根據(jù)本發(fā)明的實施例的001抽象控件與編程方式的演化的流程圖。
[0023]圖7示出了根據(jù)本發(fā)明的實施例的抽象控件模型的抽象過程的流程圖。
[0024]圖8示出了根據(jù)本發(fā)明的實施例的獲取一個抽象控件指定屬性的流程圖。
[0025]圖9示出了根據(jù)本發(fā)明的實施例的設(shè)置一個抽象控件指定屬性的流程圖。
[0026]圖10和圖11分別示出了根據(jù)本發(fā)明的實施例的2161116111:對象有861:八1:1:1*113111:6和此6兩個常用的方法的流程圖; 圖12示出了根據(jù)本發(fā)明的實施例的抽象控件模型與原生控件之間的數(shù)據(jù)通訊的流程圖。
[0027]
【具體實施方式】
[0028]為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和【具體實施方式】對本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。需要說明的是,在不沖突的情況下,本申請的實施例及實施例中的特征可以相互組合。
[0029]在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來實施,因此,本發(fā)明的保護(hù)范圍并不受下面公開的具體實施例的限制。
[0030]圖1示出了根據(jù)本發(fā)明的實施例的抽象控件模型編程裝置的框圖。
[0031]如圖1所示,根據(jù)本發(fā)明的實施例的抽象控件模型編程裝置100,包括:抽象封裝單元102,用于利用抽象控件模型對原生控件的抽象封裝,進(jìn)行抽象控件編程;數(shù)據(jù)通訊單元104,用于抽象控件編程結(jié)束后,進(jìn)行抽象控件與原生控件之間的數(shù)據(jù)通訊。在該技術(shù)方案中,可以通過抽象控制編程,方便地訪問操作原生控件,屏蔽不同移動平臺的差異化,實現(xiàn)跨平臺開發(fā)。
[0032]在上述技術(shù)方案中,優(yōu)選地,抽象封裝單元102,具體包括:001抽象控件與編程方式的演化模塊1022,用于將一個原生頁面看作是一個頁面,將原生頁面內(nèi)每一個原生控件抽象成一個£161116111:對象;在中通過(100111116111:對象使用001對象的方式實現(xiàn)對!1111中每一個控件的訪問與操作;抽象控件模型生成模塊1024,用于將原生控件用
來定義,并使用了狀狀⑶丨的語言中的了30^對象來描述這個肌祖^對應(yīng)的001對象;抽象控件模型編程及仙I模塊1026,用于借鑒肌見001的編程方式,提供對象和同名八?I,完成抽象控件編程;抽象控件編程完成后,基于肌見001編程,使用八?I對抽象控件進(jìn)行讀取、訪問、操作。在該技術(shù)方案中,可以通過該控件模型提供的肌見001八?I及編程方式,通過該抽象控件模型提供的八?I來屏蔽不同移動平臺帶來的開發(fā)的差異性,輕松實現(xiàn)跨平臺編程,降低開發(fā)人員的學(xué)習(xí)成本,從而降低跨平臺移動開發(fā)門檻。
[0033]在上述技術(shù)方案中,優(yōu)選地,抽象控件模型生成模塊1024描述001對象的了30化包含控件的唯一標(biāo)識1(1、對應(yīng)的的標(biāo)簽、使用元素的基本屬性來表示原生控件的屬性的扣011對象、一個抽象控件對象在控件樹中的狀態(tài)描述符和容器控件通過01111(11-611來描述其子控件信息的數(shù)組;和/或,抽象控件模型編程及八?I模塊1026提供的$(100111116111:對象,是一個00(3111116111:類型的單例對象,通過它能夠訪問到任何一個抽象控件。
[0034]在上述技術(shù)方案中,優(yōu)選地,抽象封裝單元102進(jìn)行抽象控件編程的操作之前,還包括:將肌祖^5和原生控件的瓜信息結(jié)合,提煉得到基于拓討的抽象控件模型。在該技術(shù)方案中,開發(fā)人員只需要使用了狀必⑶丨討語言通過這套抽象控件模型即可控制不同移動平臺上的原生控件,既能發(fā)揮原生仙?在VI方面的天然優(yōu)勢,又可以使用1^8801-11)1:語言來解決跨平臺編程的問題。
[0035]在上述技術(shù)方案中,優(yōu)選地,數(shù)據(jù)通訊單元104,具體包括:原生調(diào)用模塊1042,用于當(dāng)抽象控件編程結(jié)束后,通過了3端執(zhí)行一個方法后發(fā)起一個原生調(diào)用,將抽象控件對應(yīng)的了30~數(shù)據(jù)提供給原生端主線程;原生控件的操作與更新模塊1044,用于原生端主線程接受到這份了30~數(shù)據(jù)后,根據(jù)了30^數(shù)據(jù)中的每一個抽象控件的描述信息,執(zhí)行更新原生VI控件的代碼,從而完成對原生控件的操作與更新。在該技術(shù)方案中,采用11111技術(shù)中的拓語言和文檔對象模型(001)的特點(diǎn),提出一套基于001編程風(fēng)格的抽象控件模型。開發(fā)人員只需使用了狀必⑶丨的針對這套抽象控件模型一次編碼,就能支持在不同運(yùn)行平臺之上運(yùn)行。
[0036]圖2示出了根據(jù)本發(fā)明的實施例的抽象控件模型編程方法的流程圖。
[0037]如圖2所示,根據(jù)本發(fā)明的實施例的抽象控件模型編程方法,包括:步驟202:利用抽象控件模型對原生控件的抽象封裝,進(jìn)行抽象控件編程;步驟204:抽象控件編程結(jié)束后,進(jìn)行抽象控件與原生控件之間的數(shù)據(jù)通訊。在該技術(shù)方案中,可以通過抽象控制編程,方便地訪問操作原生控件,屏蔽不同移動平臺的差異化,實現(xiàn)跨平臺開發(fā)。
[0038]在上述技術(shù)方案中,優(yōu)選地,如圖3所示,步驟202,具體包括:步驟302:將一個原生頁面看作是一個頁面,將原生頁面內(nèi)每一個原生控件抽象成一個£1611161^對象;在1^8801-11)1:中通過(100111116111:對象使用001對象的方式實現(xiàn)對中每一個控件的訪問與操作;步驟304:將原生控件用肌見來定義,并使用拓的語言中的了30^對象來描述這個肌見對應(yīng)的001對象;步驟306:借鑒肌見001的編程方式,提供對象和同名八?I,完成抽象控件編程;抽象控件編程完成后,基于肌見001編程,使用八?I對抽象控件進(jìn)行讀取、訪問、操作。在該技術(shù)方案中,可以通過該控件模型提供的肌見001八?I及編程方式,通過該抽象控件模型提供的八?I來屏蔽不同移動平臺帶來的開發(fā)的差異性,輕松實現(xiàn)跨平臺編程,降低開發(fā)人員的學(xué)習(xí)成本,從而降低跨平臺移動開發(fā)門檻。
[0039]在上述技術(shù)方案中,優(yōu)選地,步驟304描述001對象的了301包含控件的唯一標(biāo)識1(1、對應(yīng)的肌祖^的仏8標(biāo)簽、使用肌祖^元素的基本屬性來表示原生控件的屬性的』8011對象、一個抽象控件對象在控件樹中的狀態(tài)描述符和容器控件通過也11辦611來描述其子控件信息的數(shù)組;和/或,步驟306提供的$(100111116111:對象,是一個00(3111116111:類型的單例對象,通過它能夠訪問到任何一個抽象控件。
[0040]在上述技術(shù)方案中,優(yōu)選地,步驟102進(jìn)行抽象控件編程的操作之前,還包括:將^15和原生控件的VI信息結(jié)合,提煉得到基于拓討的抽象控件模型。在該技術(shù)方案中,開發(fā)人員只需要使用了狀必⑶丨的語言通過這套抽象控件模型即可控制不同移動平臺上的原生控件,既能發(fā)揮原生仙?在VI方面的天然優(yōu)勢,又可以使用了狀必⑶1討語言來解決跨平臺編程的問題。
[0041]在上述技術(shù)方案中,優(yōu)選地,如圖4所示,步驟104,具體包括:步驟402:當(dāng)抽象控件編程結(jié)束后,通過幾端執(zhí)行一個方法后發(fā)起一個原生調(diào)用,將抽象控件對應(yīng)的了30~數(shù)據(jù)提供給原生端主線程;步驟404:原生端主線程接受到這份了30~數(shù)據(jù)后,根據(jù)了30~數(shù)據(jù)中的每一個抽象控件的描述信息,執(zhí)行更新原生瓜控件的代碼,從而完成對原生控件的操作與更新。在該技術(shù)方案中,采用肌祖^技術(shù)中的拓語言和文檔對象模型(001)的特點(diǎn),提出一套基于001編程風(fēng)格的抽象控件模型。開發(fā)人員只需使用了狀必⑶丨討針對這套抽象控件模型一次編碼,就能支持在不同運(yùn)行平臺之上運(yùn)行。
[0042]本發(fā)明的技術(shù)方案,是基于移動跨平臺的抽象控件模型技術(shù)解決方案。本發(fā)明的技術(shù)方案,涉及在移動開發(fā)領(lǐng)域中不同控件模型需要不同的開發(fā)語言的現(xiàn)狀,提出一套統(tǒng)一的基于拓討語言實現(xiàn)的抽象控件模型,通過該控件模型提供的!!1見001八?I及編程方式,可以方便地訪問操作原生控件;從而屏蔽不同移動平臺的差異化,從而實現(xiàn)跨平臺開發(fā)。
[0043]為了能進(jìn)行跨平臺開發(fā),還要保持原生控件的天然優(yōu)勢,我們將!和原生控件在III方面的優(yōu)勢結(jié)合起來,提煉出一套基于]的抽象控件模型,開發(fā)人員只需要使用了狀必⑶1討語言通過這套抽象控件模型即可控制不同移動平臺上的原生控件。這樣既能發(fā)揮原生仙?在VI方面的天然優(yōu)勢,又可以使用了狀必⑶1討語言來解決跨平臺編程的問題。
[0044]本發(fā)明的技術(shù)方案,旨在為移動開發(fā)領(lǐng)域使用提供一套基于討語言的抽象控件編程模型,通過該抽象控件模型提供的仙I來屏蔽不同移動平臺帶來的開發(fā)的差異性,輕松實現(xiàn)跨平臺編程,降低開發(fā)人員的學(xué)習(xí)成本,從而降低跨平臺移動開發(fā)門檻。
[0045]我們采用肌祖^技術(shù)中的拓^3(^1討語言和文檔對象模型(001)的特點(diǎn),提出一套基于001編程風(fēng)格的抽象控件模型。開發(fā)人員只需使用了狀必⑶丨的針對這套抽象控件模型一次編碼,就能支持在不同運(yùn)行平臺之上運(yùn)行,完全不必理會平臺上控件編程的差異,輕輕松松實現(xiàn)夢寐以求的跨平臺移動開發(fā)。
[0046]為了能實現(xiàn)上述目標(biāo),需要解決如下幾件事情:
第一、使用語言來解決跨平臺編程。
[0047]第二、使用抽象控件模型來實現(xiàn)跨平臺控件編程。
[0048]第三、抽象控件如何對原生控件進(jìn)行抽象。
[0049]第四、抽象控件如何原生控件之間的數(shù)據(jù)通訊。
[0050]不同的移動平臺都各自的幾引擎,例如安卓有乂8引擎,001-6引擎,加上移動平臺提供的硏5^16界組件可以很好的實現(xiàn)原生語言與]之間的相互調(diào)用,所以選用了狀必⑶1討語言就可以解決跨平臺編程語言的問題。
[0051]我們使用拓^3(^1的語言中的了30^對象來描述一個抽象控件,所有對控件的編程轉(zhuǎn)化為對了30^對象的編程,這樣原本需要使用不同語言對通過不同八?I才能操作原生控件,而現(xiàn)在僅僅需要使用語言來對了30~操作即可。
[0052]接下來,我們重點(diǎn)闡述一下如何實現(xiàn)抽象控件模型對原生控件的抽象封裝和抽象控件與原生控件之間的數(shù)據(jù)通訊:
1、001抽象控件與編程方式的演化
眾所周知,在肌見中,通過001實現(xiàn)了對!1111的訪問能力,并使開發(fā)者能將?。?見作為XII文檔來處理和查看。在使用(10(3111116111:和肌11 2161116111:可以訪問并控制肌見頁面中的所有元素。
[0053]我們把這種思想引入到移動開發(fā)領(lǐng)域,我們可以將一個原生頁面看作是一個肌11頁面,那么該頁面內(nèi)每一個原生控件都可以抽象成一個2161116111:對象。在]中可以通過(10(3111116111:對象使用001對象的方式來實現(xiàn)對中每一個控件的訪問與操作。我們使用中的了30^對象來定義這樣一個001對象,并提供一個$(100111116111:對象,通過$(100111116111:也能像使用(100111116111: —樣,對當(dāng)前頁面上所有抽象控件進(jìn)行訪問和操作。參見圖5。
[0054]其演化過程參見圖6。
[0055]2、抽象控件模型
我們結(jié)合肌見和001的思想,將原生控件(如或103控件)用肌見來定義,并使用了狀狀⑶丨討語言中的了30^對象來描述這個肌見對應(yīng)的001對象,該了30^包含如下內(nèi)容:
1(1:控件的1(1,控件的唯一標(biāo)示。
[0056]10.^:對應(yīng)的!!1見的1:叫標(biāo)簽。
[0057]81:1:1-8: 一個』8011對象,使用??!111元素的基本屬性來表示原生控件的屬性。
[0058]81:81:118:用于描述一個抽象控件對象在控件樹中的狀態(tài),有3(1(1、1110(11^16(1^己6161:6、111861~1: —#7^。
[0059]01111(11-611:是一個數(shù)組,一個容器控件通過來描述其子控件信息。
[0060]此時我們也可以把這個了 3(例對象看做是一個“控件”,只不過這個控件比較“特殊”,是一個對原生控件的抽象而已。
[0061]例如八11(11*01(1中編輯框控件£(111:丁6x1:,其文本為“8)3(3”的,用中1111)111:元素來定義為:
〈1111)111: 101二〃1:6叉1:130叉0〃 七7??6二〃七 6X1:〃 ^81116=^8)30^/^
我們用抽象控件描述為一個了狀必⑶丨的180^對象為:
I
〃1己〃:〃 1:6x1:130x0〃,
// , // //., //: 111口11 七,
// , , // // 1./-..1 //
5^8^115: 111001 士 160 ,
// , , // 「//.1 // //』 ,1 //, // // , , 1 // // 1 // // 1 //-]
&七七 1*8: 1 10: 1:6X^100X0 ,:七6又七00又,V&丄 116: 800 )
I
其抽象過程如圖7所示。
[0062]隨著控件抽象的演化,其對應(yīng)的編程方式也由原生控件的編程轉(zhuǎn)化為拓^3(^1的編程方式。
[0063]全局變量用來表示對整個抽象控件模型對象,其內(nèi)部存儲一個1^8801-11)1:的』8011對象,用于描述當(dāng)前抽象控件樹。初始時該了30^對象是一個空了308對象,隨著代碼中對指定的抽象控件進(jìn)行訪問操作時,$(100111116111:對象會動態(tài)的逐步的增加相應(yīng)的控件描述。這也是為什么叫抽象控件的原因。因為剛開始的時候,對象中根本沒有了30~控件。
[0064]$(100111116111:對象的 @61:2161116111:871(1 方法,返回一個 2161116111:對象。
[0065]2161116111:對象內(nèi)部有一個』8011對象用于描述該抽象控件的所有信息,并提供86^1:1:1-113111:6和陰丨紅廿讓此6方法用來設(shè)置或獲取』8011對象的屬性值,即抽象控件的屬性值。
[0066]獲取一個抽象控件指定屬性的過程如圖8所示。
[0067]設(shè)置一個抽象控件指定屬性的過程如圖9所示。
[0068]例如,初始時$(10(3111116111:內(nèi)部的用于抽象控件了30^為一個空對象,即(},
當(dāng)執(zhí)行一段幾代碼后,該了30~對象變成
I
〃七61 七 130X0〃:(
"土己〃:"七 6X^130X0〃,
// , ////..”: 111口11 七,
// , , // // 1./-..1 //
5^8^115: 111001 士 160 ,
// , , // 「//.1 // //』 ,1 //, // // , , 1 // // 1 // // 1 //-]
&七七 1*8: 1 10: 1:6X^100X0 ,:七6又七00又,V&丄 116: 800 )
^011011811^6^: 〃七1^11^1 呂6〃
I
I
3、抽象控件模型編程及八?I
在抽象控件編程中,借鑒了肌見001的編程方式,提供了對象和同名八?I,
$(100111116111:對象是一個00(3111116111:類型的單例對象,通過它可以訪問到任何一個抽象控件。
[0069]熟悉!III 001編程的開發(fā)者可以很容易理解并使用八?I對抽象控件進(jìn)行讀取、訪問、操作。
[0070]$(10(3111116111:對象全局的唯一的 00(3111116111:類型的對象,使用 86從161116111:871 (1 方法可以返回一個2161116111:對象。
[0071]2161116111:對象有 861:八和 @61:八兩個常用的方法。如圖 10 和圖11所示。
[0072]下面我們來講解一下抽象控件編程的代碼演示過程。
[0073]例如103中都有文本編輯框控件,我們采用抽象控件編程的方式來舉例說明如何對定義一個文本框,以及對這個文本框進(jìn)行取值賦值操作。
[0074]首先,一個文本框的采用定義如下:
〈1111)111: 101二〃1:6叉1:〃1:6叉1:130叉0〃 七5^16二〃1:6叉1:〃 乂已1116二〃123〃7?
此時該文本框控件對應(yīng)的抽象控件模型可以描述為
^1:6x1:130x0〃:(
〃1己〃:〃 1:6x1:130x0〃,
// , // //., //: 111口11 七,
// , ,//「.//..1八 ////.////..1////-,//
&七七 1*8: 1 10: 1:6X^100X0 , 七7口6: 七6又七00又, V&丄 116:
I
此時我們需要把一個輸入框抽象控件的值由“123”改變?yōu)椤疤幰粫r,即對應(yīng)的肌11為
〈1111)111: 101二〃1:6叉1:130叉0〃 七7??6二〃七 6X1:〃 ^81116=^8)30^/^
采用了3抽象控件編程代碼如下:
妨!"吐0 =://根據(jù) 1(1 自動創(chuàng)建一個抽象控件對象并返回
1:130.861:^1:1:1-113111:6"處。").'丨丨設(shè)置該 2161116111:對象內(nèi)部 ^80^ 對象中 8七1:1~8
的妨1116為字符串3?!?br>
的^£11116屬性的值
此時了30~結(jié)構(gòu)如下
(
"土己〃:"七 6X^130X0〃,
// , , ”” 1./-..1 //
5^8^115: 111001 士 160 ,
// , , ” 「// 1 // // 1 //-]
&七七 1*8: 1 V&丄 116: 800 )
I
第一句代碼中的同肌見001編程的861:2161116111:871(1含義相同都是獲取一個001對象,不同之處在于肌祖^中會根據(jù)參數(shù)1(1去001中查找到£16061^對象,而在抽象控件編程中是根本沒有這個2161116111:對象的,也就是說一開始$(100111116111:對象是一個空對象0,當(dāng)調(diào)用$(10111(3111116111:的86從161111:111:871(1方法時會在$(10(3111116111:中動態(tài)創(chuàng)建一個1(1為1:6X1:130X0的』8011對象用于描述該抽象控件,此時根本沒有什么控件,而僅僅是一個』8011對象,該』8011對象也僅僅只有一個屬性1(1,即1^1(1〃: 〃 1^6X1: 130^0^},并將該了30~對象加入到$(10(3111116111:對象中,以后對1:6X1:130X0的訪問和操作都會從$(10(3111116111:中查找。
[0075]第二句代碼中的861:八1:1:1*113111:6方法含義也同肌11 001編程中的861:八1:1:1*113111:6方法,!!111 001中是對£16061^對象指定屬性賦值,而抽象編程中是對該抽象控件對象指定屬性賦值,即對吐0這個抽象控件對應(yīng)的了30~數(shù)據(jù)中的對象的^£11116屬性賦值,此時該抽象控件對象了30~描述為
I
〃1己〃:〃 1:6x1:130x0〃,
// , , // // 1./-..1 //
5^8^115: 111001 士 160 ,
// , , // 「// 1 // // 1 //-]
&七七 1*8: 1 V&丄 116: 800 )
I
此時,在了30^描述中多了一個8仏加8屬性,用于標(biāo)注該抽象控件對象屬性發(fā)生了改變。等所有抽象控件的的代碼執(zhí)行完畢后,原生端會根據(jù)這個8仏加8屬性進(jìn)行更新、刪除、創(chuàng)建等操作。
[0076]第三句代碼執(zhí)行陰丨紅廿'讓此一(〃妨匕一〃)用于獲取該抽象控件的值,即返回該180^對象中的211:1:1*8下的妨1116屬性的值。
[0077]以上代碼開始是對抽象控件的賦值過程,還有一種情況就是,代碼一開始沒有對抽象控件賦值,而是對抽象控件取值。我們分析如下代碼:
妨!"吐0 =://根據(jù) 1(1 自動創(chuàng)建一個抽象控件對象財1 = 1:)30.陰1:八(^£11116^, ) ;//先在 $(10(3111116111:沒有該屬性值,則通過服務(wù)調(diào)用原生控件的%1116屬性的值 1^^1==^123^)
1:130.861:^1:1:1-113111:6 (^^81116^,;
在代碼中并沒有先調(diào)用861:八1:1:1~113111:6方法,而是先調(diào)用'讓此6的時,即上述代碼的第一句,由于此時$(10(3111116111:中的并沒有真正的控件,所以執(zhí)行到陰七紅廿'讓此6方法時,需要隱式的在了3端發(fā)起一個同步調(diào)用請求,獲取原生控件對應(yīng)屬性的屬性值,獲取原生控件屬性值后,再動態(tài)的在中創(chuàng)建一個抽象控件,其對應(yīng)點(diǎn)屬性值則為剛剛獲取的原生控件的屬性值,而這個過程是抽象控件編程框架自動完成的,開發(fā)者無需關(guān)心具體實現(xiàn),從代碼的層面看就像$(10(3111116社中已經(jīng)有這個抽象控件,并能返回指定屬性值。
[0078]以上我們闡述了如何獲取一個抽象控件,以及如何對該抽象控件進(jìn)行屬性訪問與設(shè)置。
[0079]4、抽象控件模型與原生控件之間的數(shù)據(jù)通訊。
[0080]參見圖12,當(dāng)抽象控件編程結(jié)束后,通過幾端執(zhí)行一個方法后發(fā)起一個原生調(diào)用,將抽象控件對應(yīng)的了30~數(shù)據(jù)提供給原生端主線程,原生端主線程接受到這份幾數(shù)據(jù)后,根據(jù)了30~數(shù)據(jù)中的每一個抽象控件的描述信息,執(zhí)行更新原生瓜控件的代碼,從而完成對原生控件的操作與更新。
[0081]以了狀必⑶丨的與安卓為例,八11(11*01(1更新III必須是在主線程之上進(jìn)行,所以在了3端通過抽象控件編程后,必須以了30~的形式提交至安卓VI主線程之后,有主線程進(jìn)行VI更新。整個過程中,開發(fā)人員僅僅需要編寫抽象控件的編程的拓^3(^1的代碼即可。
[0082]推廣到一般性上,對基于抽象控件編程的開發(fā)人員而言,18端與原生端之間的數(shù)據(jù)通訊,以及原生端如何解析了3端傳遞過來的幾數(shù)據(jù)從而更新原生VI這些工作無需關(guān)心,只要關(guān)注如何進(jìn)行抽象控件編程即可。
[0083]本發(fā)明的技術(shù)方案,至少可以達(dá)到的有益效果包括:
⑴從代碼運(yùn)行效率上看,更新瓜控件的操作,最終仍然是在原生端實現(xiàn)的,所以相對于跨平臺方式而言,原生VI的效率、流暢性具有絕對優(yōu)勢。
[0084]⑵從編程語言上的看,由多套基于原生語言的編程轉(zhuǎn)化為一套基于了的編程,實現(xiàn)了跨平臺編程。
[0085]⑶從代碼八?I的使用上,提供近似!II見001的編程八?I,極大降低了開發(fā)人員的學(xué)習(xí)成本,對于開發(fā)人員幾乎沒有任何障礙。
[0086]總之,使用拓^3(^1討語言,采用抽象控件編程方式,可以能使得更多的開發(fā)人員,尤其是具有1613開發(fā)經(jīng)驗的開發(fā)人員能夠在最短的時間內(nèi)實現(xiàn)跨平臺移動開發(fā)。
[0087]以上結(jié)合附圖詳細(xì)說明了本發(fā)明的技術(shù)方案,考慮到相關(guān)技術(shù)中沒有簡便的、統(tǒng)一的針對復(fù)雜類型控件編程的解決辦法?,F(xiàn)有的模型編程無法完成有復(fù)雜類型參與的模型編程過程。因此,本發(fā)明提出了一種抽象控件模型編程裝置和一種抽象控件模型編程方法,可以在現(xiàn)有的模型編程方式基礎(chǔ)上,充分利用常規(guī)對象類型完成抽象對象類型的模型編程,建立多對象類型參與的面向抽象控件模型編程模的通用、統(tǒng)一編程思路。
[0088]以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種抽象控件模型編程裝置,其特征在于,包括: 抽象封裝單元,用于利用抽象控件模型對原生控件的抽象封裝,進(jìn)行抽象控件編程; 數(shù)據(jù)通訊單元,用于抽象控件編程結(jié)束后,進(jìn)行抽象控件與原生控件之間的數(shù)據(jù)通訊。
2.根據(jù)權(quán)利要求1所述的抽象控件模型編程裝置,其特征在于,所述抽象封裝單元,具體包括: DOM抽象控件與編程方式的演化模塊,用于將一個原生頁面看作是一個HTML頁面,將原生頁面內(nèi)每一個原生控件抽象成一個Element對象;在JavaScript中通過document對象使用DOM對象的方式實現(xiàn)對HTML中每一個控件的訪問與操作; 抽象控件模型生成模塊,用于將原生控件用HTML來定義,并使用Javascript語言中的JSON對象來描述這個HTML對應(yīng)的DOM對象; 抽象控件模型編程及API模塊,用于借鑒HTML DOM的編程方式,提供$doCument對象和同名API,完成抽象控件編程;抽象控件編程完成后,基于HTML DOM編程,使用API對抽象控件進(jìn)行讀取、訪問、操作。
3.根據(jù)權(quán)利要求2所述的抽象控件模型編程裝置,其特征在于,所述抽象控件模型生成模塊描述DOM對象的JS0N,包含控件的唯一標(biāo)識id、對應(yīng)的HTML的tag標(biāo)簽、使用HTML元素的基本屬性來表示原生控件的屬性的json對象、一個抽象控件對象在控件樹中的狀態(tài)描述符和容器控件通過children來描述其子控件信息的數(shù)組; 和/或, 所述抽象控件模型編程及API模塊提供的$document對象,是一個Document類型的單例對象,通過它能夠訪問到任何一個抽象控件。
4.根據(jù)權(quán)利要求1-3中任一項所述的抽象控件模型編程裝置,其特征在于,所述抽象封裝單元進(jìn)行抽象控件編程的操作之前,還包括:將HTML5和原生控件的UI信息結(jié)合,提煉得到基于JavaScript的抽象控件模型。
5.根據(jù)權(quán)利要求1-3中任一項所述的抽象控件模型編程裝置,其特征在于,所述數(shù)據(jù)通訊單元,具體包括: 原生調(diào)用模塊,用于當(dāng)抽象控件編程結(jié)束后,通過JS端執(zhí)行一個方法后發(fā)起一個原生調(diào)用,將抽象控件對應(yīng)的JSON數(shù)據(jù)提供給原生端主線程; 原生控件的操作與更新模塊,用于原生端主線程接受到這份JSON數(shù)據(jù)后,根據(jù)JSON數(shù)據(jù)中的每一個抽象控件的描述信息,執(zhí)行更新原生Π控件的代碼,從而完成對原生控件的操作與更新。
6.一種抽象控件模型編程方法,其特征在于,包括: 步驟202:利用抽象控件模型對原生控件的抽象封裝,進(jìn)行抽象控件編程; 步驟204:抽象控件編程結(jié)束后,進(jìn)行抽象控件與原生控件之間的數(shù)據(jù)通訊。
7.根據(jù)權(quán)利要求6所述的抽象控件模型編程方法,其特征在于,所述步驟202,具體包括: 步驟302:將一個原生頁面看作是一個HTML頁面,將原生頁面內(nèi)每一個原生控件抽象成一個Element對象;在JavaScript中通過document對象使用DOM對象的方式實現(xiàn)對HTML中每一個控件的訪問與操作; 步驟304:將原生控件用HTML來定義,并使用Javascript語言中的JSON對象來描述這個HTML對應(yīng)的DOM對象; 步驟306:借鑒HTML DOM的編程方式,提供$document對象和同名API,完成抽象控件編程;抽象控件編程完成后,基于HTML DOM編程,使用API對抽象控件進(jìn)行讀取、訪問、操作。
8.根據(jù)權(quán)利要求7所述的抽象控件模型編程方法,其特征在于,所述步驟304描述DOM對象的JS0N,包含控件的唯一標(biāo)識id、對應(yīng)的HTML的tag標(biāo)簽、使用HTML元素的基本屬性來表示原生控件的屬性的json對象、一個抽象控件對象在控件樹中的狀態(tài)描述符和容器控件通過children來描述其子控件信息的數(shù)組; 和/或, 所述步驟306提供的$document對象,是一個Document類型的單例對象,通過它能夠訪問到任何一個抽象控件。
9.根據(jù)權(quán)利要求6-8中任一項所述的抽象控件模型編程方法,其特征在于,所述步驟102進(jìn)行抽象控件編程的操作之前,還包括:將HTML5和原生控件的UI信息結(jié)合,提煉得到基于JavaScript的抽象控件模型。
10.根據(jù)權(quán)利要求6-8中任一項所述的抽象控件模型編程方法,其特征在于,所述步驟.104,具體包括: 步驟402:當(dāng)抽象控件編程結(jié)束后,通過JS端執(zhí)行一個方法后發(fā)起一個原生調(diào)用,將抽象控件對應(yīng)的JSON數(shù)據(jù)提供給原生端主線程; 步驟404:原生端主線程接受到這份JSON數(shù)據(jù)后,根據(jù)JSON數(shù)據(jù)中的每一個抽象控件的描述信息,執(zhí)行更新原生Π控件的代碼,從而完成對原生控件的操作與更新。
【文檔編號】G06F9/44GK104407863SQ201410671291
【公開日】2015年3月11日 申請日期:2014年11月21日 優(yōu)先權(quán)日:2014年11月21日
【發(fā)明者】勾成圖, 張建新 申請人:用友軟件股份有限公司