摘 要: 隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,數(shù)據(jù)和信息以各種文件格式被組織并存儲(chǔ)在計(jì)算機(jī)系統(tǒng)中。為了提高對(duì)數(shù)據(jù)和信息的共享效率,需要進(jìn)行文件格式轉(zhuǎn)換,支持不同軟件的處理和應(yīng)用需要。采用經(jīng)典的軟件開(kāi)發(fā)方法和技術(shù),設(shè)計(jì)和實(shí)現(xiàn)一種文件格式轉(zhuǎn)換器,支持將一種專用的文本格式文件轉(zhuǎn)換到關(guān)系數(shù)據(jù)庫(kù)文件。
關(guān)鍵詞: 軟件開(kāi)發(fā);文件轉(zhuǎn)換器;自頂向下;自底向上
1 ARFF-DB轉(zhuǎn)換器的應(yīng)用背景
ARFF-DB轉(zhuǎn)換器的應(yīng)用背景來(lái)自于機(jī)器學(xué)習(xí)領(lǐng)域的Weka系統(tǒng)[1]。Weka把ARFF格式的文本文件轉(zhuǎn)換為數(shù)據(jù)庫(kù)的記錄格式,形成由實(shí)例(Instance)和屬性(Attribute)組成的關(guān)系,再通過(guò)機(jī)器學(xué)習(xí),發(fā)現(xiàn)規(guī)則或者概念。
ARFF(Attribute-Relation File Format)是Weka使用的數(shù)據(jù)文件輸入格式,其樣例如下。
%1.Title:Iris Plants Database
%
%2.Sources:
%(a)Creator:R.A.Fisher
%(b)Donor:Michael Marshall(MARSHALL%PLU@io.arc.nasa.gov)
%(c)Date:July,1988
%
@RELATION iris
@ATTRIBUTE sepallength NUMERIC
@ATTRIBUTE sepalwidth NUMERIC
@ATTRIBUTE petallength NUMERIC
@ATTRIBUTE petalwidth NUMERIC
@ATTRIBUTE class{Iris-setosa,Iris-versicolor,Iris-virginica}
@DATA
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
文件由兩部分組成,第一部分被稱作文件頭(header),第二部分被稱作數(shù)據(jù)(data)。Header部分是由@RELATION和@ATTRIBUTE組成,其中,@RELATION聲明了數(shù)據(jù)實(shí)例所在的關(guān)系名稱,例如:iris(鳶尾花);@ATTRIBUTE聲明了數(shù)據(jù)中屬性的名稱及其類型,例如:屬性名sepallength(花萼長(zhǎng)度),屬性的類型是numeric(數(shù)值型)。屬性類型除了numeric,還包括real、integer、nominal、string和date,其中,real和integer均被視為numeric;nominal型屬性值屬于離散值,可以通過(guò)枚舉方式給出所有屬性值(例如:class屬性,其值在{}中列出,屬于名詞型屬性,具有離散特性);date屬性值應(yīng)符合ISO-8601,格式為YYYY-MM-DD。Data部分由@DATA導(dǎo)出,每個(gè)實(shí)例的相關(guān)屬性值為一行,上例中每個(gè)實(shí)例的屬性值均與@ATTRIBUTE部分定義的屬性一一對(duì)應(yīng),還可以由其他表示實(shí)例屬性值的方法[1]表示。本例中給出了10個(gè)實(shí)例數(shù)據(jù),每個(gè)實(shí)例都有5個(gè)屬性值。更多ARFF文件格式的內(nèi)容請(qǐng)參見(jiàn)參考文獻(xiàn)[1]。
2 軟件開(kāi)發(fā)方法
隨著軟件開(kāi)發(fā)需求的增加,各種軟件開(kāi)發(fā)方法和技術(shù)層出不窮。各類驅(qū)動(dòng)式[2]、敏捷編程[3]軟件開(kāi)發(fā)方法不僅被廣泛應(yīng)用,而且其變體和擴(kuò)展也被深入研究[4-5],以期提高軟件開(kāi)發(fā)效率和軟件質(zhì)量。在開(kāi)發(fā)文件轉(zhuǎn)換器中,同樣使用了用例驅(qū)動(dòng)開(kāi)發(fā)方法實(shí)現(xiàn)主界面、基于GUI的開(kāi)發(fā)方法實(shí)現(xiàn)程序主題框架。盡管如此,開(kāi)發(fā)使用的核心和基本方法仍然是經(jīng)典的逐步求精軟件開(kāi)發(fā)方法,需求分析和設(shè)計(jì)主要采用自頂向下方法,實(shí)現(xiàn)階段則采用自底向上方法。
自頂向下的程序設(shè)計(jì)思想,就是在系統(tǒng)分析與設(shè)計(jì)中,采用不斷分解的方式,把一個(gè)大問(wèn)題逐步分解為若干個(gè)小問(wèn)題,直到所有的小問(wèn)題都只具有簡(jiǎn)單的邏輯功能,可以用程序語(yǔ)言直接實(shí)現(xiàn),而不需要再分解。
自頂向下的程序設(shè)計(jì)思想既可以采用自頂向下的實(shí)現(xiàn)方法,也可以采用自底向上的實(shí)現(xiàn)方法。自頂向下的實(shí)現(xiàn)方法指在程序?qū)崿F(xiàn)時(shí),先實(shí)現(xiàn)上層功能較復(fù)雜的程序邏輯功能,其中所需要的下層功能較簡(jiǎn)單的程序邏輯功能可以以一個(gè)空體代替(即stub)。自底向上的程序?qū)崿F(xiàn)方法指在程序?qū)崿F(xiàn)時(shí),按照分析的結(jié)果,先從下層代表簡(jiǎn)單小問(wèn)題的邏輯開(kāi)始實(shí)現(xiàn),逐步向上,依次實(shí)現(xiàn)由各個(gè)小問(wèn)題模塊支撐的較大問(wèn)題模塊,直至整個(gè)程序功能實(shí)現(xiàn)。
在ARFF-DB轉(zhuǎn)換器實(shí)現(xiàn)中,采用自頂向下的分析和設(shè)計(jì)方法、自底向上的程序?qū)崿F(xiàn)方法,這種分析和解決問(wèn)題的方式,符合人們的思維和實(shí)踐習(xí)慣。
3 系統(tǒng)分析與設(shè)計(jì)
按照軟件工程的觀點(diǎn),程序開(kāi)發(fā)過(guò)程最基本的步驟包括:系統(tǒng)分析、系統(tǒng)設(shè)計(jì)和系統(tǒng)實(shí)現(xiàn)。本文按照這一步驟進(jìn)行ARFF-DB轉(zhuǎn)換器設(shè)計(jì)與開(kāi)發(fā)。
3.1 系統(tǒng)基本功能分析
系統(tǒng)分析是通過(guò)分析系統(tǒng)的功能,搞清系統(tǒng)“做什么”。最簡(jiǎn)單、最基本的一種分析方法就是通過(guò)說(shuō)明目標(biāo)系統(tǒng)的輸入I(input)、處理P(process)和輸出O(output),反映系統(tǒng)的功能。通過(guò)分析,ARFF-DB轉(zhuǎn)換器的IPO如圖1所示。
3.2 系統(tǒng)功能設(shè)計(jì):自頂向下,逐步求精
系統(tǒng)設(shè)計(jì)考慮如何實(shí)現(xiàn)系統(tǒng)分析中明確的系統(tǒng)功能,即:系統(tǒng)“如何做”才能實(shí)現(xiàn)ARFF文件到DB文件的轉(zhuǎn)換。要使用自頂向下的設(shè)計(jì)方法,把大問(wèn)題分解為小問(wèn)題,直到每個(gè)小問(wèn)題都有了明確的解決方案,設(shè)計(jì)過(guò)程即告完成。因?yàn)樽皂斚蛳碌脑O(shè)計(jì)過(guò)程會(huì)把大問(wèn)題、較大問(wèn)題逐步分解為較小的、更接近系統(tǒng)實(shí)現(xiàn)的問(wèn)題,所以這個(gè)過(guò)程也被稱為逐步求精。
在系統(tǒng)分析的IPO中,要從輸入的ARFF文件處理“文件解析”模塊開(kāi)始考慮。首先,系統(tǒng)讀入一個(gè)ARFF文件;然后對(duì)ARFF文件的內(nèi)容進(jìn)行解析,把@RELATION中的關(guān)系名字、@ATTRIBUTE中的屬性名字和類型作為創(chuàng)建數(shù)據(jù)庫(kù)表結(jié)構(gòu)的依據(jù),能夠把@DATA中的每一行實(shí)例數(shù)據(jù)作為一個(gè)記錄添加到數(shù)據(jù)庫(kù)文件中?!拔募馕觥焙拖鄳?yīng)的輸出部分就是對(duì)頂層的“轉(zhuǎn)換處理”向下的一步求精。進(jìn)一步向下求精出“形成文件對(duì)象”子模塊。
“文件解析”子模塊的輸出,將其轉(zhuǎn)換為相應(yīng)的數(shù)據(jù)庫(kù),需要以解析的三個(gè)結(jié)果為輸入,創(chuàng)建數(shù)據(jù)庫(kù)表,并將實(shí)例數(shù)據(jù)作為記錄寫到數(shù)據(jù)庫(kù)中,然后得到相應(yīng)的數(shù)據(jù)庫(kù)文件。這一部分可以定義為“創(chuàng)建數(shù)據(jù)庫(kù)”子模塊。它也是對(duì)頂層的“轉(zhuǎn)換處理”向下的一步求精。同樣地,對(duì)于“創(chuàng)建數(shù)據(jù)庫(kù)表”子模塊,可以進(jìn)一步向下求精地設(shè)計(jì)為“建立數(shù)據(jù)庫(kù)連接”和“訪問(wèn)數(shù)據(jù)庫(kù)”。
綜上所述,通過(guò)自頂向下的逐步求精設(shè)計(jì)過(guò)程后,得到的設(shè)計(jì)結(jié)果如圖2所示。
到此為止,自頂向下的設(shè)計(jì)基本上將“轉(zhuǎn)換處理”的問(wèn)題逐步求精、分解到可以通過(guò)程序直接處理的若干子問(wèn)題。然后將根據(jù)這個(gè)設(shè)計(jì)結(jié)果,使用具體的程序設(shè)計(jì)語(yǔ)言和工具來(lái)實(shí)現(xiàn)ARFF-DB轉(zhuǎn)換器。
4 程序設(shè)計(jì)與實(shí)現(xiàn)
根據(jù)系統(tǒng)分析和設(shè)計(jì)結(jié)果,開(kāi)始進(jìn)行系統(tǒng)的程序?qū)崿F(xiàn),這時(shí)的問(wèn)題就是程序設(shè)計(jì)語(yǔ)言和開(kāi)發(fā)工具(平臺(tái))的選擇。因?yàn)楣P者對(duì)Java語(yǔ)言較熟悉,所以使用Java作為程序設(shè)計(jì)語(yǔ)言,選用jdk1.6.0_02。數(shù)據(jù)庫(kù)系統(tǒng)使用MySQL[6]。另外,對(duì)于開(kāi)發(fā)平臺(tái)和工具,這里使用的是命令行,編輯器使用textpad。
4.1 程序組織和結(jié)構(gòu)設(shè)計(jì)
轉(zhuǎn)換器程序使用了包的結(jié)構(gòu)。程序的結(jié)構(gòu)由包和其中的類形成,用樹(shù)的形式表示如表1。
4.2 界面的程序設(shè)計(jì)與實(shí)現(xiàn)
ARFF-DB轉(zhuǎn)換器的主界面效果如圖3所示。
4.3 ARFF文件及其解析的設(shè)計(jì)與實(shí)現(xiàn)
依據(jù)系統(tǒng)分析和設(shè)計(jì)的結(jié)果,程序設(shè)計(jì)實(shí)現(xiàn)了ARFF文件的封裝和讀入。程序定義ARFFFile類,用于封裝ARFF文件,并支持對(duì)arff方法文件的讀入。設(shè)計(jì)ARFFFileAnanlysis類,定義analyze方法,用于實(shí)現(xiàn)ARFF文本的解析邏輯。
4.4 數(shù)據(jù)庫(kù)的創(chuàng)建與讀寫
在“文件解析”的過(guò)程中,輸入ARFF文件,輸出中給出數(shù)據(jù)庫(kù)的相關(guān)信息,包括數(shù)據(jù)庫(kù)關(guān)系名稱、數(shù)據(jù)庫(kù)屬性名稱和屬性值類型、數(shù)據(jù)庫(kù)關(guān)系中的記錄。轉(zhuǎn)換器設(shè)計(jì)實(shí)現(xiàn)了ArffDbCreator類,把解析出的數(shù)據(jù)關(guān)系名稱和數(shù)據(jù)屬性名稱以及值類型作為輸入,創(chuàng)建數(shù)據(jù)庫(kù),輸出得到一個(gè)數(shù)據(jù)庫(kù)表;然后,將數(shù)據(jù)記錄信息讀入到該數(shù)據(jù)庫(kù)表中,并通過(guò)讀出記錄,測(cè)試數(shù)據(jù)庫(kù)的建立和讀寫操作是否成功。這部分功能的實(shí)現(xiàn)主要涉及到從Java通過(guò)JDBC連接,訪問(wèn)相應(yīng)的數(shù)據(jù)庫(kù)。
4.5 主邏輯設(shè)計(jì)、實(shí)現(xiàn)以及程序的整合
本文在實(shí)現(xiàn)階段采用自底向上的實(shí)現(xiàn)方法,即首先實(shí)現(xiàn)下層的程序邏輯(子功能),然后再通過(guò)整合各個(gè)子功能,實(shí)現(xiàn)較高層次的程序邏輯,直至實(shí)現(xiàn)程序的整體邏輯功能。
目前已經(jīng)設(shè)計(jì)實(shí)現(xiàn)了“文件解析”邏輯和“數(shù)據(jù)庫(kù)創(chuàng)建及寫入”邏輯,現(xiàn)在要設(shè)計(jì)一個(gè)程序主邏輯,以便將上述兩個(gè)底層邏輯整合到一起,完成轉(zhuǎn)換器程序的整體功能,即:從ARFF文件到數(shù)據(jù)庫(kù)表的轉(zhuǎn)換。
主邏輯設(shè)計(jì)主要考慮的是用戶使用“轉(zhuǎn)換器”系統(tǒng)的方式以及要求的系統(tǒng)功能。這里,用戶使用的是GUI,通過(guò)GUI設(shè)定的菜單進(jìn)行功能選擇。這個(gè)過(guò)程可以通過(guò)用例及用例圖來(lái)描述[5]。如圖4所示。
5 總結(jié)
ARFF-DB轉(zhuǎn)換器實(shí)現(xiàn)了從ARFF文件到數(shù)據(jù)庫(kù)文件的基本轉(zhuǎn)換功能。本文采用自頂向下方法完成了ARFF-DB轉(zhuǎn)換器的系統(tǒng)分析和設(shè)計(jì),采用自底向上方法完成了程序?qū)崿F(xiàn)。今后要對(duì)處理arff文件中的殘缺值問(wèn)題給出更好的解決方案。還要在ARFF-DB轉(zhuǎn)換器基礎(chǔ)上實(shí)現(xiàn)DB-ARFF轉(zhuǎn)換器,使得轉(zhuǎn)換器功能更完善。
參考文獻(xiàn)
[1] WITTEN I H, FRANK E.數(shù)據(jù)挖掘:實(shí)用機(jī)器學(xué)習(xí)技術(shù)[M].北京:機(jī)械工業(yè)出版社,2007.
[2] 彭順順,周傳生.基于數(shù)據(jù)驅(qū)動(dòng)的圖形界面開(kāi)發(fā)方案[J].微型機(jī)與應(yīng)用,2013,32(19):1-3.
[3] 王剛,程建平.面向業(yè)務(wù)的敏捷界面定制構(gòu)件的設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2012,31(7):11-13.
[4] 王飛,郭淵博,郝耀輝,等.面向用例安全關(guān)鍵系統(tǒng)開(kāi)發(fā)方法研究[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(8):134-138.
[5] 謝東強(qiáng).敏捷軟件開(kāi)發(fā)的雙迭代模型[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29(6):176-178.
[6] LARMAN C.UML和模式應(yīng)用[M].北京:北京機(jī)械工業(yè)出版社,2006.