一種智能化的軟件編程方法
【專利摘要】本發(fā)明公開了一種智能化的軟件編程方法,包括如下步驟,第一步:根據(jù)軟件設(shè)計要求繪制UML模型;第二步:建立符合軟件設(shè)計要求的UML元模型;第三步:代碼轉(zhuǎn)換規(guī)則的建立;第四步:代碼生成,根據(jù)第三步所建立的代碼轉(zhuǎn)換規(guī)則,利用計算機將輸入的UML模型轉(zhuǎn)換為C++代碼,其中類圖生成C++中的類,順序圖生成方法內(nèi)部的具體實現(xiàn);本發(fā)明將UML模型中的各個元素映射到相應(yīng)的元模型,然后根據(jù)元模型的轉(zhuǎn)換規(guī)則逐步生成C++代碼,與多數(shù)文獻中提出的只能生成C++代碼框架的方法相比,本發(fā)明提出的方法可以生成內(nèi)容更加完整的代碼,減少了編程人員手動添加代碼的工作,從而提高了軟件的開發(fā)效率和軟件產(chǎn)品的質(zhì)量。
【專利說明】
一種智能化的軟件編程方法
技術(shù)領(lǐng)域
[0001 ]本發(fā)明涉及軟件編程技術(shù)領(lǐng)域,尤其涉及一種智能化的軟件編程方法。
【背景技術(shù)】
[0002]在軟件開發(fā)的過程中,開發(fā)人員總是重復(fù)編寫一些簡單的代碼,而且每當(dāng)新技術(shù)來臨,又不得不一再地重復(fù)過去的工作同時,需求的變化也從來沒有停止過,為了解決這些問題,人們提出了代碼自動生成技術(shù),代碼自動生成技術(shù)根據(jù)模型驅(qū)動架構(gòu)MDA(ModelDrivenArchitecture)的思想,將由開發(fā)人員描述的軟件系統(tǒng)模型轉(zhuǎn)換為代碼,使得模型成為軟件開發(fā)的核心制品,提升了軟件開發(fā)的抽象層次,從而提高軟件開發(fā)效率和軟件的可維護性,統(tǒng)一建模語言UML是一種以圖形方式對系統(tǒng)進行分析設(shè)計的標(biāo)準(zhǔn)建模語言,使用UML建模可以清晰地表示系統(tǒng)的結(jié)構(gòu)和行為信息UML模型中的類圖顯示了系統(tǒng)中各個類的靜態(tài)結(jié)構(gòu),順序圖描述了對象之間消息傳遞的時間順序因此,軟件開發(fā)人員通常將二者結(jié)合描述軟件系統(tǒng)的詳細設(shè)計模型代碼自動生成就以類圖和順序圖為輸入,依據(jù)一定的轉(zhuǎn)換規(guī)則生成具有靜態(tài)和動態(tài)信息的代碼。
[0003]但是現(xiàn)有軟件自動編程過程中生成的代碼大多以Java為主,很少有能夠在編程完成后生成C++代碼的智能化的編程方法。
【發(fā)明內(nèi)容】
[0004]本發(fā)明所要解決的技術(shù)問題是提供一種智能化的軟件編程方法,其先將UML模型中的各個元素映射到相應(yīng)的元模型,然后根據(jù)元模型的轉(zhuǎn)換規(guī)則逐步生成C++代碼,與多數(shù)文獻中提出的只能生成C++代碼框架的方法相比,本發(fā)明提出的方法可以生成內(nèi)容更加完整的代碼,減少了編程人員手動添加代碼的工作,從而提高了軟件的開發(fā)效率和軟件產(chǎn)品的質(zhì)量。
[0005]為解決上述技術(shù)問題,本發(fā)明所采取的技術(shù)方案是:一種一種智能化的軟件編程方法,包括如下步驟:
[0006]第一步:根據(jù)軟件設(shè)計要求繪制UML模型,UML模型包括語法正確的類圖和順序圖,用來描述軟件系統(tǒng)的靜態(tài)結(jié)構(gòu)和業(yè)務(wù)邏輯信息;
[0007]第二步:建立符合軟件設(shè)計要求的UML元模型,UML元模型包括類圖元模型和順序圖元模型,用來定義類圖和順序圖的繪制規(guī)則;
[0008]第三步:代碼轉(zhuǎn)換規(guī)則的建立,轉(zhuǎn)換規(guī)則是根據(jù)UML模型元素的特點和C++語言的代碼結(jié)構(gòu)建立的;
[0009]第四步:代碼生成,根據(jù)第三步所建立的代碼轉(zhuǎn)換規(guī)則,利用計算機將輸入的UML模型轉(zhuǎn)換為C++代碼,其中類圖生成C++中的類,順序圖生成方法內(nèi)部的具體實現(xiàn)。
[0010]所述類圖元模型定義了使用UML描述對象模型的完整語法規(guī)則,UML類圖中的類與元模型中的Class對應(yīng),屬性和操作與Attribute和Operat1n對應(yīng),操作的參數(shù)對應(yīng)Parameter,其中Kind表示該參數(shù)的類型,屬性和參數(shù)的類型用Classf ier表示。
[0011]所述順序圖用來描述類中的一個方法,對應(yīng)原模型中的Interact1n、Co llaborat 1n和Operat 1n,其中的Operat 1n用來記錄該順序圖所描述的方法的名稱和可見性,順序圖中的對象對應(yīng)元模型中的Classifi erRo I e,不同對象間通信的消息對應(yīng)Message,消息中要執(zhí)行的動作對應(yīng)Act1n,該動作執(zhí)行的條件用recurrence表示,動作的內(nèi)容用Request表示。
[0012]所述第三步中的轉(zhuǎn)換規(guī)則包括類圖的轉(zhuǎn)換規(guī)則和順序圖的轉(zhuǎn)換規(guī)則,所述類圖的轉(zhuǎn)換規(guī)則包括類的轉(zhuǎn)換規(guī)則與屬性和操作的轉(zhuǎn)換規(guī)則,UML中的類、屬性和操作分別對應(yīng)C++中的類、成員變量和成員函數(shù),所述順序圖的轉(zhuǎn)換規(guī)則包括關(guān)聯(lián)關(guān)系的轉(zhuǎn)換規(guī)則、順序圖的轉(zhuǎn)換規(guī)則、條件的轉(zhuǎn)換規(guī)則、變量賦值的轉(zhuǎn)換規(guī)則、對象創(chuàng)建的轉(zhuǎn)換規(guī)則、方法調(diào)用的轉(zhuǎn)換規(guī)則和消息發(fā)送的轉(zhuǎn)換規(guī)則。
[0013]采用上述技術(shù)方案所產(chǎn)生的有益效果在于:本發(fā)明將UML模型中的各個元素映射到相應(yīng)的元模型,然后根據(jù)元模型的轉(zhuǎn)換規(guī)則逐步生成C++代碼,與多數(shù)文獻中提出的只能生成C++代碼框架的方法相比,本發(fā)明提出的方法可以生成內(nèi)容更加完整的代碼,減少了編程人員手動添加代碼的工作,從而提高了軟件的開發(fā)效率和軟件產(chǎn)品的質(zhì)量。
【具體實施方式】
[0014]下面對本發(fā)明的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明的一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0015]在下面的描述中闡述了很多具體細節(jié)以便于充分理解本發(fā)明,但是本發(fā)明還可以采用其他不同于在此描述的其它方式來實施,本領(lǐng)域技術(shù)人員可以在不違背本發(fā)明內(nèi)涵的情況下做類似推廣,因此本發(fā)明不受下面公開的具體實施例的限制。
[0016]本發(fā)明公開了一種智能化的軟件編程方法,包括如下步驟:
[0017]第一步:根據(jù)軟件設(shè)計要求繪制UML模型,UML模型包括語法正確的類圖和順序圖,用來描述軟件系統(tǒng)的靜態(tài)結(jié)構(gòu)和業(yè)務(wù)邏輯信息;
[0018]第二步:建立符合軟件設(shè)計要求的UML元模型,UML元模型包括類圖元模型和順序圖元模型,用來定義類圖和順序圖的繪制規(guī)則;
[0019]第三步:代碼轉(zhuǎn)換規(guī)則的建立,轉(zhuǎn)換規(guī)則是根據(jù)UML模型元素的特點和C++語言的代碼結(jié)構(gòu)建立的;
[0020]第四步:代碼生成,根據(jù)第三步所建立的代碼轉(zhuǎn)換規(guī)則,利用計算機將輸入的UML模型轉(zhuǎn)換為C++代碼,其中類圖生成C++中的類,順序圖生成方法內(nèi)部的具體實現(xiàn)。
[0021]所述類圖元模型定義了使用UML描述對象模型的完整語法規(guī)則,UML類圖中的類與元模型中的Class對應(yīng),屬性和操作與Attribute和Operat1n對應(yīng),操作的參數(shù)對應(yīng)Parameter,其中Kind表示該參數(shù)的類型,屬性和參數(shù)的類型用Classf ier表示。
[0022]所述順序圖用來描述類中的一個方法,對應(yīng)原模型中的Interact1n、Co llaborat 1n和Operat 1n,其中的Operat 1n用來記錄該順序圖所描述的方法的名稱和可見性,順序圖中的對象對應(yīng)元模型中的Classifi erRo I e,不同對象間通信的消息對應(yīng)Message,消息中要執(zhí)行的動作對應(yīng)Act1n,該動作執(zhí)行的條件用recurrence表示,動作的內(nèi)容用Request表示。
[0023]所述第三步中的轉(zhuǎn)換規(guī)則包括類圖的轉(zhuǎn)換規(guī)則和順序圖的轉(zhuǎn)換規(guī)則,所述類圖的轉(zhuǎn)換規(guī)則包括類的轉(zhuǎn)換規(guī)則與屬性和操作的轉(zhuǎn)換規(guī)則,UML中的類、屬性和操作分別對應(yīng)C++中的類、成員變量和成員函數(shù),所述順序圖的轉(zhuǎn)換規(guī)則包括關(guān)聯(lián)關(guān)系的轉(zhuǎn)換規(guī)則、順序圖的轉(zhuǎn)換規(guī)則、條件的轉(zhuǎn)換規(guī)則、變量賦值的轉(zhuǎn)換規(guī)則、對象創(chuàng)建的轉(zhuǎn)換規(guī)則、方法調(diào)用的轉(zhuǎn)換規(guī)則和消息發(fā)送的轉(zhuǎn)換規(guī)則。
[0024]其中,類的轉(zhuǎn)換規(guī)則建立過程如下,待轉(zhuǎn)換的模型元素是一個有名稱的類,元模型中對象c的屬性name記錄了該類的名稱,轉(zhuǎn)換的第一步是.h文件(HFILE)和cpp文件(CFILE)的生成,.h文件包括頭文件的引用IN-CLUDE、成員變量ATTRIBUTE和成員函數(shù)OPERAT1N!^聲明,被規(guī)則2中的內(nèi)容替換,非終結(jié)符號c.name表示本規(guī)則所描述類的類名,被類名所替換,語句#ifndef和#define后的c.name全部大寫在C++中,通常成員變量是私有的,成員函數(shù)是公有的,分別使用終結(jié)符號private:和public:描述,.cpp文件包括對應(yīng)頭文件的引用和成員函數(shù)0PERAT10NC的具體實現(xiàn)。
[0025]屬性和操作的轉(zhuǎn)換規(guī)則的建立,待轉(zhuǎn)換的是一個包含屬性和操作的類,元模型中對象0和3分別記錄操作和屬性的名稱,plp2分別為操作的參數(shù)和返回值,cl,c2,c3對應(yīng)屬性參數(shù)返回值的類型,轉(zhuǎn)換規(guī)則定義了 AT-TRIBUTE的轉(zhuǎn)換過程,cl.name和a.name表示屬性的類型和名稱,二者組合完成了 C++中成員變量的聲明該轉(zhuǎn)換規(guī)則中的符號“_”是帶下劃線的空格,表示直接生成代碼中的空格,0P-ERAT10NH的轉(zhuǎn)換過程與此相同。0PERAT10NC的具體實現(xiàn)被順序圖生成的代碼所替換,用非終結(jié)符號SEQUENCE表示。
[0026]關(guān)聯(lián)關(guān)系的轉(zhuǎn)換規(guī)則的建立,元模型中cl,c2表示兩個相互關(guān)聯(lián)的類,它們之間的關(guān)聯(lián)關(guān)系用a記錄,轉(zhuǎn)換規(guī)則中定義了在ClassA中添加對ClassB的引用,用符號IN-CLUDE表不O
[0027]順序圖的轉(zhuǎn)換規(guī)則的建立,對象ο表示該順序圖是方法opeH)的具體實現(xiàn),非終結(jié)符號SEQUENCE被L0CALDATA和MESSAGE替換,說明一個方法的實現(xiàn)細節(jié)中包括局部變量的定義以及各對象之間相互傳遞消息的過程。
[0028]條件的轉(zhuǎn)換規(guī)則建立,對象a向?qū)ο骲發(fā)送了一個包含條件的消息,元模型中對象m的屬性recurrence記錄了條件的內(nèi)容,當(dāng)該條件滿足時,執(zhí)行這個消息上的操作C++中使用if語句表示條件。
[0029]變量賦值的轉(zhuǎn)換規(guī)則建立,將ClassB的方法oper()的返回值賦給變量x,元模型中對象rv表示變量的名稱,r記錄了方法的名稱,c表示函數(shù)的返回值類型即變量的類型轉(zhuǎn)換規(guī)則的第一行顯示了變量X的定義,第二行中非終結(jié)符號ASIG匪ENT表示該變量會被賦值,它可以被函數(shù)的返回值賦值,也可以被常量或表達式賦值。
[0030]對象創(chuàng)建的轉(zhuǎn)換規(guī)則建立,“《create》”表示該消息是一個創(chuàng)建對象的操作,元模型中r表示待創(chuàng)建的對象的名稱,P和c2表示參數(shù)的名稱和類型C++中有兩種創(chuàng)建對象的方式,分別為ClassNameob ject(param)和Class_Name*object = newClassName(param)。
[0031]方法調(diào)用的轉(zhuǎn)換規(guī)則建立,消息的內(nèi)容為調(diào)用對象objectB中的方法oper(),元模型中cr記錄對象的名稱,r表示方法的名稱,J^pc2表示參數(shù)的名稱及類型,方法調(diào)用包括其他對象方法的調(diào)用和對象自身方法的調(diào)用C++中使用符號V’訪問成員函數(shù),轉(zhuǎn)換規(guī)則顯示了調(diào)用其他對象的方法并將結(jié)果賦值給一個變量的規(guī)則,當(dāng)調(diào)用自身方法時,去掉cr.name.即可。
[0032]消息發(fā)送的轉(zhuǎn)換規(guī)則建立,消息中不包含任何方法調(diào)用或者對象創(chuàng)建的內(nèi)容,元模型中r記錄了消息的內(nèi)容,消息發(fā)送包括發(fā)送到其他對象的消息和發(fā)送給自身的反身消息,二者都只需直接將消息中的內(nèi)容直接生成代碼。
[0033]總之,本發(fā)明將UML模型中的各個元素映射到相應(yīng)的元模型,然后根據(jù)元模型的轉(zhuǎn)換規(guī)則逐步生成C++代碼,與多數(shù)文獻中提出的只能生成C++代碼框架的方法相比,本發(fā)明提出的方法可以生成內(nèi)容更加完整的代碼,減少了編程人員手動添加代碼的工作,從而提高了軟件的開發(fā)效率和軟件產(chǎn)品的質(zhì)量。
【主權(quán)項】
1.一種智能化的軟件編程方法,其特征在于:包括如下步驟: 第一步:根據(jù)軟件設(shè)計要求繪制UML模型,UML模型包括語法正確的類圖和順序圖,用來描述軟件系統(tǒng)的靜態(tài)結(jié)構(gòu)和業(yè)務(wù)邏輯信息; 第二步:建立符合軟件設(shè)計要求的UML元模型,UML元模型包括類圖元模型和順序圖元模型,用來定義類圖和順序圖的繪制規(guī)則; 第三步:代碼轉(zhuǎn)換規(guī)則的建立,轉(zhuǎn)換規(guī)則是根據(jù)UML模型元素的特點和C++語言的代碼結(jié)構(gòu)建立的; 第四步:代碼生成,根據(jù)第三步所建立的代碼轉(zhuǎn)換規(guī)則,利用計算機將輸入的UML模型轉(zhuǎn)換為C++代碼,其中類圖生成C++中的類,順序圖生成方法內(nèi)部的具體實現(xiàn)。2.根據(jù)權(quán)利要求1所述的智能化的軟件編程方法,其特征在于:所述類圖元模型定義了使用UML描述對象模型的完整語法規(guī)則,UML類圖中的類與元模型中的Class對應(yīng),屬性和操作與Attribute和Operat 1n對應(yīng),操作的參數(shù)對應(yīng)Parameter,其中Kind表示該參數(shù)的類型,屬性和參數(shù)的類型用Classfier表示。3.根據(jù)權(quán)利要求1所述的智能化的軟件編程方法,其特征在于:所述順序圖用來描述類中的一個方法,對應(yīng)原模型中的Intera ct1n、Collabo rat1n和Ope rat1n,其中的Operat1n用來記錄該順序圖所描述的方法的名稱和可見性,順序圖中的對象對應(yīng)元模型中的Classif ierRole,不同對象間通信的消息對應(yīng)Message,消息中要執(zhí)行的動作對應(yīng)Act1n,該動作執(zhí)行的條件用recurrence表示,動作的內(nèi)容用Request表示。4.根據(jù)權(quán)利要求1所述的智能化的軟件編程方法,其特征在于:所述第三步中的轉(zhuǎn)換規(guī)則包括類圖的轉(zhuǎn)換規(guī)則和順序圖的轉(zhuǎn)換規(guī)則,所述類圖的轉(zhuǎn)換規(guī)則包括類的轉(zhuǎn)換規(guī)則與屬性和操作的轉(zhuǎn)換規(guī)則,UML中的類、屬性和操作分別對應(yīng)C++中的類、成員變量和成員函數(shù),所述順序圖的轉(zhuǎn)換規(guī)則包括關(guān)聯(lián)關(guān)系的轉(zhuǎn)換規(guī)則、順序圖的轉(zhuǎn)換規(guī)則、條件的轉(zhuǎn)換規(guī)則、變量賦值的轉(zhuǎn)換規(guī)則、對象創(chuàng)建的轉(zhuǎn)換規(guī)則、方法調(diào)用的轉(zhuǎn)換規(guī)則和消息發(fā)送的轉(zhuǎn)換規(guī)則。
【文檔編號】G06F9/44GK106020788SQ201610270556
【公開日】2016年10月12日
【申請日】2016年4月28日
【發(fā)明人】賈瑞祥
【申請人】齊魯工業(yè)大學(xué)