專利名稱:一種內(nèi)嵌Python解釋器實(shí)現(xiàn)軟件系統(tǒng)二次開發(fā)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件系統(tǒng)二次開發(fā)方法領(lǐng)域,特別涉及一種軟件系統(tǒng)對(duì)外提供二次開發(fā)的實(shí)現(xiàn)方法。
背景技術(shù):
行業(yè)通用軟件系統(tǒng)對(duì)外提供二次開發(fā)的實(shí)現(xiàn)技術(shù),是行業(yè)通用軟件系統(tǒng)能夠立足在復(fù)雜的應(yīng)用環(huán)境中的有效途徑。因?yàn)樾袠I(yè)內(nèi)各個(gè)企業(yè)的實(shí)際情況不同,行業(yè)通用的信息管理系統(tǒng)、輔助設(shè)計(jì)系統(tǒng)等無法完全符合各個(gè)使用單位的實(shí)際需求,如在造船行業(yè),雖然多數(shù)造船公司整體生產(chǎn)管理流程一致,但流程上、標(biāo)準(zhǔn)上的細(xì)節(jié)差終究無法避免。所以,通用系統(tǒng)對(duì)外提供二次開發(fā)的實(shí)現(xiàn)技術(shù),是使行業(yè)通用軟件系統(tǒng)能夠立足的有效途徑。
目前,較多的信息管理軟件、輔助設(shè)計(jì)軟件均采用通過編寫固定流程下的插件的方式對(duì)外提供二次開發(fā),用戶通過編寫符合一定接口標(biāo)準(zhǔn)的插件,在滿足設(shè)計(jì)初衷大流程的前提條件下,將自身的需求嵌入到通用系統(tǒng)中,從而實(shí)現(xiàn)自身的定制性需求。如申請(qǐng)專利號(hào)為CN200510098550. 2的用于二次開發(fā)平臺(tái)的基于控件的插件管理系統(tǒng)及方法,它首先根據(jù)控件的標(biāo)準(zhǔn)接口,提供一個(gè)與所述控件的通訊連接與事件響應(yīng)相符合的接口協(xié)議;然后遵照所述接口協(xié)議,提供至少一個(gè)具有外部自定義功能的插件;在所述控件中維護(hù)有一個(gè)插件鏈,當(dāng)應(yīng)用程序啟動(dòng)時(shí),由控件調(diào)用所述接口協(xié)議,將所述插件加載入插件鏈中。此種方式雖然較為簡單方便,但是可擴(kuò)展的約束太大,設(shè)計(jì)初衷的流程將限制用戶的二次開發(fā)范圍,用戶只能在固定流程前提下進(jìn)行二次開發(fā),無法靈活拓展,適應(yīng)性較差。另外,插件式的開發(fā)對(duì)用戶二次開發(fā)所采用的程序語言有一定限制,如.Net平臺(tái)的軟件產(chǎn)品,其插件通常情況下要求是同平臺(tái)語言編寫的,如此則抬高了用戶的二次開發(fā)資金成本。
發(fā)明內(nèi)容
針對(duì)目前多數(shù)軟件系統(tǒng)沒有提供二次開發(fā)接口或僅通過固定流程下插件式的傳統(tǒng)二次開發(fā)方法無法適應(yīng)用戶特定流程需求的現(xiàn)狀,本發(fā)明提出一種內(nèi)嵌Python解釋器實(shí)現(xiàn)軟件系統(tǒng)二次開發(fā)的方法,使通用軟件系統(tǒng)對(duì)外提供基礎(chǔ)的API接口,用戶利用基礎(chǔ)的API接口和免費(fèi)的Python語言進(jìn)行二次開發(fā),依據(jù)實(shí)際需求進(jìn)行流程組合,靈活擴(kuò)展通用軟件系統(tǒng)的功能。本發(fā)明為解決上述技術(shù)問題采用的技術(shù)方案是內(nèi)嵌Python解釋器實(shí)現(xiàn)軟件系統(tǒng)對(duì)外提供二次開發(fā),具體方法如下步驟1,歸納和抽象系統(tǒng)軟件所需要對(duì)外提供的對(duì)象和方法,這些對(duì)象和方法,是提供給用戶二次開發(fā)的基本元素;步驟2,為系統(tǒng)主程序配置鏈接Python解釋器;進(jìn)一步地,Python解釋器版本的選擇可以依據(jù)用戶實(shí)現(xiàn)系統(tǒng)的編程語言,C/C++程序鏈接CPython解釋器,.Net平臺(tái)語言鏈接IronPython解釋器,JAVA語言鏈接Jython解釋器;步驟3,在Python環(huán)境下,為步驟I歸納出的對(duì)象和方法在系統(tǒng)主程序中編寫實(shí)現(xiàn)原型,該原型屬于系統(tǒng)對(duì)外提供的二次開發(fā)框架的基礎(chǔ)元素,相互之間并無流程關(guān)系;步驟4,為步驟3中實(shí)現(xiàn)的對(duì)象、方法定義函數(shù)內(nèi)外接口,并編寫相關(guān)的接口說明文檔,該接口說明文檔是上述基礎(chǔ)元素的接口功能、規(guī)格說明;步驟5,用戶依據(jù)接口說明文檔,以相應(yīng)版本的Python腳本使用各個(gè)接口并融合入自身所需的流程、邏輯,實(shí)現(xiàn)自身二次開發(fā)的實(shí)際需求。本發(fā)明采用以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下技術(shù)效果I、系統(tǒng)在進(jìn)行二次開發(fā)設(shè)計(jì)時(shí),只需進(jìn)行基礎(chǔ)對(duì)象、方法功能的歸納總結(jié),不必進(jìn)行通用流程、業(yè)務(wù)邏輯的設(shè)計(jì);2、主系統(tǒng)在鏈接Python解析器之時(shí),可以依據(jù)系統(tǒng)主體的程序語言,選擇相應(yīng)版 本的Python語言解析器進(jìn)行鏈接,C/C++程序鏈接CPython解釋器,.Net平臺(tái)語言鏈接IronPython解釋器,JAVA語言鏈接Jython解釋器,對(duì)于非主流語言可以通過COM技術(shù)對(duì)合適的Python解析器進(jìn)行包裝后再行鏈接;3、系統(tǒng)提供的二次開發(fā)接口說明文檔,只需對(duì)接口規(guī)格進(jìn)行說明,不必對(duì)任何流程性、業(yè)務(wù)邏輯進(jìn)行說明,可讀性、可理解性較高;4、用戶編寫的Python腳本,均可免費(fèi)進(jìn)行,不需要任何二次開發(fā)語言工具的費(fèi)用開銷。5、用戶編寫的Python腳本,可以自由控制、搭建自身的實(shí)際流程,靈活性很高。
圖I所示為內(nèi)嵌Python解釋器實(shí)現(xiàn)軟件系統(tǒng)二次開發(fā)方法的技術(shù)原理圖;圖2所示為內(nèi)嵌Python解釋器實(shí)現(xiàn)軟件系統(tǒng)二次開發(fā)方法的流程圖。
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步的說明圖I所示為內(nèi)嵌Python解釋器實(shí)現(xiàn)軟件系統(tǒng)二次開發(fā)方法的技術(shù)原理圖,本發(fā)明將軟件系統(tǒng)主程序連接相應(yīng)版本的Python的解釋器,通過Python解釋器提供內(nèi)嵌的Python環(huán)境,在解釋器所提供的環(huán)境中,主程序中對(duì)需要對(duì)外提供的對(duì)象及方法進(jìn)行函數(shù)原型的構(gòu)造、代碼實(shí)現(xiàn),并編寫接口說明文檔,用戶通過接口說明文檔,融合自身的實(shí)際業(yè)務(wù)邏輯、流程需求,以相應(yīng)版本的Python腳本調(diào)用系統(tǒng)提供的接口,將自身靈活多變的實(shí)際業(yè)務(wù)邏輯、流程需求融入到系統(tǒng)中。 圖2所示為內(nèi)嵌Python解釋器實(shí)現(xiàn)軟件系統(tǒng)二次開發(fā)方法的流程圖,結(jié)合本發(fā)明具體實(shí)施例作進(jìn)一步的說明。本發(fā)明具體實(shí)施例以Windows操作系統(tǒng)為平臺(tái),以CodeBlock為編程工具,以C++語言為實(shí)現(xiàn)主程序的編程語言,以Cpython作為二次開發(fā)環(huán)境語言,以控制臺(tái)程序作為主系統(tǒng)程序,向用戶提供二次開發(fā)接口函數(shù)JMS_ChangeValue, Python 二次開發(fā)腳本JMS. py。通過嵌入Python解釋器實(shí)現(xiàn)系統(tǒng)對(duì)外提供二次開發(fā)流程如下步驟I :歸納分析系統(tǒng)軟件,抽象出系統(tǒng)需要向外提供接口 “JMS_ChangeValue”,該接口作用在于改變主系統(tǒng)進(jìn)程中的一個(gè)變量的值;步驟2 :為主程序鏈接Python解釋器,在CodeBlock的編譯器和鏈接器選項(xiàng)中增加Python的頭文件和庫文件目錄;配置操作系統(tǒng)的環(huán)境變量,在“系統(tǒng)變量”中增加“PYTHONHOME”,指向 python 目錄;步驟3 :編寫系統(tǒng)對(duì)外開放的二次開發(fā)接口的函數(shù)原型,包括以下過程3. DC++程序中必須包含如下代碼#include〈Python. h>//包含Python解釋器接口文件;3. 2)實(shí)現(xiàn)二次開發(fā)接口函數(shù)JMS_ChangeValue的功能原型,其中,各參數(shù)、返回值等均需聲明為PyObject類型;通過PyArg_ParseTuple、Py_BuildValue等解釋器提供的接口方法,將與Python交互的接口值與本地值(主程序)進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換后進(jìn)行本地處理。3. 3)編寫函數(shù)原型與用戶可調(diào)用的二次開發(fā)接口的綁定代碼,通過解釋器提供的數(shù)據(jù)結(jié)構(gòu)體PyMethodDef,來綁定本地函數(shù)與二次開發(fā)的接口。
3. 4)編寫主程序調(diào)用用戶腳本的控制代碼(實(shí)際使用中,可以設(shè)計(jì)合適的機(jī)制靈活定義主程序調(diào)用用戶腳本的文件路徑)3. 4. I)通過解釋器提供的Py_Initialize接口來初始化內(nèi)嵌的python解釋器;3. 4. 2)通過解釋器提供的Py_InitModule接口來初始化對(duì)外提供的Python接口模塊的名稱;3. 4.3)通過解釋器提供的PyFile_AsFiIe接口將用戶的二次開發(fā)腳本文件轉(zhuǎn)換為文件指針;3. 4. 4)通過解釋器提供的PyRun_AnyFileEx接口將3中得到的文件指針交由解釋器進(jìn)行運(yùn)行;3. 4. 5)通過解釋器提供的Py_Finalize接口關(guān)閉解釋器,釋放資源。步驟4 :為步驟3中編寫的函數(shù)原型定義函數(shù)內(nèi)外接口,并編寫相關(guān)函數(shù)原型的接口說明文檔;步驟5 :用戶編寫二次開發(fā)腳本進(jìn)行二次開發(fā),步驟如下5. I)腳本頭部寫明編碼格式#-*-coding:utf-8-*_5. 2)導(dǎo)入主程序提供的二次開發(fā)模塊包;5. 3)將主程序提供的二次開發(fā)模塊包中提供的各接口與用戶所需的邏輯融合,編寫符合用戶需要的腳本文件。綜上所述,本發(fā)明能夠使行業(yè)通用軟件系統(tǒng)方便的進(jìn)行二次開發(fā)接口基本元素的歸納總結(jié)及實(shí)現(xiàn);能夠避開前期設(shè)計(jì)中遇到流程無法確定、固定流程下的接口難以實(shí)現(xiàn)的問題;能夠以免費(fèi)開源的Python開發(fā)語言向用戶提供二次開發(fā)環(huán)境;能夠使用戶根據(jù)自身的實(shí)際業(yè)務(wù)邏輯、流程需求編寫二次開發(fā)程序并嵌入主程序,實(shí)現(xiàn)并解決了通用軟件系統(tǒng)靈活應(yīng)變、易于擴(kuò)展的目的,為通用軟件在行業(yè)內(nèi)部立足提供了強(qiáng)有力二次開發(fā)的技術(shù)方法。以上所述僅為本發(fā)明的較佳實(shí)例而已,并不以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種內(nèi)嵌Python解釋器實(shí)現(xiàn)軟件系統(tǒng)二次開發(fā)的方法,其特征在于,包括如下步驟 步驟1,歸納和抽象系統(tǒng)軟件所需要對(duì)外提供的對(duì)象和方法; 步驟2,系統(tǒng)主程序配置鏈接Python解釋器; 步驟3,在Python環(huán)境下,為步驟I歸納出的對(duì)象和方法在系統(tǒng)主程序中編寫實(shí)現(xiàn)原型; 步驟4,為步驟3中實(shí)現(xiàn)的對(duì)象、方法定義函數(shù)內(nèi)外接口,并編寫相關(guān)的接口說明文檔;步驟5,用戶依據(jù)接口說明文檔,以相應(yīng)版本的Python腳本使用各個(gè)接口并融合入自身所需的流程、邏輯,實(shí)現(xiàn)自身二次開發(fā)的實(shí)際需求。
2.根據(jù)權(quán)利要求I所述的內(nèi)嵌Python解釋器實(shí)現(xiàn)軟件系統(tǒng)二次開發(fā)的方法,其特征在于步驟2中,用戶可依據(jù)實(shí)現(xiàn)系統(tǒng)的編程語言,選擇鏈接相應(yīng)版本的Python解釋器,C/C++程序鏈接CPython解釋器,.Net平臺(tái)語言鏈接IronPython解釋器,JAVA語言鏈接Jython解釋器。
3.根據(jù)權(quán)利要求I所述的內(nèi)嵌Python解釋器實(shí)現(xiàn)軟件系統(tǒng)二次開發(fā)的方法,其特征在于所述對(duì)象、方法是用戶二次開發(fā)的基本元素,相互間無流程關(guān)系。
4.根據(jù)權(quán)利要求I所述的內(nèi)嵌Python解釋器實(shí)現(xiàn)軟件系統(tǒng)二次開發(fā)的方法,其特征在于步驟4中,所述接口說明文檔是對(duì)象、方法原型的接口功能、規(guī)格說明。
全文摘要
本發(fā)明涉及軟件系統(tǒng)二次開發(fā)方法領(lǐng)域,特別是公開了一種嵌入Python解釋器實(shí)現(xiàn)系統(tǒng)軟件對(duì)外提供二次開發(fā)的方法,包括歸納和抽象系統(tǒng)軟件所需要對(duì)外提供的對(duì)象和方法;系統(tǒng)主程序配置鏈接Python解釋器;在Python環(huán)境下為系統(tǒng)主程序編寫實(shí)現(xiàn)對(duì)象和方法原型;為對(duì)象、方法定義函數(shù)內(nèi)外接口并編寫相關(guān)的接口說明文檔;用戶依據(jù)接口說明文檔,以相應(yīng)版本的Python腳本使用各個(gè)接口并融合入自身所需的流程、邏輯,實(shí)現(xiàn)自身二次開發(fā)的實(shí)際需求等步驟。本發(fā)明改變了插件式、流程式的傳統(tǒng)的二次開發(fā)模式,實(shí)現(xiàn)面向?qū)ο?、高度靈活的可編程接口的開發(fā)模式,使信息管理系統(tǒng)、輔助設(shè)計(jì)系統(tǒng)等具備更強(qiáng)的可擴(kuò)展性。
文檔編號(hào)G06F9/44GK102929645SQ20121048412
公開日2013年2月13日 申請(qǐng)日期2012年11月23日 優(yōu)先權(quán)日2012年11月23日
發(fā)明者馬曉平, 朱駿, 張祥 申請(qǐng)人:江蘇現(xiàn)代造船技術(shù)有限公司