專利名稱:把傳統(tǒng)軟件應(yīng)用程序轉(zhuǎn)換為現(xiàn)代面向?qū)ο笙到y(tǒng)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)程序的轉(zhuǎn)換。特別地,本發(fā)明涉及用于把傳統(tǒng)軟件應(yīng)用程序轉(zhuǎn)換為現(xiàn)代面向?qū)ο笙到y(tǒng)的方法和系統(tǒng)。
背景技術(shù):
存在有許多技術(shù)和方法用于把軟件應(yīng)用程序從一種編程語(yǔ)言轉(zhuǎn)換為另一種編程語(yǔ)言。但是編寫(xiě)軟件應(yīng)用程序的語(yǔ)言僅僅是其構(gòu)成的一個(gè)方面。一種軟件應(yīng)用程序是一個(gè)具有許多部分的復(fù)雜系統(tǒng)。
該“代碼”是用編程語(yǔ)言所編寫(xiě)的軟件應(yīng)用程序的一部分,并且包含在各種情況下該軟件應(yīng)用程序所執(zhí)行的操作的指令。在早期的計(jì)算機(jī)中,軟件應(yīng)用程序是使用匯編語(yǔ)言來(lái)編寫(xiě)的。一種匯編語(yǔ)言程序被稱為匯編程序的一個(gè)應(yīng)用程序轉(zhuǎn)換為由計(jì)算機(jī)的中央處理單元所執(zhí)行的機(jī)器語(yǔ)言。匯編語(yǔ)言操作是非常低級(jí)的,并且使得編寫(xiě)應(yīng)用程序變得困難。隨著計(jì)算機(jī)技術(shù)的發(fā)展,其他“更高級(jí)”的語(yǔ)言被開(kāi)發(fā),其允許程序員更加容易地創(chuàng)建執(zhí)行復(fù)雜任務(wù)的軟件。一種稱為編譯器的專用軟件應(yīng)用程序被開(kāi)發(fā),其把較高級(jí)語(yǔ)言轉(zhuǎn)換為可以由計(jì)算機(jī)所執(zhí)行機(jī)器語(yǔ)言。較高級(jí)語(yǔ)言使得程序員把代碼組織成稱為例程或過(guò)程的代碼塊,其可以根據(jù)需要被重復(fù)執(zhí)行。
軟件應(yīng)用程序還需要被用于管理信息。因此軟件開(kāi)發(fā)工具提供描述數(shù)據(jù)結(jié)構(gòu)的能力。數(shù)據(jù)結(jié)構(gòu)提供按照有組織和可識(shí)別的方式把數(shù)據(jù)存儲(chǔ)在存儲(chǔ)器中,使得數(shù)據(jù)可以被該代碼所作用。該代碼包含用于作用在該數(shù)據(jù)結(jié)構(gòu)上的指令,并且被按照稱為例程的片斷而分組。在早期的軟件開(kāi)發(fā)工具中,該數(shù)據(jù)結(jié)構(gòu)和例程被分別定義。為了使得任何例程作用于數(shù)據(jù),該數(shù)據(jù)必須被作為參數(shù)傳送到該例程。編寫(xiě)稱為例程并且傳送參數(shù)的方法通常被稱為“過(guò)程程序設(shè)計(jì)(procedural programming)”。一種更加現(xiàn)代的方法是“面向?qū)ο蟆被蛘逴O模型。該OO模型相對(duì)于該過(guò)程模型具有較大差別。
在OO模型中,數(shù)據(jù)結(jié)構(gòu)和代碼例程可以被分組為被稱為“類”的單個(gè)獨(dú)立數(shù)據(jù)結(jié)構(gòu)。一個(gè)類是稱為方法的例程的模板定義,并且數(shù)據(jù)結(jié)構(gòu)屬于特定種類的對(duì)象。該類定義成員對(duì)象的公共屬性。由于模塊化可重新使用的代碼結(jié)構(gòu),OO程序可以被容易地創(chuàng)建和更改。
OO程序設(shè)計(jì)還具有許多其他有利特性,例如繼承性。繼承性使得用戶通過(guò)指定另一個(gè)對(duì)象作為其父類(或者“超類”)而創(chuàng)建一個(gè)新對(duì)象。該新創(chuàng)建的對(duì)象立即獲取所有父類的功能。但是,用戶可以在任何情況下定制新類的行為。
一個(gè)“用戶界面”是使得個(gè)人與軟件應(yīng)用程序交互作用的應(yīng)用程序的一部分。在許多情況下,該用戶界面使用“窗體”來(lái)創(chuàng)建。一個(gè)窗體指定在一個(gè)顯示器上顯示給用戶的“字段”和“點(diǎn)綴(trim)”的外觀。字段是用戶可以輸入數(shù)據(jù)的各個(gè)區(qū)域。點(diǎn)綴是例如標(biāo)簽這樣的固定信息,其指示用戶在不同的字段中輸入何種的信息,或者在該應(yīng)用程序提供一些其他目的。通常這些窗體不使用代碼來(lái)實(shí)現(xiàn)。而是,存在作為一個(gè)軟件開(kāi)發(fā)環(huán)境的一部分的“窗體編輯器”,其使得程序員交互地構(gòu)造該窗體。該窗體的定義被存儲(chǔ)在一個(gè)存儲(chǔ)庫(kù)和該開(kāi)發(fā)環(huán)境中,并且在該應(yīng)用程序被執(zhí)行提供該窗體的顯示。
1970年代和1980年代的軟件開(kāi)發(fā)工具使用一種“基于字符”的用戶界面。一般來(lái)說(shuō),該用戶界面被限制于顯示24行,并且每行為80個(gè)字符的窗體。這些工具通常使用在一個(gè)終端上的第25行來(lái)顯示與該活動(dòng)窗體相關(guān)的命令。更加現(xiàn)代的工具允許使用圖形用戶界面(GUI)的窗體。該GUI使得具有更大數(shù)目和多種用戶控制的更加復(fù)雜的窗體得以實(shí)現(xiàn)。
該代碼和窗體一同創(chuàng)建一個(gè)可以執(zhí)行任務(wù)的應(yīng)用程序。管理用戶界面的程序的一部分被稱為“顯示邏輯”。這包括捕獲用戶輸入和啟動(dòng)程序動(dòng)作的代碼語(yǔ)句,以附加的信息提示用戶或者否則對(duì)該顯示器做出改變。該代碼的其他部分被稱為“業(yè)務(wù)邏輯”。該業(yè)務(wù)邏輯包括工作流程、數(shù)據(jù)庫(kù)存取、事務(wù)處理和作為用戶命令的結(jié)果的其他動(dòng)作。業(yè)務(wù)邏輯和顯示邏輯通常是相互糾纏在一起的。
一種數(shù)據(jù)庫(kù)系統(tǒng)(DBMS)是可以存儲(chǔ)、更改和從數(shù)據(jù)庫(kù)中提取信息的程序的集合。以查詢(這是一個(gè)格式化的問(wèn)題)的形式從數(shù)據(jù)庫(kù)請(qǐng)求信息。用于構(gòu)造查詢的規(guī)則被稱為查詢語(yǔ)言。不同DBMS支持不同的查詢語(yǔ)言,但是這是被稱為SQL(結(jié)構(gòu)化查詢語(yǔ)言)的一個(gè)半標(biāo)準(zhǔn)化的查詢語(yǔ)言。
存儲(chǔ)在一個(gè)數(shù)據(jù)庫(kù)中的信息可以用各種格式來(lái)顯示。大多數(shù)DBMS包括一個(gè)報(bào)告書(shū)寫(xiě)程序,其使得數(shù)據(jù)以報(bào)告的形式輸出。該報(bào)告寫(xiě)入程序也被稱為一個(gè)報(bào)告產(chǎn)生器,這是從一個(gè)或多個(gè)文件提取信息并且以特定格式顯示該信息的數(shù)據(jù)庫(kù)管理系統(tǒng)的一部分。報(bào)告書(shū)寫(xiě)允許選擇滿足特定條件的記錄,并且在行和列中顯示所選擇的字段。數(shù)據(jù)可以被格式化為餅分圖、柱形圖和其他圖形。一旦創(chuàng)建一個(gè)報(bào)告格式,該格式標(biāo)準(zhǔn)可以被保存在一個(gè)文件中并且在將來(lái)演示時(shí)被重新使用。
相關(guān)的數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)是一種相關(guān)窗體。關(guān)系數(shù)據(jù)庫(kù)可能需要關(guān)于數(shù)據(jù)如何相關(guān)或者如何從該數(shù)據(jù)庫(kù)中提取的幾個(gè)假設(shè)。結(jié)果,可以用許多不同方式來(lái)察看相同的數(shù)據(jù)庫(kù)。在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)中,信息被以窗體的形式存儲(chǔ),例如參照排列為行和列的數(shù)據(jù)的電子窗體。一個(gè)關(guān)系系統(tǒng)所需的特征是單個(gè)數(shù)據(jù)庫(kù)可以在幾個(gè)窗體上展開(kāi)。
使用一些類型的“構(gòu)架”來(lái)實(shí)現(xiàn)一個(gè)軟件應(yīng)用程序。該構(gòu)架描述應(yīng)用程序的基本結(jié)構(gòu)。構(gòu)架的一個(gè)方面關(guān)于所涉及的計(jì)算機(jī)的數(shù)目。單個(gè)層級(jí)的應(yīng)用程序是所有應(yīng)用程序和/或系統(tǒng)在單個(gè)計(jì)算機(jī)上運(yùn)行的應(yīng)用程序。這包括任何外部調(diào)用,即,制作其他軟件應(yīng)用程序所需的軟件。例如,一個(gè)軟件應(yīng)用程序可能“調(diào)用”一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng),以提取或更新數(shù)據(jù)。在單個(gè)層級(jí)的模型中,該軟件應(yīng)用程序和數(shù)據(jù)庫(kù)管理系統(tǒng)將運(yùn)行在單個(gè)計(jì)算機(jī)上。用戶接口可以顯示在一個(gè)“啞終端”上,這是能夠僅僅顯示一個(gè)窗體的設(shè)備,使得用戶輸入信息,并且把該信息返回到“主”計(jì)算機(jī)。
一個(gè)客戶機(jī)/服務(wù)器應(yīng)用程序或者兩個(gè)層級(jí)的軟件應(yīng)用程序是這樣一個(gè)應(yīng)用程序,其中該軟件應(yīng)用程序運(yùn)行在一個(gè)計(jì)算機(jī)(客戶機(jī))上,并且通過(guò)網(wǎng)絡(luò)連接對(duì)另一個(gè)計(jì)算機(jī)(服務(wù)器)上運(yùn)行的其他軟件應(yīng)用程序進(jìn)行外部調(diào)用。
一個(gè)最近的構(gòu)架創(chuàng)新是N層級(jí)的應(yīng)用程序。在該N層級(jí)的模型中,僅僅部分軟件應(yīng)用程序運(yùn)行在該客戶機(jī)工作站上。這通常是一個(gè)智能的用戶界面(或者是瘦客戶機(jī)(thin client))。當(dāng)需要執(zhí)行特定任務(wù)時(shí),該客戶機(jī)定位包含所需的業(yè)務(wù)邏輯的一個(gè)“應(yīng)用程序服務(wù)器”,并且該工作實(shí)際在運(yùn)行應(yīng)用程序服務(wù)器的計(jì)算機(jī)上執(zhí)行。該應(yīng)用程序服務(wù)器可能需要與另一個(gè)計(jì)算機(jī)相聯(lián)系,例如數(shù)據(jù)庫(kù)服務(wù)器,以完成該客戶機(jī)所要求的處理。當(dāng)該事件鏈最終涉及無(wú)限數(shù)目的客戶機(jī)時(shí),該模型被稱為N層級(jí)模型。
當(dāng)今許多組織所面臨的一個(gè)挑戰(zhàn)是它們已經(jīng)投入大量的金錢(qián)和時(shí)間來(lái)開(kāi)發(fā)使用字符界面的軟件應(yīng)用程序,其本質(zhì)是程序上的,并且應(yīng)用于單個(gè)層級(jí)的模型。這些應(yīng)用程序通常被稱為“傳統(tǒng)”應(yīng)用程序。支持和增強(qiáng)這些應(yīng)用程序是一個(gè)大的挑戰(zhàn),因?yàn)殚_(kāi)發(fā)人員不再學(xué)習(xí)創(chuàng)建這些程序的技術(shù)。另外,當(dāng)前的互聯(lián)網(wǎng)和電子商務(wù)世界需要采用圖形用戶界面的系統(tǒng),它們本質(zhì)上是面向?qū)ο蟮模⑶沂褂肗層級(jí)的模型來(lái)實(shí)現(xiàn)。目前還沒(méi)有創(chuàng)建使得一個(gè)組織把它們現(xiàn)有的傳統(tǒng)應(yīng)用程序轉(zhuǎn)換為使用圖形用戶界面的現(xiàn)代的面向?qū)ο蟮腘層級(jí)應(yīng)用程序。結(jié)果,該組織必須經(jīng)歷費(fèi)時(shí)和費(fèi)錢(qián)的過(guò)程來(lái)使用現(xiàn)代工具完全重新設(shè)計(jì)和改寫(xiě)該應(yīng)用程序。
根據(jù)本申請(qǐng)的方法和系統(tǒng)解決這些和其他問(wèn)題。例如,根據(jù)本發(fā)明的該方法和系統(tǒng)能夠把一個(gè)傳統(tǒng)軟件應(yīng)用程序“轉(zhuǎn)換為”基于GUI的軟件應(yīng)用程序。該由本發(fā)明所完成的轉(zhuǎn)換包括轉(zhuǎn)換和增強(qiáng)該系統(tǒng)的各個(gè)方面。在單個(gè)處理中,傳統(tǒng)軟件應(yīng)用程序的基于字符的用戶界面可以被轉(zhuǎn)換為GUI,該代碼和數(shù)據(jù)結(jié)構(gòu)被集成、重構(gòu)和再生為適當(dāng)形成的對(duì)象類,并且對(duì)該傳統(tǒng)軟件應(yīng)用程序進(jìn)行增強(qiáng)和添加,使其操作為一個(gè)客戶機(jī)/服務(wù)器或者N層級(jí)系統(tǒng)。
發(fā)明內(nèi)容
本發(fā)明涉及一種用于把具有過(guò)程語(yǔ)言代碼的過(guò)程程序轉(zhuǎn)換為一個(gè)面向?qū)ο蟮某绦虻姆椒?,其中包括掃描該過(guò)程語(yǔ)言代碼并且根據(jù)所掃描的過(guò)程語(yǔ)言代碼創(chuàng)建一個(gè)映射,把所掃描的過(guò)程語(yǔ)言代碼存儲(chǔ)為中間代碼,使用該映射處理該過(guò)程語(yǔ)言代碼的至少一個(gè)片斷,使用所處理的片斷創(chuàng)建第一數(shù)據(jù)結(jié)構(gòu),根據(jù)該第一數(shù)據(jù)結(jié)構(gòu)更改該中間代碼,并且根據(jù)更改的中間代碼創(chuàng)建具有一個(gè)對(duì)象類的面向?qū)ο蟪绦颉T摲椒ㄟ€可以包括當(dāng)檢測(cè)到該過(guò)程語(yǔ)言代碼的預(yù)定片斷時(shí)暫停處理該過(guò)程語(yǔ)言代碼的步驟,以及根據(jù)預(yù)定片斷更改其他中間代碼。該方法還可以包括根據(jù)該過(guò)程語(yǔ)言創(chuàng)建第二數(shù)據(jù)結(jié)構(gòu),并且該第二數(shù)據(jù)結(jié)構(gòu)可以是具有識(shí)別該過(guò)程編程語(yǔ)言的語(yǔ)句的屬性的一個(gè)節(jié)點(diǎn)的一個(gè)層級(jí)樹(shù)。創(chuàng)建第一數(shù)據(jù)結(jié)構(gòu)的步驟可以包括根據(jù)所處理的片斷定位在第二數(shù)據(jù)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn),遍歷第二數(shù)據(jù)結(jié)構(gòu)中的節(jié)點(diǎn)直到根節(jié)點(diǎn),并且把所遍歷節(jié)點(diǎn)的內(nèi)容包含在第一數(shù)據(jù)結(jié)構(gòu)中。
本發(fā)明還涉及一種包括用于把具有過(guò)程語(yǔ)言代碼的過(guò)程程序轉(zhuǎn)換為面向?qū)ο蟪绦虻挠?jì)算機(jī)可執(zhí)行代碼的存儲(chǔ)介質(zhì),包括用于掃描該過(guò)程語(yǔ)言代碼和根據(jù)所掃描的過(guò)程語(yǔ)言代碼創(chuàng)建一個(gè)映射的代碼,用于把所掃描的過(guò)程語(yǔ)言代碼存儲(chǔ)為中間代碼的代碼,用于使用該映射處理該過(guò)程語(yǔ)言代碼的至少一個(gè)片斷的代碼,使用所處理的片斷創(chuàng)建第一數(shù)據(jù)結(jié)構(gòu)的代碼,用于根據(jù)第一數(shù)據(jù)結(jié)構(gòu)更改該中間代碼的代碼,以及用于根據(jù)該更改的中間代碼創(chuàng)建具有一個(gè)對(duì)象類的面向?qū)ο蟪绦虻拇a。該存儲(chǔ)介質(zhì)還可以包括用于在該過(guò)程語(yǔ)言代碼的預(yù)定片斷被檢測(cè)時(shí)暫停處理該過(guò)程語(yǔ)言代碼的一個(gè)片斷的代碼,以及用于根據(jù)預(yù)定片斷更改其他中間代碼的代碼。該存儲(chǔ)介質(zhì)還可以包括用于根據(jù)該過(guò)程語(yǔ)言創(chuàng)建第二數(shù)據(jù)結(jié)構(gòu)的代碼,以及該第二數(shù)據(jù)結(jié)構(gòu)可以是具有識(shí)別該過(guò)程編程語(yǔ)言的語(yǔ)句的屬性的節(jié)點(diǎn)的層級(jí)樹(shù)。用于創(chuàng)建第一數(shù)據(jù)結(jié)構(gòu)的代碼可以包括用于根據(jù)所處理的片斷定位在該第二數(shù)據(jù)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn)的代碼,用于遍歷該第二數(shù)據(jù)結(jié)構(gòu)中的節(jié)點(diǎn)直到一個(gè)根節(jié)點(diǎn)的代碼,以及用于把所遍歷的節(jié)點(diǎn)的內(nèi)容包含在第一數(shù)據(jù)結(jié)構(gòu)中的代碼。
本發(fā)明還涉及一種在傳送介質(zhì)中體現(xiàn)并且包括用于把具有過(guò)程語(yǔ)言代碼的過(guò)程程序轉(zhuǎn)換為一種面向?qū)ο蟪绦虻挠?jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)數(shù)據(jù)信號(hào),其中包括用于掃描該過(guò)程語(yǔ)言代碼和根據(jù)所掃描的過(guò)程語(yǔ)言代碼創(chuàng)建一個(gè)映射的數(shù)據(jù)信號(hào)部分,用于把所掃描的過(guò)程語(yǔ)言代碼存儲(chǔ)為中間代碼的數(shù)據(jù)信號(hào)部分,用于使用該映射處理該過(guò)程語(yǔ)言代碼的至少一個(gè)片斷的數(shù)據(jù)信號(hào)部分,使用所處理的片斷創(chuàng)建第一數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)信號(hào)部分,用于根據(jù)第一數(shù)據(jù)結(jié)構(gòu)更改該中間代碼的數(shù)據(jù)信號(hào)部分,以及用于根據(jù)該更改的中間代碼創(chuàng)建具有一個(gè)對(duì)象類的面向?qū)ο蟪绦虻臄?shù)據(jù)信號(hào)部分。該計(jì)算機(jī)數(shù)據(jù)信號(hào)還可以包括用于在該過(guò)程語(yǔ)言代碼的預(yù)定片斷被檢測(cè)時(shí)暫停處理該過(guò)程語(yǔ)言代碼的一個(gè)片斷的數(shù)據(jù)信號(hào)部分,以及用于根據(jù)預(yù)定片斷更改其他中間代碼的數(shù)據(jù)信號(hào)部分。該計(jì)算機(jī)數(shù)據(jù)信號(hào)還可以包括用于根據(jù)該過(guò)程語(yǔ)言創(chuàng)建第二數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)信號(hào)部分,以及該第二數(shù)據(jù)結(jié)構(gòu)可以是具有識(shí)別該過(guò)程編程語(yǔ)言的語(yǔ)句的屬性的節(jié)點(diǎn)的層級(jí)樹(shù)。用于創(chuàng)建第一數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)信號(hào)部分可以包括用于根據(jù)所處理的片斷定位在該第二數(shù)據(jù)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn)的數(shù)據(jù)信號(hào)部分,用于遍歷該第二數(shù)據(jù)結(jié)構(gòu)中的節(jié)點(diǎn)直到一個(gè)根節(jié)點(diǎn)的數(shù)據(jù)信號(hào)部分,以及用于把所遍歷的節(jié)點(diǎn)的內(nèi)容包含在第一數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)信號(hào)部分。
本發(fā)明還涉及一種用于把具有過(guò)程語(yǔ)言代碼的過(guò)程語(yǔ)言轉(zhuǎn)換為一種面向?qū)ο蟪绦虻姆椒?,其中包括掃描該過(guò)程語(yǔ)言代碼和根據(jù)所掃描的過(guò)程語(yǔ)言代碼創(chuàng)建一個(gè)映射,把該映射和所掃描的過(guò)程語(yǔ)言代碼作為中間數(shù)據(jù)(metadata)存儲(chǔ)在一個(gè)存儲(chǔ)庫(kù)中,創(chuàng)建用于每個(gè)部件的所轉(zhuǎn)換表示的新目標(biāo)中間數(shù)據(jù)容器組,使用過(guò)程中間數(shù)據(jù)表示處理該過(guò)程語(yǔ)言代碼的至少一個(gè)片斷,以使用所處理的片斷創(chuàng)建第一抽象語(yǔ)法樹(shù),根據(jù)第一抽象語(yǔ)法樹(shù)增殖該目標(biāo)中間數(shù)據(jù)容器并且根據(jù)該第一抽象語(yǔ)法樹(shù)產(chǎn)生具有一個(gè)對(duì)象類的原始過(guò)程程序的面向?qū)ο蟮闹虚g數(shù)據(jù)表示。該方法進(jìn)一步包括用于在該過(guò)程語(yǔ)言代碼的預(yù)定片斷被檢測(cè)時(shí)暫停處理該過(guò)程語(yǔ)言代碼的一個(gè)片斷的步驟,以及根據(jù)預(yù)定片斷更改另一個(gè)抽象語(yǔ)法樹(shù)的步驟。該方法可以進(jìn)一步包括根據(jù)該過(guò)程語(yǔ)言創(chuàng)建第二抽象語(yǔ)法樹(shù)的步驟,其中第二抽象語(yǔ)法樹(shù)可以是具有識(shí)別該過(guò)程編程語(yǔ)言的語(yǔ)句的屬性的節(jié)點(diǎn)的抽象語(yǔ)法樹(shù)。創(chuàng)建第一抽象語(yǔ)法樹(shù)的步驟可以包括根據(jù)所處理的片斷定位在該第二抽象語(yǔ)法樹(shù)中的一個(gè)節(jié)點(diǎn)的步驟,用于遍歷該第二抽象語(yǔ)法樹(shù)中的節(jié)點(diǎn)直到一個(gè)根節(jié)點(diǎn)的步驟,以及把所遍歷的節(jié)點(diǎn)的內(nèi)容包含在第一抽象語(yǔ)法樹(shù)中的步驟。
從下文結(jié)合附圖的詳細(xì)描述中,可以更好地理解本發(fā)明以及其附加的許多優(yōu)點(diǎn),其中圖1示出能夠?qū)崿F(xiàn)本發(fā)明的方法和系統(tǒng)的計(jì)算機(jī)系統(tǒng)的一個(gè)例子;圖2示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的流程圖的例子;圖3示出根據(jù)本發(fā)明一個(gè)實(shí)施例的傳統(tǒng)語(yǔ)言語(yǔ)句語(yǔ)法樹(shù)的示意格式;圖4示出根據(jù)本發(fā)明一個(gè)實(shí)施例的抽象語(yǔ)法樹(shù)的一個(gè)示意格式;圖5示出根據(jù)本發(fā)明一個(gè)實(shí)施例的處理的流程圖;以及圖6示出被表達(dá)XML文檔的一個(gè)抽象語(yǔ)法樹(shù)的示意表示。
具體實(shí)施例方式
在圖中所示的本發(fā)明的所述優(yōu)選實(shí)施例中,為了清楚說(shuō)明的目的使用具體術(shù)語(yǔ)。但是,本發(fā)明不限于所選擇的具體術(shù)語(yǔ),并且應(yīng)當(dāng)知道每個(gè)具體部件包括可以用類似的方式工作的所有技術(shù)上的等效物。
圖1示出能夠?qū)崿F(xiàn)本發(fā)明的方法和系統(tǒng)的一種計(jì)算機(jī)系統(tǒng)的例子。本發(fā)明的系統(tǒng)和方法可以以在一個(gè)計(jì)算機(jī)系統(tǒng)上運(yùn)行的軟件應(yīng)用程序的形式來(lái)實(shí)現(xiàn),例如,該計(jì)算機(jī)系統(tǒng)例如大型機(jī)、個(gè)人計(jì)算機(jī)(PC)、手持計(jì)算機(jī)、服務(wù)器等等。該軟件應(yīng)用程序可以存儲(chǔ)在例如軟盤(pán)、光盤(pán)、硬盤(pán)等等這樣可以由該計(jì)算機(jī)系統(tǒng)所存取的一個(gè)記錄介質(zhì)上,或者可以遠(yuǎn)離該計(jì)算機(jī)系統(tǒng)并且通過(guò)到例如局域網(wǎng)或互聯(lián)網(wǎng)這樣的一個(gè)網(wǎng)絡(luò)的硬布線或無(wú)線連接而存取。
該計(jì)算機(jī)系統(tǒng)被總稱為系統(tǒng)100,并且可以包括中央處理單元(CPU)102、存儲(chǔ)器104,例如隨機(jī)存取存儲(chǔ)器(RAM)、打印機(jī)接口106、顯示單元108、(LAN)局域網(wǎng)數(shù)據(jù)傳送控制器110、LAN接口112、網(wǎng)絡(luò)控制器114、內(nèi)部總線116以及一個(gè)或多個(gè)輸入設(shè)備118,例如鍵盤(pán)、鼠標(biāo)等等。如圖所示,該系統(tǒng)100可以通過(guò)一個(gè)鏈路122連接到例如硬盤(pán)這樣的數(shù)據(jù)存儲(chǔ)設(shè)備120。
本發(fā)明的系統(tǒng)和方法執(zhí)行一個(gè)轉(zhuǎn)換,用于把傳統(tǒng)應(yīng)用程序轉(zhuǎn)換為現(xiàn)代的面向?qū)ο蟮氖褂脠D形用戶界面的N層級(jí)應(yīng)用程序。這可以包括用于分析該傳統(tǒng)應(yīng)用程序代碼、根據(jù)該傳統(tǒng)代碼創(chuàng)建類和它們的方法,以及根據(jù)該傳統(tǒng)代碼創(chuàng)建圖形用戶界面。在特定情況下,可能不希望轉(zhuǎn)換傳統(tǒng)代碼的一些片斷,其中該處理可以傳送該原始代碼或者可以替換新的代碼。
圖2示出根據(jù)本發(fā)明一個(gè)實(shí)施例的流程圖的例子。在一個(gè)實(shí)施例中,該轉(zhuǎn)換以采集處理140為開(kāi)始,其可能涉及發(fā)現(xiàn)142、分析144、配置146、GUI設(shè)計(jì)向?qū)?48、擴(kuò)展向?qū)?50、應(yīng)用程序分析報(bào)告152以及準(zhǔn)備154和收集該傳統(tǒng)軟件應(yīng)用程序所需的所有資源以及準(zhǔn)備轉(zhuǎn)換它們所需的步驟。一旦以中間格式存儲(chǔ)時(shí),該中間部件可以通過(guò)轉(zhuǎn)換處理156和轉(zhuǎn)換1-轉(zhuǎn)換4 158-164,其中該中間部件可以被處理,重新組織和增強(qiáng)。在該轉(zhuǎn)換處理過(guò)程中,該傳統(tǒng)中間部件被轉(zhuǎn)換為對(duì)象中間部件。最后,在再生處理166過(guò)程中,在該擴(kuò)展步驟168中,根據(jù)來(lái)自該采集處理140的結(jié)果構(gòu)建庫(kù),并且在再生步驟170中,該對(duì)象中間部件被以特定的面向?qū)ο笳Z(yǔ)言應(yīng)用為實(shí)際對(duì)象類。
把本發(fā)明的轉(zhuǎn)換系統(tǒng)分離為上述的多個(gè)處理提供本發(fā)明的幾個(gè)附加特征。第一特征是產(chǎn)生“從任何位置/到任何位置”的轉(zhuǎn)換。這是因?yàn)樵撝虚g部件可以由該轉(zhuǎn)換系統(tǒng)所定義。例如,為了轉(zhuǎn)換特定的傳統(tǒng)軟件應(yīng)用程序,可以提供能夠存儲(chǔ)該傳統(tǒng)部件的采集處理140作為在該庫(kù)中的中間部件。為了把一個(gè)傳統(tǒng)語(yǔ)言軟件應(yīng)用程序轉(zhuǎn)換為特定對(duì)象語(yǔ)言,還可以提供能夠用所需的對(duì)象語(yǔ)言從該對(duì)象中間部件創(chuàng)建對(duì)象類的轉(zhuǎn)換處理156和再生處理166。當(dāng)希望更改該轉(zhuǎn)換的結(jié)果時(shí),第二個(gè)特征是附加的新步驟可以被添加到轉(zhuǎn)換系統(tǒng)的處理。
例如,為了定制特定的轉(zhuǎn)換方法,可以在處理中添加“定制”步驟。這些定制步驟可以在執(zhí)行該轉(zhuǎn)換系統(tǒng)中的其他步驟之一后對(duì)任何或所有部件執(zhí)行改變。這種定制步驟可以被用于添加、刪除或更改部件。例如,希望從一個(gè)或多個(gè)窗體刪除一個(gè)特定的字段,把一個(gè)不同的字段或其他資源(例如一個(gè)圖標(biāo))添加到相應(yīng)的GUI,然后對(duì)相關(guān)的對(duì)象代碼進(jìn)行更改。由于這種基礎(chǔ)結(jié)構(gòu)可能存在許多其他特征。
根據(jù)本發(fā)明的另一個(gè)方法是可以從該傳統(tǒng)軟件應(yīng)用程序中的任何步驟或處理和以及任何部件重新開(kāi)始。例如,如果在任何處理部分過(guò)程中出現(xiàn)斷電,則該轉(zhuǎn)換系統(tǒng)和方法可以從在出現(xiàn)斷電時(shí)被處理的步驟和部件重新開(kāi)始。為了實(shí)現(xiàn)該特征,希望所選擇的存儲(chǔ)庫(kù)是一個(gè)永久的存儲(chǔ)設(shè)備(例如,數(shù)據(jù)存儲(chǔ)庫(kù))。
采集、轉(zhuǎn)換和再生處理的示意例子在下文中更加詳細(xì)地描述。
采集處理該采集處理140公開(kāi)一個(gè)轉(zhuǎn)換所需的資源,把它們存儲(chǔ)在該存儲(chǔ)庫(kù)中,準(zhǔn)備它們以及該轉(zhuǎn)換所需的任何其他中間部件。最好,該采集處理140具有報(bào)告在避免完全轉(zhuǎn)換的傳統(tǒng)軟件應(yīng)用程序中找到的任何缺陷的功能。這些缺陷通常是丟失的部件,例如源代碼或窗體定義。該采集處理140還可以提供用于使操作員輸入,其在該采集處理140遇到具有未知轉(zhuǎn)換或者該轉(zhuǎn)換系統(tǒng)還沒(méi)有被編程以執(zhí)行處理的傳統(tǒng)開(kāi)發(fā)環(huán)境的功能時(shí)被使用。這向操作員提供在該處理的剩余部分運(yùn)行之前糾正任何缺陷或者增強(qiáng)該轉(zhuǎn)換系統(tǒng)的機(jī)會(huì)。
下面的步驟是可以由該采集處理140所執(zhí)行的步驟的例子。每個(gè)所述的步驟可能用于或不用于特定的轉(zhuǎn)換方法。另外,每個(gè)轉(zhuǎn)換方法可以具有一組配置值,其更改由該處理所產(chǎn)生的輸出。例如,一個(gè)特定的配置值可以使得該所獲得部件根據(jù)特定模式而改名。每個(gè)配置值可以具有由操作員所超越的默認(rèn)設(shè)置。
發(fā)現(xiàn)該發(fā)現(xiàn)步驟142查詢?cè)搨鹘y(tǒng)軟件開(kāi)發(fā)環(huán)境并且開(kāi)發(fā)包含在一個(gè)特定應(yīng)用程序中的部件類別。該發(fā)現(xiàn)步驟可以根據(jù)在所掃描的計(jì)算機(jī)上出現(xiàn)的操作系統(tǒng)掃描特定邏輯存儲(chǔ)器,例如,物理存儲(chǔ)器塊和虛擬存儲(chǔ)頁(yè)。所掃描的部件可以包括但不限于源代碼、窗體定義、應(yīng)用程序結(jié)構(gòu)、任何相關(guān)的數(shù)據(jù)庫(kù)、窗體、框架、過(guò)程、記錄定義、全局變量、常數(shù)、主例程等等的規(guī)劃。這些部件可以被作為中間部件存儲(chǔ)在該存儲(chǔ)庫(kù)中。另外,對(duì)于源代碼部件,該源代碼可能被“標(biāo)記化”或者被分解為一串基本編程符號(hào)。然后,這些部件的副本被作為中間部件存儲(chǔ)在一個(gè)“存儲(chǔ)庫(kù)”中,這些部件可以被在該存儲(chǔ)庫(kù)重復(fù)檢索、更改和保存。該存儲(chǔ)庫(kù)可以是一個(gè)高速緩沖存儲(chǔ)器、文件系統(tǒng)、數(shù)據(jù)庫(kù)或者任何其他適當(dāng)?shù)男畔⒋鎯?chǔ)設(shè)備。
分析在該分析步驟144中,所有中間部件的信息被分析,并且對(duì)每個(gè)部件創(chuàng)建一個(gè)映射。該映射包含關(guān)于每個(gè)例程和在一個(gè)例程中的部分在該標(biāo)記流中開(kāi)始和停止的位置的信息。另外,關(guān)于每個(gè)部件的規(guī)格的可以被用于創(chuàng)建一個(gè)應(yīng)用程序分析報(bào)告152。
確認(rèn)在確認(rèn)過(guò)程中,產(chǎn)生在該傳統(tǒng)應(yīng)用程序中的所有部件。該交叉引用提供由一個(gè)部件所引用的每個(gè)部件(模塊、數(shù)據(jù)源、窗體等等)的列表。然后,該存儲(chǔ)庫(kù)被檢查,以保證該傳統(tǒng)環(huán)境的所有部件已經(jīng)被存儲(chǔ)在該存儲(chǔ)庫(kù)。如果,發(fā)現(xiàn)任何部件丟失,則該操作員被通知以克服該缺陷。該處理可以用不被引用的部件繼續(xù)執(zhí)行,但是引用它們的部件將不被完全轉(zhuǎn)換。
配置在配置步驟146過(guò)程中,來(lái)自分析步驟144的信息被用于建立初始配置。該配置被存儲(chǔ)在該中間部件中,其描述該傳統(tǒng)應(yīng)用程序本身。該中間部件控制轉(zhuǎn)換處理156。在確認(rèn)階段過(guò)程中,這些參數(shù)中的一些參數(shù)可以被更改。
GUI設(shè)計(jì)向?qū)г揋UI設(shè)計(jì)向?qū)?48向操作員提供通過(guò)超越其默認(rèn)標(biāo)準(zhǔn)而定制所獲得的圖形用戶界面的功能。該向?qū)?chuàng)建一個(gè)定制菜單欄,工具條和按鍵條定義被應(yīng)用于所有圖形形式,以在所獲得的應(yīng)用程序中提供一致的外觀和感覺(jué)。
擴(kuò)展向?qū)г摂U(kuò)展向?qū)?50向操作員提供指導(dǎo)該轉(zhuǎn)換處理156的機(jī)會(huì),以創(chuàng)建一個(gè)新的基礎(chǔ)類庫(kù)、業(yè)務(wù)對(duì)象庫(kù)和用于該應(yīng)用程序的前端庫(kù)。
應(yīng)用程序分析報(bào)告最好該應(yīng)用程序分析報(bào)告152是關(guān)于整個(gè)傳統(tǒng)基礎(chǔ)結(jié)構(gòu)的復(fù)雜報(bào)告,并且包括所有資源和詳細(xì)信息的交叉引用以及關(guān)于每個(gè)部件的規(guī)格。還可以提供上述問(wèn)題區(qū)域的列表。該規(guī)格包括在傳統(tǒng)應(yīng)用程序中的部件的種類和總數(shù)、源代碼的總行數(shù)、構(gòu)成每個(gè)模塊的例程數(shù)目和定義、由該應(yīng)用程序所提供的所有命令的編輯等等。
準(zhǔn)備在準(zhǔn)備步驟154過(guò)程中,用于轉(zhuǎn)換的所有附加目標(biāo)OO中間部件被在該存儲(chǔ)庫(kù)中創(chuàng)建。如果從該轉(zhuǎn)換處理的以前運(yùn)行中,該中間部件存在于該存儲(chǔ)庫(kù)中,則它們被破壞并且創(chuàng)建新的中間部件。
轉(zhuǎn)換處理該轉(zhuǎn)換處理156提供一種機(jī)制,通過(guò)該機(jī)制,現(xiàn)在存儲(chǔ)在存儲(chǔ)庫(kù)中的傳統(tǒng)中間部件被操縱以創(chuàng)建該對(duì)象中間部件。該轉(zhuǎn)換處理156執(zhí)行一種轉(zhuǎn)換,其中整個(gè)傳統(tǒng)應(yīng)用程序可以被在一個(gè)多級(jí)并行處理中轉(zhuǎn)換。在該轉(zhuǎn)換處理156中,任何特殊的來(lái)源語(yǔ)句(在代碼的例子中),或者窗體部分,或者該傳統(tǒng)軟件應(yīng)用程序的一個(gè)部件的任何其他部分可以潛在地觸發(fā)一個(gè)規(guī)則,其按照一些方式更改一個(gè)或多個(gè)部件(或過(guò)程)。例如,在一個(gè)“框架”(一個(gè)框架是需要用戶界面并且具有相關(guān)窗體的一個(gè)過(guò)程)的轉(zhuǎn)換過(guò)程中,該轉(zhuǎn)換處理156可能發(fā)現(xiàn)一個(gè)參數(shù)。該參數(shù)變?yōu)楸粍?chuàng)建以替換該框架的一個(gè)對(duì)象類的屬性。該框架的處理被暫停,該對(duì)象類被從存儲(chǔ)庫(kù)中提取,該屬性被添加到該對(duì)象類,該對(duì)象類被返回到該存儲(chǔ)庫(kù),并且重新開(kāi)始該來(lái)源的處理。類似地,在該框架的窗體定義處理中,如果在該窗體中遇到一個(gè)字段,一個(gè)屬性被按照類似的方式添加到相同的對(duì)象類中。在可能根據(jù)條件把代碼的整個(gè)塊從一個(gè)部件(或過(guò)程)移動(dòng)到另一個(gè)部件的處理中,存在許多其他更加復(fù)雜的業(yè)務(wù)處理。
為了促進(jìn)上述并行處理,應(yīng)當(dāng)提供具有管理來(lái)自該傳統(tǒng)軟件應(yīng)用程序、新應(yīng)用程序和中間應(yīng)用程序(或meta-application)的部件的中間表示的功能的暫時(shí)存儲(chǔ)設(shè)備。該中間應(yīng)用程序是方便的,因?yàn)樗皇且蕾囉谌魏翁厥廛浖_(kāi)發(fā)環(huán)境的特定應(yīng)用。其包含在任何這些環(huán)境中所找到的結(jié)構(gòu)。通過(guò)操縱“中間部件”,把傳統(tǒng)軟件應(yīng)用程序轉(zhuǎn)換為新的應(yīng)用程序的處理可以被分為三個(gè)不同的處理采集、轉(zhuǎn)換和再生。
下面將描述作為四種轉(zhuǎn)換的轉(zhuǎn)換處理156的實(shí)施例。
轉(zhuǎn)換1轉(zhuǎn)換1引擎158負(fù)責(zé)分解該傳統(tǒng)源代碼并且把它組織為一個(gè)可以容易操縱的結(jié)構(gòu)化格式。通過(guò)使用在分析步驟過(guò)程中創(chuàng)建的映射作為一個(gè)向?qū)?,分解用于該部件的源代碼。每個(gè)參數(shù)和變量聲明以及每個(gè)來(lái)源語(yǔ)句被分解、組織和轉(zhuǎn)換為一個(gè)內(nèi)部格式。這可以通過(guò)用一些方式來(lái)實(shí)現(xiàn)。一種方式是把用于一個(gè)部件的傳統(tǒng)源代碼分解為一個(gè)屬性樹(shù)數(shù)據(jù)結(jié)構(gòu)。一個(gè)屬性樹(shù)是為在該樹(shù)中的任何節(jié)點(diǎn)處的不限定數(shù)目的標(biāo)識(shí)符或?qū)傩缘拇鎯?chǔ)而提供的一個(gè)層級(jí)結(jié)構(gòu)。該分解使用幾個(gè)步驟來(lái)實(shí)現(xiàn)。
第一步驟是開(kāi)發(fā)一種采用層級(jí)屬性樹(shù)的形式的傳統(tǒng)編程語(yǔ)言的語(yǔ)法表示。在轉(zhuǎn)換之前,一個(gè)傳統(tǒng)編程語(yǔ)言語(yǔ)法(在圖3中示出它的一個(gè)例子)被創(chuàng)建,其表示傳統(tǒng)編程語(yǔ)言的特性。該傳統(tǒng)語(yǔ)言所支持的每個(gè)不同類型的語(yǔ)句被在該傳統(tǒng)語(yǔ)言中識(shí)別(例如,F(xiàn)OR-ENDFOR、CALL、PROMPT等等)。通過(guò)分組公共類型的語(yǔ)句而把該語(yǔ)句分組為一個(gè)層級(jí)結(jié)構(gòu)。例如,F(xiàn)OR-ENDFOR和WHILE-ENDWHILE被認(rèn)為是“循環(huán)控制”。對(duì)于該屬性樹(shù)創(chuàng)建單個(gè)根節(jié)點(diǎn)200。在該根節(jié)點(diǎn)200處,在對(duì)于所有語(yǔ)句共同的樹(shù)中創(chuàng)建屬性。例如,“行數(shù)”可以是對(duì)于所有語(yǔ)句共同的一個(gè)屬性。在根節(jié)點(diǎn)之下,分類節(jié)點(diǎn)202被在表示為上述語(yǔ)句而開(kāi)發(fā)的層級(jí)結(jié)構(gòu)的樹(shù)中創(chuàng)建。在每個(gè)分類節(jié)點(diǎn)202處,應(yīng)用對(duì)于這些語(yǔ)句共同的屬性。例如,“循環(huán)計(jì)數(shù)器”可以是所有循環(huán)控制的公共屬性。最后,在表示特定語(yǔ)句的適當(dāng)?shù)姆诸惞?jié)點(diǎn)202中創(chuàng)建語(yǔ)句節(jié)點(diǎn)204。為對(duì)于該語(yǔ)句唯一的節(jié)點(diǎn)創(chuàng)建屬性。在該方法中,以具有對(duì)于該語(yǔ)句唯一的默認(rèn)值的每個(gè)語(yǔ)句節(jié)點(diǎn)204處定義至少一個(gè)公共屬性語(yǔ)句類型。
在轉(zhuǎn)換1 158過(guò)程中,對(duì)于每個(gè)部件開(kāi)發(fā)被稱為抽象語(yǔ)法樹(shù)的另一種樹(shù)。一個(gè)抽象語(yǔ)法樹(shù)是被設(shè)計(jì)為包含完全分解的源代碼的層級(jí)屬性樹(shù)的專用版本。一個(gè)抽象語(yǔ)法樹(shù)的例子在圖4中示出。一個(gè)根節(jié)點(diǎn)250被創(chuàng)建,并且屬性在把該部件識(shí)別為一個(gè)整體的根節(jié)點(diǎn)250處定義。對(duì)于存在于該部件中的每個(gè)代碼塊創(chuàng)建例程節(jié)點(diǎn)252。如果對(duì)再生處理166(在下文中討論)提供優(yōu)點(diǎn),則可以創(chuàng)建保存不同類型的代碼塊的分類節(jié)點(diǎn)(未示出)。每個(gè)例程節(jié)點(diǎn)252具有被定義的參數(shù),其表示該例程。在該例程節(jié)點(diǎn)252之下創(chuàng)建部分節(jié)點(diǎn)254、256和258,并且表示該例程的不同部分。隨后的三個(gè)部分類型一般為參數(shù)節(jié)點(diǎn)254、本地變量節(jié)點(diǎn)256和語(yǔ)句節(jié)點(diǎn)258。
該轉(zhuǎn)換1 158還使用在采集處理140的分析步驟144過(guò)程中創(chuàng)建的映射。該映射包含關(guān)于每個(gè)例程和一個(gè)例程中的部分在該標(biāo)記流中開(kāi)始和停止的位置的信息。以在用于該代碼的參數(shù)部分的第一標(biāo)記為開(kāi)始,轉(zhuǎn)換1 158處理標(biāo)記,直到發(fā)現(xiàn)一個(gè)完整的說(shuō)明語(yǔ)句。它然后把一個(gè)聲明節(jié)點(diǎn)260添加到該參數(shù)部分節(jié)點(diǎn)254。在該節(jié)點(diǎn)處,定義完全確定義被聲明為一個(gè)參數(shù)的變量的屬性。對(duì)本地變量和語(yǔ)句部分重復(fù)該處理。一旦轉(zhuǎn)換1 158識(shí)別該語(yǔ)句類型時(shí),它定位在表示該語(yǔ)句的圖3中所示的傳統(tǒng)語(yǔ)言語(yǔ)法中的節(jié)點(diǎn)。它遍歷該樹(shù),復(fù)制確定該語(yǔ)句的所有屬性或者任何分類節(jié)點(diǎn)的屬性,直到并且包含根節(jié)點(diǎn)。這些屬性然后在該部件屬性樹(shù)的語(yǔ)句節(jié)點(diǎn)中定義。然后轉(zhuǎn)換1 158分析該語(yǔ)句,并且用在該語(yǔ)句中找到的確切數(shù)值來(lái)代替每個(gè)屬性的默認(rèn)值。
另外,轉(zhuǎn)換1 158保持在語(yǔ)句之間的關(guān)系。例如,在FOR語(yǔ)句之后和在相應(yīng)的ENDFOR之前的任何語(yǔ)句將被創(chuàng)建為該FOR語(yǔ)句節(jié)點(diǎn)的一個(gè)子節(jié)點(diǎn)。該嵌套可以繼續(xù)直到所需的深度。按照這種方式嵌套代碼容易在轉(zhuǎn)換的過(guò)程中把整個(gè)代碼塊向后移動(dòng)。一旦該處理被完成,一個(gè)完整有組織的傳統(tǒng)源代碼的版本已經(jīng)被創(chuàng)建,并且現(xiàn)在可以被作用。被表達(dá)為一個(gè)XML文檔的抽象語(yǔ)法樹(shù)的示意例子在圖6中示出。
轉(zhuǎn)換2轉(zhuǎn)換2引擎160負(fù)責(zé)把傳統(tǒng)窗體轉(zhuǎn)換為可以在再生過(guò)程中用于創(chuàng)建一個(gè)圖形界面的對(duì)象中間部件。這可以用類似于該傳統(tǒng)源代碼在轉(zhuǎn)換1158中操縱的方式來(lái)實(shí)現(xiàn)。該處理使用兩個(gè)參考屬性樹(shù)、一個(gè)圖形界面窗體模板樹(shù)以及一個(gè)OO類層級(jí)樹(shù)。
該圖形界面窗體模板樹(shù)包含一個(gè)空白的圖形界面窗體的表示。用于該窗體的根節(jié)點(diǎn)包含該窗體的基本特性的描述。該屬性樹(shù)將包含三個(gè)根節(jié)點(diǎn)。第一根節(jié)點(diǎn)將包含描述“窗口”的屬性。一個(gè)窗口是用于在圖形用戶界面上顯示信息的區(qū)域。該第二根節(jié)點(diǎn)包含用于該菜單欄的占位符。一個(gè)菜單欄是通常置于一個(gè)窗口的頂部的特定區(qū)域,其使得用戶從一系列命令中選擇。該第三根節(jié)點(diǎn)包含子節(jié)點(diǎn),其描述該窗口自身的內(nèi)容。為了創(chuàng)建一個(gè)更加有效的處理,應(yīng)當(dāng)在該屬性樹(shù)中提供用于該窗口內(nèi)容的默認(rèn)配置。OO類層級(jí)樹(shù)描述面向目標(biāo)對(duì)象的軟件開(kāi)發(fā)環(huán)境的類層級(jí)結(jié)構(gòu)。該屬性樹(shù)基本上類似于傳統(tǒng)語(yǔ)言語(yǔ)法而創(chuàng)建。每個(gè)OO模型軟件開(kāi)發(fā)環(huán)境具有一個(gè)“系統(tǒng)”或建造類層級(jí)結(jié)構(gòu)。該類層級(jí)結(jié)構(gòu)定義構(gòu)成該開(kāi)發(fā)環(huán)境的基本類對(duì)象。通過(guò)采用描述在該層級(jí)結(jié)構(gòu)中的每個(gè)類的每個(gè)屬性的一個(gè)屬性樹(shù)而創(chuàng)建該OO類層級(jí)樹(shù)。
參見(jiàn)圖5,轉(zhuǎn)換2 160從表示一個(gè)傳統(tǒng)窗體的庫(kù)中提取一個(gè)中間部件(步驟S350)。創(chuàng)建一個(gè)新的屬性樹(shù),其表示用于該傳統(tǒng)窗體的圖形界面窗體替換(步驟S352)。這通過(guò)首先復(fù)制圖形界面窗體模板而實(shí)現(xiàn)。轉(zhuǎn)換2 160掃描該中間部件(步驟S354),并且如果被掃描的代碼不是一個(gè)命名的數(shù)據(jù)項(xiàng)目字段(否,步驟S356),然后,對(duì)于在該傳統(tǒng)字符窗體(字段、點(diǎn)綴等等)上的每個(gè)項(xiàng)目,轉(zhuǎn)換2 160確定哪一個(gè)替換對(duì)象將置于該圖形窗體上(步驟S358)。一旦執(zhí)行該判斷,則該處理可以查找在該OO類層級(jí)樹(shù)中的對(duì)象類,以及通過(guò)遍歷該樹(shù)直到根節(jié)點(diǎn)并且沿途收集屬性而收集所有它的屬性(步驟S360)。然后,在該抽象語(yǔ)法樹(shù)的窗體部分中創(chuàng)建一個(gè)字段節(jié)點(diǎn),并且所復(fù)制的屬性被在該節(jié)點(diǎn)處定義,由從該傳統(tǒng)窗體中讀取的數(shù)值代替該默認(rèn)值(步驟S362)。一旦在該傳統(tǒng)窗體上的所有項(xiàng)目已經(jīng)被處理,剩下的是一個(gè)圖形界面的完整描述。
在該圖形界面的創(chuàng)建過(guò)程中可以實(shí)現(xiàn)兩個(gè)其他處理。首先,當(dāng)在該傳統(tǒng)窗體上遇到一個(gè)被命名的數(shù)據(jù)項(xiàng)字段時(shí)(是,步驟S356),則該窗體的處理被暫停(步驟S364),然后提取用于將取代與該窗體相關(guān)的源代碼的對(duì)象類的中間部件,并且把一個(gè)屬性添加到與該字段的定義相匹配的對(duì)象(步驟S366)。執(zhí)行該操作是因?yàn)樵谠S多傳統(tǒng)軟件開(kāi)發(fā)環(huán)境中,關(guān)于窗體的字段是在該窗體的源代碼中暗示地聲明的變量。在OO模型中,它們變?yōu)閷?duì)象的聲明屬性。其次,在處理傳統(tǒng)窗體之后,該處理掃描在用于該窗體的源代碼的轉(zhuǎn)換1 158中創(chuàng)建的抽象語(yǔ)法樹(shù)。具體來(lái)說(shuō),該處理在該傳統(tǒng)源代碼中查找用戶命令。如果找到任何用戶命令,則可以在基于來(lái)自GUI設(shè)計(jì)向?qū)У妮斎朐谠搱D形用戶界面屬性樹(shù)上創(chuàng)建幾個(gè)GUI控制(按鍵、工具條圖標(biāo)、或者菜單欄命令)之一。然后,一個(gè)或多個(gè)“事件”被添加到該抽象語(yǔ)法樹(shù),其表示用于該窗體的新代碼邏輯。這些添加的“事件”將把新的GUI窗體控制與在與該傳統(tǒng)應(yīng)用程序中的菜單命令相關(guān)的邏輯的轉(zhuǎn)換表示的對(duì)象類中創(chuàng)建。
轉(zhuǎn)換3在轉(zhuǎn)換3 162中,用于每個(gè)傳統(tǒng)源代碼部件的抽象語(yǔ)法樹(shù)被從該庫(kù)中提取。該相應(yīng)的對(duì)象中間部件也被提取。對(duì)于在該抽象語(yǔ)法樹(shù)中的每個(gè)例程節(jié)點(diǎn),在該對(duì)象中間部件中創(chuàng)建一個(gè)“方法”節(jié)點(diǎn)。一個(gè)方法是可以作用于該對(duì)象的一個(gè)對(duì)象中的源代碼。轉(zhuǎn)換3 162首先取該例程的任何參數(shù),并且把它們聲明為該方法的參數(shù)。
對(duì)本地變量執(zhí)行相同的操作。該語(yǔ)句然后被處理。對(duì)于每個(gè)傳統(tǒng)語(yǔ)句類型,轉(zhuǎn)換3 162確定如何轉(zhuǎn)換該語(yǔ)句以及把它置于何處。在許多情況中,該引擎可以確定把整個(gè)例程或者一個(gè)例程的子集移動(dòng)到一個(gè)完全不同的對(duì)象。這在該傳統(tǒng)軟件開(kāi)發(fā)語(yǔ)言的一個(gè)特征不容易轉(zhuǎn)換到新的軟件開(kāi)發(fā)環(huán)境時(shí)出現(xiàn)這種情況。
轉(zhuǎn)換3 162的另一個(gè)部分是把該傳統(tǒng)軟件應(yīng)用程序的過(guò)程環(huán)境轉(zhuǎn)換為一個(gè)對(duì)象環(huán)境。這具有兩個(gè)方面。首先,在一個(gè)處理環(huán)境中,一個(gè)部件通過(guò)“調(diào)用”而激活另一個(gè)部件。在OO模型中,不是調(diào)用一個(gè)過(guò)程,而是創(chuàng)建一個(gè)對(duì)象的實(shí)例(或者副本),并且激活它的一個(gè)方法。無(wú)論何時(shí)轉(zhuǎn)換3 162遇到一些傳統(tǒng)調(diào)用語(yǔ)句時(shí),它暫停處理,提取定義被調(diào)用的對(duì)象的對(duì)象中間部件,并且確認(rèn)用于該調(diào)用的參數(shù)。在一些例子中,該對(duì)象可能需要調(diào)節(jié)。然后,在該調(diào)用部件中,該調(diào)用語(yǔ)句被幾個(gè)不同的語(yǔ)句所代替。第一語(yǔ)句是對(duì)象請(qǐng)示代理軟件(ORB)。一個(gè)ORB是一個(gè)特殊的對(duì)象,其工作是根據(jù)一個(gè)請(qǐng)求管理其他對(duì)象的創(chuàng)建。下一個(gè)被添加的語(yǔ)句是對(duì)“激活”或啟動(dòng)該對(duì)象處理的所有轉(zhuǎn)換的部件共同的特殊方法的調(diào)用。
從一個(gè)過(guò)程到一個(gè)對(duì)象環(huán)境的轉(zhuǎn)換的第二方面是過(guò)程軟件開(kāi)發(fā)工具和OO軟件開(kāi)發(fā)工具之間的語(yǔ)法差別。在該語(yǔ)句的處理過(guò)程中,每個(gè)標(biāo)記被檢查,以察看它是否是引用已經(jīng)被轉(zhuǎn)換為該類的一個(gè)屬性的變量。如果為是,則對(duì)該來(lái)源進(jìn)行適當(dāng)?shù)母淖?,使得適當(dāng)?shù)淖兞勘灰谩?br>
轉(zhuǎn)換4轉(zhuǎn)換4 164是本實(shí)施例中的轉(zhuǎn)換。這涉及清除可能保留但是可能不被與在轉(zhuǎn)換3 162中執(zhí)行的所有處理并行的解決的各種小問(wèn)題。
再生處理該再生處理166是采集處理140的逆轉(zhuǎn)。在再生處理166過(guò)程中,在該轉(zhuǎn)換處理156過(guò)程中創(chuàng)建的對(duì)象中間部件被用于創(chuàng)建置于新的軟件開(kāi)發(fā)環(huán)境中的實(shí)際對(duì)象類。另外,新的圖形界面窗體和任何其他必要部件被創(chuàng)建并且置于新的軟件開(kāi)發(fā)環(huán)境中。
擴(kuò)展該擴(kuò)展步驟168構(gòu)造在采集處理140過(guò)程中由擴(kuò)展向?qū)付ǖ男碌幕A(chǔ)類庫(kù)、業(yè)務(wù)對(duì)象庫(kù)和前端部件庫(kù)。
再生在再生步驟170中,實(shí)際對(duì)象類和GUI窗體被從根據(jù)所包含的標(biāo)準(zhǔn)從對(duì)象中間部件中產(chǎn)生。
在上述思想的指導(dǎo)下,本發(fā)明有各種其他變型和更改。因此,應(yīng)當(dāng)知道在所附權(quán)利要求的范圍內(nèi),可以用除了在此所述實(shí)施例之外的方式來(lái)實(shí)現(xiàn)本發(fā)明。
權(quán)利要求
1.一種用于把具有過(guò)程語(yǔ)言代碼的過(guò)程程序轉(zhuǎn)換為一個(gè)面向?qū)ο蟮某绦虻姆椒ǎ渲邪⊕呙柙撨^(guò)程語(yǔ)言代碼并且根據(jù)所掃描的過(guò)程語(yǔ)言代碼創(chuàng)建一個(gè)映射;把所掃描的過(guò)程語(yǔ)言代碼存儲(chǔ)為中間代碼;使用該映射處理該過(guò)程語(yǔ)言代碼的至少一個(gè)片斷;使用所處理的片斷創(chuàng)建第一數(shù)據(jù)結(jié)構(gòu);根據(jù)該第一數(shù)據(jù)結(jié)構(gòu)更改該中間代碼;以及根據(jù)更改的中間代碼創(chuàng)建具有一個(gè)對(duì)象類的面向?qū)ο蟪绦颉?br>
2.根據(jù)權(quán)利要求1所述的方法,其中進(jìn)一步包括當(dāng)檢測(cè)到該過(guò)程語(yǔ)言代碼的預(yù)定片斷時(shí)暫停處理該過(guò)程語(yǔ)言代碼的步驟;以及根據(jù)預(yù)定片斷更改其他中間代碼。
3.根據(jù)權(quán)利要求1所述的方法,其中進(jìn)一步包括根據(jù)該過(guò)程語(yǔ)言創(chuàng)建第二數(shù)據(jù)結(jié)構(gòu),其中該第二數(shù)據(jù)結(jié)構(gòu)是具有識(shí)別該過(guò)程編程語(yǔ)言的語(yǔ)句的屬性的一個(gè)節(jié)點(diǎn)的一個(gè)層級(jí)樹(shù)。
4.根據(jù)權(quán)利要求3所述的方法,其中進(jìn)一步包括創(chuàng)建第一數(shù)據(jù)結(jié)構(gòu)的步驟包括根據(jù)所處理的片斷定位在第二數(shù)據(jù)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn),遍歷第二數(shù)據(jù)結(jié)構(gòu)中的節(jié)點(diǎn)直到根節(jié)點(diǎn),并且把所遍歷節(jié)點(diǎn)的內(nèi)容包含在第一數(shù)據(jù)結(jié)構(gòu)中。
5.一種包括用于把具有過(guò)程語(yǔ)言代碼的過(guò)程程序轉(zhuǎn)換為面向?qū)ο蟪绦虻挠?jì)算機(jī)可執(zhí)行代碼的存儲(chǔ)介質(zhì),包括用于掃描該過(guò)程語(yǔ)言代碼和根據(jù)所掃描的過(guò)程語(yǔ)言代碼創(chuàng)建一個(gè)映射的代碼;用于把所掃描的過(guò)程語(yǔ)言代碼存儲(chǔ)為中間代碼的代碼;用于使用該映射處理該過(guò)程語(yǔ)言代碼的至少一個(gè)片斷的代碼;使用所處理的片斷創(chuàng)建第一數(shù)據(jù)結(jié)構(gòu)的代碼;用于根據(jù)第一數(shù)據(jù)結(jié)構(gòu)更改該中間代碼的代碼;以及用于根據(jù)該更改的中間代碼創(chuàng)建具有一個(gè)對(duì)象類的面向?qū)ο蟪绦虻拇a。
6.根據(jù)權(quán)利要求5所述的存儲(chǔ)介質(zhì),其中進(jìn)一步包括用于在該過(guò)程語(yǔ)言代碼的預(yù)定片斷被檢測(cè)時(shí)暫停處理該過(guò)程語(yǔ)言代碼的一個(gè)片斷的代碼;以及用于根據(jù)預(yù)定片斷更改其他中間代碼的代碼。
7.根據(jù)權(quán)利要求5所述的存儲(chǔ)介質(zhì),其中進(jìn)一步包括用于根據(jù)該過(guò)程語(yǔ)言創(chuàng)建第二數(shù)據(jù)結(jié)構(gòu)的代碼,其中該第二數(shù)據(jù)結(jié)構(gòu)是具有識(shí)別該過(guò)程編程語(yǔ)言的語(yǔ)句的屬性的一個(gè)節(jié)點(diǎn)的層級(jí)樹(shù)。
8.根據(jù)權(quán)利要求7所述的存儲(chǔ)介質(zhì),其中進(jìn)一步包括用于創(chuàng)建第一數(shù)據(jù)結(jié)構(gòu)的代碼包括用于根據(jù)所處理的片斷定位在該第二數(shù)據(jù)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn)的代碼,用于遍歷該第二數(shù)據(jù)結(jié)構(gòu)中的節(jié)點(diǎn)直到一個(gè)根節(jié)點(diǎn)的代碼,以及用于把所遍歷的節(jié)點(diǎn)的內(nèi)容包含在第一數(shù)據(jù)結(jié)構(gòu)中的代碼。
9.一種在傳送介質(zhì)中體現(xiàn)并且包括用于把具有過(guò)程語(yǔ)言代碼的過(guò)程程序轉(zhuǎn)換為一種面向?qū)ο蟪绦虻挠?jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)數(shù)據(jù)信號(hào),其中包括用于掃描該過(guò)程語(yǔ)言代碼和根據(jù)所掃描的過(guò)程語(yǔ)言代碼創(chuàng)建一個(gè)映射的數(shù)據(jù)信號(hào)部分;用于把所掃描的過(guò)程語(yǔ)言代碼存儲(chǔ)為中間代碼的數(shù)據(jù)信號(hào)部分;用于使用該映射處理該過(guò)程語(yǔ)言代碼的至少一個(gè)片斷的數(shù)據(jù)信號(hào)部分;使用所處理的片斷創(chuàng)建第一數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)信號(hào)部分;用于根據(jù)第一數(shù)據(jù)結(jié)構(gòu)更改該中間代碼的數(shù)據(jù)信號(hào)部分;以及用于根據(jù)該更改的中間代碼創(chuàng)建具有一個(gè)對(duì)象類的面向?qū)ο蟪绦虻臄?shù)據(jù)信號(hào)部分。
10.根據(jù)權(quán)利要求9所述的計(jì)算機(jī)數(shù)據(jù)信號(hào),其中進(jìn)一步包括用于在該過(guò)程語(yǔ)言代碼的預(yù)定片斷被檢測(cè)時(shí)暫停處理該過(guò)程語(yǔ)言代碼的一個(gè)片斷的數(shù)據(jù)信號(hào)部分;以及用于根據(jù)預(yù)定片斷更改其他中間代碼的數(shù)據(jù)信號(hào)部分。
11.根據(jù)權(quán)利要求9所述的計(jì)算機(jī)數(shù)據(jù)信號(hào),其中進(jìn)一步包括用于根據(jù)該過(guò)程語(yǔ)言創(chuàng)建第二數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)信號(hào),其中該第二數(shù)據(jù)結(jié)構(gòu)是具有識(shí)別該過(guò)程編程語(yǔ)言的語(yǔ)句的屬性的一個(gè)節(jié)點(diǎn)的層級(jí)樹(shù)。
12.根據(jù)權(quán)利要求11所述的計(jì)算機(jī)數(shù)據(jù)信號(hào),其中用于創(chuàng)建第一數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)信號(hào)部分包括用于根據(jù)所處理的片斷定位在該第二數(shù)據(jù)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn)的數(shù)據(jù)信號(hào)部分,用于遍歷該第二數(shù)據(jù)結(jié)構(gòu)中的節(jié)點(diǎn)直到一個(gè)根節(jié)點(diǎn)的數(shù)據(jù)信號(hào)部分,以及用于把所遍歷的節(jié)點(diǎn)的內(nèi)容包含在第一數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)信號(hào)部分。
13.一種用于把具有過(guò)程語(yǔ)言代碼的過(guò)程語(yǔ)言轉(zhuǎn)換為一種面向?qū)ο蟪绦虻姆椒?,其中包括掃描該過(guò)程語(yǔ)言代碼和根據(jù)所掃描的過(guò)程語(yǔ)言代碼創(chuàng)建一個(gè)映射;把該映射和所掃描的過(guò)程語(yǔ)言代碼作為中間數(shù)據(jù)存儲(chǔ)在一個(gè)存儲(chǔ)庫(kù)中;創(chuàng)建用于每個(gè)部件的所轉(zhuǎn)換表示的新目標(biāo)中間數(shù)據(jù)容器組;使用過(guò)程中間數(shù)據(jù)表示處理該過(guò)程語(yǔ)言代碼的至少一個(gè)片斷,以使用所處理的片斷創(chuàng)建第一抽象語(yǔ)法樹(shù);根據(jù)第一抽象語(yǔ)法樹(shù)增殖該目標(biāo)中間數(shù)據(jù)容器;以及根據(jù)該第一抽象語(yǔ)法樹(shù)產(chǎn)生具有一個(gè)對(duì)象類的原始過(guò)程程序的面向?qū)ο蟮闹虚g數(shù)據(jù)表示。
14.根據(jù)權(quán)利要求13所述的方法,其中進(jìn)一步包括用于在該過(guò)程語(yǔ)言代碼的預(yù)定片斷被檢測(cè)時(shí)暫停處理該過(guò)程語(yǔ)言代碼的一個(gè)片斷的步驟;以及根據(jù)預(yù)定片斷更改另一個(gè)抽象語(yǔ)法樹(shù)的步驟。
15.根據(jù)權(quán)利要求13所述的方法,其中進(jìn)一步包括根據(jù)該過(guò)程語(yǔ)言創(chuàng)建第二抽象語(yǔ)法樹(shù)的步驟,其中第二抽象語(yǔ)法樹(shù)是具有識(shí)別該過(guò)程編程語(yǔ)言的語(yǔ)句的屬性的節(jié)點(diǎn)的抽象語(yǔ)法樹(shù)。
16.根據(jù)權(quán)利要求15所述的方法,其中創(chuàng)建第一抽象語(yǔ)法樹(shù)的步驟包括根據(jù)所處理的片斷定位在該第二抽象語(yǔ)法樹(shù)中的一個(gè)節(jié)點(diǎn),遍歷該第二抽象語(yǔ)法樹(shù)中的節(jié)點(diǎn)直到一個(gè)根節(jié)點(diǎn),以及把所遍歷的節(jié)點(diǎn)的內(nèi)容包含在第一抽象語(yǔ)法樹(shù)中。
全文摘要
一種用于把具有過(guò)程語(yǔ)言代碼的過(guò)程程序轉(zhuǎn)換為一個(gè)面向?qū)ο蟮某绦虻南到y(tǒng)和方法,其中包括掃描該過(guò)程語(yǔ)言代碼并且根據(jù)所掃描的過(guò)程語(yǔ)言代碼創(chuàng)建一個(gè)映射;把所掃描的過(guò)程語(yǔ)言代碼存儲(chǔ)為中間代碼;使用該映射處理該過(guò)程語(yǔ)言代碼的至少一個(gè)片斷;使用所處理的片斷創(chuàng)建第一數(shù)據(jù)結(jié)構(gòu);根據(jù)該第一數(shù)據(jù)結(jié)構(gòu)更改該中間代碼;以及根據(jù)更改的中間代碼創(chuàng)建具有一個(gè)對(duì)象類的面向?qū)ο蟪绦颉?br>
文檔編號(hào)G06F9/45GK1509433SQ02809740
公開(kāi)日2004年6月30日 申請(qǐng)日期2002年5月10日 優(yōu)先權(quán)日2001年5月11日
發(fā)明者戴維·通德?tīng)枈W, 約翰·邁霍尼, 戴維 通德?tīng)枈W, 邁霍尼 申請(qǐng)人:計(jì)算機(jī)聯(lián)合思想公司