![南郵-軟件體系結(jié)構(gòu)實(shí)驗(yàn)一軟件體系結(jié)構(gòu)風(fēng)格之應(yīng)用_第1頁(yè)](http://file4.renrendoc.com/view/2dcb289bef71b84a7711a74b399023d1/2dcb289bef71b84a7711a74b399023d11.gif)
![南郵-軟件體系結(jié)構(gòu)實(shí)驗(yàn)一軟件體系結(jié)構(gòu)風(fēng)格之應(yīng)用_第2頁(yè)](http://file4.renrendoc.com/view/2dcb289bef71b84a7711a74b399023d1/2dcb289bef71b84a7711a74b399023d12.gif)
![南郵-軟件體系結(jié)構(gòu)實(shí)驗(yàn)一軟件體系結(jié)構(gòu)風(fēng)格之應(yīng)用_第3頁(yè)](http://file4.renrendoc.com/view/2dcb289bef71b84a7711a74b399023d1/2dcb289bef71b84a7711a74b399023d13.gif)
![南郵-軟件體系結(jié)構(gòu)實(shí)驗(yàn)一軟件體系結(jié)構(gòu)風(fēng)格之應(yīng)用_第4頁(yè)](http://file4.renrendoc.com/view/2dcb289bef71b84a7711a74b399023d1/2dcb289bef71b84a7711a74b399023d14.gif)
![南郵-軟件體系結(jié)構(gòu)實(shí)驗(yàn)一軟件體系結(jié)構(gòu)風(fēng)格之應(yīng)用_第5頁(yè)](http://file4.renrendoc.com/view/2dcb289bef71b84a7711a74b399023d1/2dcb289bef71b84a7711a74b399023d15.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、. 軟件體系構(gòu)造實(shí)驗(yàn):軟件體系構(gòu)造風(fēng)格之應(yīng)用一、實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)KWIC 實(shí)例分析,理解和掌握軟件體系構(gòu)造風(fēng)格設(shè)計(jì)與實(shí)現(xiàn)。二、實(shí)驗(yàn)容多種軟件風(fēng)格設(shè)計(jì)與實(shí)現(xiàn)之KWIC 實(shí)例:1采用主/子程序體系構(gòu)造風(fēng)格實(shí)現(xiàn)KWIC 關(guān)鍵詞索引系統(tǒng)2采用面向?qū)ο篌w系架構(gòu)風(fēng)格實(shí)現(xiàn)KWIC 關(guān)鍵詞索引系統(tǒng) 3采用管道過(guò)濾體系架構(gòu)風(fēng)格實(shí)現(xiàn)KWIC 關(guān)鍵詞索引系統(tǒng)4采用事件過(guò)程調(diào)用體系架構(gòu)風(fēng)格實(shí)現(xiàn)KWIC 關(guān)鍵詞索引系統(tǒng)三、實(shí)驗(yàn)要求與實(shí)驗(yàn)環(huán)境熟練掌握基于主/子程序體系構(gòu)造風(fēng)格的KWIC 關(guān)鍵詞索引系統(tǒng),在此根底上,完成基于面向?qū)ο篌w系架構(gòu)風(fēng)格的KWIC 關(guān)鍵詞索引系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)。選做基于管道過(guò)濾體系架構(gòu)風(fēng)格的KWIC 關(guān)鍵詞
2、索引系統(tǒng);選做基于事件過(guò)程調(diào)用體系架構(gòu)風(fēng)格的KWIC 關(guān)鍵詞索引系統(tǒng)。實(shí)驗(yàn)課前完成實(shí)驗(yàn)報(bào)告的實(shí)驗(yàn)?zāi)康?、?shí)驗(yàn)環(huán)境、實(shí)驗(yàn)容、實(shí)驗(yàn)操作過(guò)程等容;實(shí)驗(yàn)課中獨(dú)立/團(tuán)隊(duì)操作完成實(shí)驗(yàn)報(bào)告的實(shí)驗(yàn)操作、實(shí)驗(yàn)結(jié)果及結(jié)論等容;每人一臺(tái)PC 機(jī),所需軟件Win2003/*P 、UML 工具EclipseUML/ Rose/Visio/StartUML/、Eclipse/MyEclipse、JDK6.0 等。四、實(shí)驗(yàn)操作1、采用主/子程序體系構(gòu)造風(fēng)格實(shí)現(xiàn)KWIC 關(guān)鍵詞索引系統(tǒng)主程序/子程序風(fēng)格Main Program/Subroutine Style將系統(tǒng)組織成層次構(gòu)造,包括一個(gè)主程序和一系列子程序。主程序是系統(tǒng)的控
3、制器,負(fù)責(zé)調(diào)度各子程序的執(zhí)行。各子程序又是一個(gè)局部的控制器,調(diào)度其子程序的執(zhí)行。設(shè)計(jì)詞匯表:主程序main(), 子程序 shift(), sort() 方法,方法的調(diào)用,返回構(gòu)件和連接件類(lèi)型:構(gòu)件:各類(lèi)子程序,如shift(),sort() 連接件:方法的調(diào)用根本的計(jì)算模型:子程序有shift(), sort()方法,shift() 對(duì)單詞進(jìn)展移位,sort()方法對(duì)單詞進(jìn)展排序風(fēng)格的根本不變性:主程序有順序地調(diào)用子程序,單線程控制。KWIC 的主/子程序體系構(gòu)造風(fēng)格示意圖如下所示:主程序/子程序風(fēng)格的重要設(shè)計(jì)決策與約束有:基于聲明-使用程序調(diào)用關(guān)系建立連接件,以層次分解的方式建立系統(tǒng)部件,
4、共同組成層次構(gòu)造。每一個(gè)上層部件可以使用下層部件,但下層部件不能使用上層部件,即不允許逆方向調(diào)用。系統(tǒng)應(yīng)該是單線程執(zhí)行。主程序部件擁有最初的執(zhí)行控制權(quán),并在使用中將控制權(quán)轉(zhuǎn)移給下層子程序。子程序只能夠通過(guò)上層轉(zhuǎn)移來(lái)獲得控制權(quán),可以在執(zhí)行中將控制權(quán)轉(zhuǎn)交給下層的子子程序,并在自身執(zhí)行完成之后必須將控制權(quán)還交給上層部件。KWIC 主程序/子程序風(fēng)格的Java 語(yǔ)言實(shí)現(xiàn)見(jiàn)附件。主程序/子程序風(fēng)格的主要實(shí)現(xiàn)機(jī)制是模塊實(shí)現(xiàn),它將每個(gè)子程序都實(shí)現(xiàn)為一個(gè)模塊,主程序?qū)崿F(xiàn)為整個(gè)系統(tǒng)的起始模塊。依照抽象規(guī)格的層次關(guān)系,實(shí)現(xiàn)模塊也被組織為相應(yīng)的層次機(jī)構(gòu),通過(guò)導(dǎo)入/導(dǎo)出關(guān)系相連接。需要強(qiáng)調(diào)的是,雖然主程序/子程序風(fēng)格
5、非常類(lèi)似于構(gòu)造化程序的構(gòu)造,但是主程序/子程序風(fēng)格是基于部件與連接件建立的高層構(gòu)造。它的部件不同于程序,而是更加粗粒度的模塊。而且,在部件的實(shí)現(xiàn)模塊部,可以使用構(gòu)造化方法,也可以使用面向?qū)ο蠓椒?,這并不阻礙整個(gè)系統(tǒng)的高層構(gòu)造符合主程序/子程序風(fēng)格的約定。主程序/子程序風(fēng)格的優(yōu)點(diǎn)有:流程清晰,易于理解。強(qiáng)控制性。嚴(yán)格的層次分解和嚴(yán)格的控制權(quán)轉(zhuǎn)移使得主程序/子程序風(fēng)格對(duì)程序的實(shí)際執(zhí)行過(guò)程具備很強(qiáng)的控制能力,這帶來(lái)了一個(gè)特點(diǎn):如果一個(gè)子程序所連接的子子程序是正確的,則就很容易保證該子程序的正確性。所以,主程序/子程序風(fēng)格比其他常見(jiàn)風(fēng)格更能控制程序的正確性。2、采用面向?qū)ο篌w系構(gòu)造風(fēng)格實(shí)現(xiàn)KWIC 關(guān)
6、鍵詞索引系統(tǒng)面向?qū)ο笫斤L(fēng)格,需要強(qiáng)調(diào)說(shuō)明的是它的對(duì)象是部件,屬于高層構(gòu)造的元素,雖然名稱一樣,但它并不是面向?qū)ο蠓椒ㄖ兴龅膶?duì)象實(shí)體。面向?qū)ο笫斤L(fēng)格的命名是因?yàn)樗梃b了面向?qū)ο蠓椒ǖ乃枷耄皇且驗(yàn)樗褂妹嫦驅(qū)ο蠓椒▽?shí)現(xiàn)體系構(gòu)造,這也是在該風(fēng)格名稱中有一個(gè)式字的原因。面向?qū)ο笫斤L(fēng)格的主要實(shí)現(xiàn)機(jī)制是模塊實(shí)現(xiàn),它將每個(gè)對(duì)象部件實(shí)例都實(shí)現(xiàn)為一個(gè)模塊。存在連接的對(duì)象部件實(shí)例之間會(huì)存在模塊的導(dǎo)入/導(dǎo)出關(guān)系。每個(gè)模塊部可以是基于面向?qū)ο蠓椒ǖ膶?shí)現(xiàn),也可以是基于構(gòu)造化方法的實(shí)現(xiàn)。設(shè)計(jì)詞匯表:input, output, shift, sort, main 類(lèi)shift, sort, output 對(duì)象對(duì)象間
7、的消息傳遞構(gòu)件和連接件類(lèi)型:構(gòu)件類(lèi)型:對(duì)象連接件的類(lèi)型:為對(duì)象間的消息傳遞KWIC 的面向?qū)ο蟪绦蝮w系構(gòu)造風(fēng)格示意圖如下所示:根本的計(jì)算模型:Input 模塊從文本文件input.t*t 中一行一行讀取單Shift 模塊用于將單詞移位。 Sort 模塊將單詞進(jìn)展排序。Output 模塊將最終結(jié)果寫(xiě)到文本文件output.t*t 中KWIC 面向?qū)ο箫L(fēng)格的Java 語(yǔ)言實(shí)現(xiàn)見(jiàn)附件。面向?qū)ο笫斤L(fēng)格的優(yōu)點(diǎn)有:部實(shí)現(xiàn)的可修改性。因?yàn)槊嫦驅(qū)ο笫斤L(fēng)格要求封裝部數(shù)據(jù),隱藏部實(shí)現(xiàn),所以它可以在不影響外界的情況下,變更其部實(shí)現(xiàn)。易開(kāi)發(fā)、易理解、易復(fù)用的構(gòu)造組織。面向?qū)ο笫斤L(fēng)格將系統(tǒng)組織為一系列平等、自治的單位,
8、每個(gè)單位負(fù)責(zé)自身的正確性,不同單位之間僅僅是通過(guò)方法調(diào)用相連接,這非常契合模塊化思想,能夠建立一個(gè)易開(kāi)發(fā)、易理解、易復(fù)用的實(shí)現(xiàn)構(gòu)造。3、采用管道和過(guò)濾器體系構(gòu)造風(fēng)格實(shí)現(xiàn)KWIC 關(guān)鍵詞索引系統(tǒng)管道-過(guò)濾器風(fēng)格將系統(tǒng)的功能邏輯建立為部件集合。每個(gè)部件實(shí)例完成一個(gè)對(duì)數(shù)據(jù)流的獨(dú)立功能處理,它接收數(shù)據(jù)流輸入,進(jìn)展轉(zhuǎn)換和增量后進(jìn)展數(shù)據(jù)流輸出。連接件是管道機(jī)制,它將前一個(gè)過(guò)濾器的數(shù)據(jù)流輸出傳遞給后一個(gè)過(guò)濾器作為數(shù)據(jù)流輸入。連接件也可能會(huì)進(jìn)展數(shù)據(jù)流的功能處理,進(jìn)展轉(zhuǎn)換或增量,但連接件進(jìn)展功能處理的目的為了適配前一個(gè)過(guò)濾器的輸出和后一個(gè)過(guò)濾器的輸入,而不是為了直接承載軟件系統(tǒng)的需求。各個(gè)過(guò)濾器可以并發(fā)執(zhí)行。每
9、個(gè)過(guò)濾器都可以在數(shù)據(jù)輸入不完備的情況下就開(kāi)場(chǎng)進(jìn)展處理,每次接到一局部數(shù)據(jù)流輸入就處理和產(chǎn)生一局部輸出。這樣,整個(gè)的過(guò)濾器網(wǎng)絡(luò)就形成了一條流水線。設(shè)計(jì)詞匯表:Pipe, Filter 構(gòu)件和連接件類(lèi)型構(gòu)件:Filter 連接件:Pipe KWIC 的管道過(guò)濾器體系構(gòu)造風(fēng)格示意圖如下所示: input output Shifting sorting Input medium Filter Pipe System I/O 根本的計(jì)算模型:過(guò)濾器讀管道輸出流,過(guò)濾器寫(xiě)管道輸入流,過(guò)濾器通過(guò)對(duì)輸入流的增量計(jì)算來(lái)完成風(fēng)格的根本不變性:過(guò)濾器是獨(dú)立的實(shí)體,它們之間通過(guò)管道傳遞數(shù)據(jù)管道-過(guò)濾器風(fēng)格可以為所有過(guò)
10、濾器部件實(shí)例建立模塊實(shí)現(xiàn),每個(gè)過(guò)濾器部件實(shí)例被實(shí)現(xiàn)為一個(gè)單獨(dú)的模塊,可以為所有簡(jiǎn)單的管道連接件建立一個(gè)通用的模塊實(shí)現(xiàn),為每個(gè)復(fù)雜的管道連接件建立一個(gè)單獨(dú)的模塊實(shí)現(xiàn),相關(guān)聯(lián)過(guò)濾器部件的實(shí)現(xiàn)模塊要導(dǎo)入管道實(shí)現(xiàn)模塊。因?yàn)楣艿?過(guò)濾器風(fēng)格需要并發(fā)執(zhí)行,所以管道-過(guò)濾器風(fēng)格需要為所有過(guò)濾器部件實(shí)例和復(fù)雜連接件實(shí)例建立進(jìn)程實(shí)現(xiàn),每個(gè)過(guò)濾器部件實(shí)例和復(fù)雜連接件實(shí)例被實(shí)現(xiàn)為一個(gè)進(jìn)程。如果操作系統(tǒng)能夠提供管道機(jī)制,則進(jìn)程實(shí)現(xiàn)時(shí)的簡(jiǎn)單管道可以利用操作系統(tǒng)提供的機(jī)制來(lái)實(shí)現(xiàn)。此時(shí),所有的實(shí)現(xiàn)進(jìn)程都需要部署在同一個(gè)物理節(jié)點(diǎn)。如果有中間件平臺(tái)能夠提供管道機(jī)制,則進(jìn)程實(shí)現(xiàn)時(shí)的簡(jiǎn)單管道可以利用中間件平臺(tái)提供的機(jī)制來(lái)實(shí)現(xiàn)。此時(shí)
11、,各個(gè)實(shí)現(xiàn)進(jìn)程可以被部署在不同的網(wǎng)絡(luò)節(jié)點(diǎn)。KWIC 基于管道過(guò)濾器風(fēng)格的JAVA 語(yǔ)言實(shí)現(xiàn)見(jiàn)附件。實(shí)驗(yàn)結(jié)果:輸入文件:輸出文件:五、實(shí)驗(yàn)總結(jié)通過(guò)本次實(shí)驗(yàn)認(rèn)識(shí)到軟件體系構(gòu)造風(fēng)格是描述*一特定應(yīng)用領(lǐng)域中系統(tǒng)組織方式的慣用模式。軟件體系構(gòu)造設(shè)計(jì)的一個(gè)核心問(wèn)題是能否使用重復(fù)的體系構(gòu)造模式,即能到達(dá)體系構(gòu)造級(jí)的軟件重用。也就是說(shuō),能否在不同的軟件系統(tǒng)中,使用同一體系構(gòu)造。主/子程序體系構(gòu)造風(fēng)格、面向?qū)ο篌w系架構(gòu)風(fēng)格、管道過(guò)濾體系架構(gòu)風(fēng)格、用事件過(guò)程調(diào)用體系架構(gòu)風(fēng)格是四種常用的軟件體系構(gòu)造風(fēng)格,對(duì)于實(shí)現(xiàn)同一種功能的軟件可以分別采用以上的這四種風(fēng)格。在建立體系構(gòu)造過(guò)程中,不斷明確設(shè)計(jì)詞匯表、構(gòu)建和連接件的類(lèi)
12、型、可容許的構(gòu)造模式、根本的計(jì)算類(lèi)型、風(fēng)格的根本不變形、常用例子、優(yōu)缺點(diǎn)。通過(guò)明確這些問(wèn)題,可以理解一種體系構(gòu)造的根本特征,從而為實(shí)現(xiàn)體系構(gòu)造重用提供可能。通過(guò)對(duì)KWIC 進(jìn)展建模和實(shí)現(xiàn),讓我動(dòng)手把簡(jiǎn)單的軟件體系構(gòu)造代碼實(shí)現(xiàn),在程序里表達(dá)體系構(gòu)造的根本思想,拓展了數(shù)據(jù)構(gòu)造的根本知識(shí),將軟件設(shè)計(jì)思想表達(dá)在編碼環(huán)節(jié),為以后的體系構(gòu)造設(shè)計(jì)提供根底。KWIC 主程序/子程序風(fēng)格的Java 語(yǔ)言實(shí)現(xiàn):publicstaticvoid alphabetize() String tmpArray = new StringshiftedLineInde*es.size(); shiftedLineInde*e
13、s.toArray(tmpArray); Arrays.sort(tmpArray); sortedLineInde*es=tmpArray; publicstaticvoid Output(String outputAddress) FileWriter fw = null; try fw = new FileWriter(outputAddress); catch (IOE*ception e) / TODO Auto-generated catch block e.printStackTrace(); BufferedWriter bw=new BufferedWriter(fw); f
14、or(int i=0;isortedLineInde*es.length;i+) try bw.write(sortedLineInde*esi); bw.newLine(); catch (IOE*ception e) / TODO Auto-generated catch block e.printStackTrace(); try bw.close(); catch (IOE*ception e) / TODO Auto-generated catch block e.printStackTrace(); publicstaticvoid Input(String iFile) File
15、Reader fr=null; try fr=new FileReader(iFile); catch (FileNotFoundE*ception e) e.printStackTrace(); BufferedReader br=new BufferedReader(fr); te*tLines=new ArrayList(); try while(br.ready() te*tLines.add(br.readLine(); catch (IOE*ception e) e.printStackTrace(); publicstaticvoid CircularShift() shifte
16、dLineInde*es=new ArrayList(); for(int i=0;ite*tLines.size();i+) String orinLine=te*tLines.get(i); String sarray=orinLine.split( ); for(int j=0;j1) if(j=sarray.length-1) for(int k=0;k(sarray.length-1);k+) newLine=newLine+ +sarrayk; else for(int k=j+1;ksarray.length;k+) newLine=newLine+ +sarrayk; for(
17、int m=0;mj;m+) newLine=newLine+ +sarraym; shiftedLineInde*es.add(newLine); KWIC 面向?qū)ο箫L(fēng)格的Java 語(yǔ)言實(shí)現(xiàn):/InputStore.java import java.io.BufferedReader; import java.io.FileNotFoundE*ception; import java.io.FileReader; import java.io.IOE*ception; import java.util.ArrayList; public class InputStore public Arr
18、ayList ls; public InputStore(ArrayList ls) this.ls=ls; public void input(String inputFile) FileReader fr=null; try fr=new FileReader(inputFile); catch (FileNotFoundE*ception e) / TODO Auto-generated catch block e.printStackTrace(); BufferedReader br=new BufferedReader(fr); try while(br.ready() ls.ad
19、d(br.readLine(); catch (IOE*ception e) / TODO Auto-generated catch block e.printStackTrace(); /Output.java import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOE*ception; import java.util.ArrayList; public class Output public ArrayList ls; public Output(ArrayList ls) this.ls=ls
20、; public void output(String outputAddress) FileWriter fw = null; try fw = new FileWriter(outputAddress); catch (IOE*ception e) / TODO Auto-generated catch block e.printStackTrace(); BufferedWriter bw=new BufferedWriter(fw); for(int i=0;ils.size();i+) try bw.write(ls.get(i); bw.newLine(); catch (IOE*
21、ception e) / TODO Auto-generated catch block e.printStackTrace(); try bw.close(); catch (IOE*ception e) / TODO Auto-generated catch block e.printStackTrace(); /Alphabetizer.java import java.util.ArrayList; import java.util.Arrays; public class Alphabetizer public ArrayList ls; public Alphabetizer(Ar
22、rayList ls) this.ls=ls; public void alpha() String tmpArray = new Stringls.size(); ls.toArray(tmpArray); Arrays.sort(tmpArray); for(int i=0;ils.size();i+) ls.set(i, tmpArrayi); /CircularShifter.java import java.util.ArrayList; public class CircularShifter public ArrayList ls; public CircularShifter(
23、ArrayList ls) this.ls=ls; public void shift() ArrayList shiftedLineInde*es=new ArrayList(); for(int i=0;ils.size();i+) String orinLine=ls.get(i); String sarray=orinLine.split( ); for(int j=0;j1) if(j=sarray.length-1) for(int k=0;k(sarray.length-1);k+) newLine=newLine+ +sarrayk; else for(int k=j+1;ks
24、array.length;k+) newLine=newLine+ +sarrayk; for(int m=0;mj;m+) newLine=newLine+ +sarraym; shiftedLineInde*es.add(newLine); ls=shiftedLineInde*es; /Main.java import java.util.ArrayList; public class Main public static void main(String args) / TODO Auto-generated method stub ArrayListls=new ArrayList(
25、); InputStore inputStore=new InputStore(ls); inputStore.input(input.t*t); CircularShifter cs=new CircularShifter(ls); cs.shift(); Alphabetizer alp=new Alphabetizer(cs.ls); alp.alpha(); Output output=new Output(alp.ls); output.output(output.t*t); KWIC 基于管道過(guò)濾器風(fēng)格的JAVA 語(yǔ)言實(shí)現(xiàn)/Main類(lèi) package kwic_pipe; impo
26、rt java.io.File; import java.util.Scanner; public class Main public static void main(String args) File infile = new File(e:mykwic_in.t*t); File outfile = new File(e:mykwic_out.t*t); Scanner inputfile; Scanner outputfile; try inputfile = new Scanner(infile); outputfile = new Scanner(outfile); / 定義三個(gè)管
27、道 Pipe pipe1 = new Pipe(); Pipe pipe2 = new Pipe(); Pipe pipe3 = new Pipe(); / 定義四種過(guò)濾器 Input input = new Input(infile, pipe1); Shift shift = new Shift(pipe1, pipe2); Output output = new Output(pipe3, outfile); / 啟動(dòng)四種過(guò)濾器的線程 input.transform() shift. transform (); output. transform (); / 直接輸出結(jié)果 System.
28、out.println(- infile -); String str = null; while (inputfile.hasNe*tLine() str = inputfile.ne*tLine(); System.out.println(str); System.out.println(input end); Thread.sleep(3000); System.out.println(- outfile -); while (outputfile.hasNe*tLine() System.out.println(str); inputfile.close(); outputfile.c
29、lose(); catch (E*ception e) e.getMessage(); /Filter類(lèi) package kwic_pipe; import java.io.IOE*ception; public abstract class Filter /定義輸入管道 protected Pipe input; /定義輸出管道 protected Pipe output; private boolean isStart = false; Filter(Pipe input, Pipe output) this.input = input; this.output = output; / 防
30、止屢次調(diào)用,調(diào)用之后線程開(kāi)場(chǎng)執(zhí)行 public void start() if(!isStart) isStart = true; Thread thread = new Thread(); thread.start(); /線程的 run 方法 public void run() try this.transform(); catch (IOE*ception e) e.getMessage(); /將輸入數(shù)據(jù)轉(zhuǎn)換為所需數(shù)據(jù)并寫(xiě)入輸出管道 /由子類(lèi)實(shí)現(xiàn)抽象方法 protected abstract void transform()throws IOE*ception; Pipe類(lèi)packag
31、e kwic_pipe; import java.io.IOE*ception; import java.io.PipedReader; import java.io.PipedWriter; import java.io.PrintWriter; import java.util.Scanner; public class Pipe /輸入管道 private Scanner pipereader; /輸出管道 private PrintWriter pipewriter; public Pipe() PipedWriter pw = new PipedWriter(); PipedRead
32、er pr = new PipedReader(); try pw.connect(pr); catch (IOE*ception e) e.getMessage(); pipewriter = new PrintWriter(pw); pipereader = new Scanner(pr); /讀入一行數(shù)據(jù)到管道 /return 讀入的數(shù)據(jù) public String readerLine() throws IOE*ception return pipereader.ne*tLine(); /從管道輸出一行數(shù)據(jù) public void writerLine(String strline)
33、throws IOE*ception pipewriter.println(strline); /將讀管道關(guān)閉,調(diào)用該方法后,不能再?gòu)墓艿乐凶x數(shù)據(jù) /如不能關(guān)閉則拋出異 public void closeReader() throws IOE*ception pipereader.close(); /先刷新數(shù)據(jù),在將寫(xiě)管道關(guān)閉,調(diào)用該方法后,不能向管道中寫(xiě)數(shù)據(jù) /如不能關(guān)閉則拋出異常 public void closeWriter() throws IOE*ception pipewriter.flush(); pipewriter.close(); Alphabetizer類(lèi) package
34、 kwic_pipe; import java.io.IOE*ception; import java.util.ArrayList; import java.util.Collections; public class Alphabetizer e*tends Filter private ArrayList al = new ArrayList(); Alphabetizer(Pipe input, Pipe output) super(input, output); /對(duì)讀入的數(shù)據(jù)進(jìn)展排序 protected void transform() throws IOE*ception Str
35、ing templine = null; /讀入數(shù)據(jù) while(templine = input.readerLine() != null) al.add(templine); /按字母表排序 Collections.sort(al); /對(duì)排序后的數(shù)據(jù)進(jìn)展輸出 for(int i = 0; i al.size(); i+) output.writerLine(al.get(i); input.closeReader(); output.closeWriter(); Shift類(lèi) package kwic_pipe; import java.io.IOE*ception; import ja
36、va.util.ArrayList; public class Shift e*tends Filter /單詞的列表 private ArrayList wordlist = new ArrayList(); /重組后的行的列表 private ArrayList linelist = new ArrayList(); Shift(Pipe input, Pipe output) super(input, output); Override protected void transform() throws IOE*ception String templine = ; /讀數(shù)據(jù) while
37、(templine = input.readerLine() != null) /將數(shù)據(jù)拆分為不同單詞 this.lineSplitWord(templine); /將單詞重組為句子 this.rebination(); /輸出重組結(jié)果 for(int i = 0; i linelist.size(); i+) output.writerLine(linelist.get(i); /清空wordlist、linelist和templine wordlist.clear(); linelist.clear(); templine = ; input.closeReader(); output.closeWriter(); /從一行中提取單詞存入單詞表中 private void lineSplitWord(String line) String word = ; int i = 0; while(i line.length() if(line.charAt(i) != ) word += line.charAt(i); else wordlist.add(word); i+; private void reb
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年食品蒸發(fā)濃縮機(jī)械合作協(xié)議書(shū)
- 2025年塑料助劑:潤(rùn)滑劑合作協(xié)議書(shū)
- 2025年呼吸制氧合作協(xié)議書(shū)
- 2025年年4K超高清合作協(xié)議書(shū)
- 2025年脂環(huán)烴合作協(xié)議書(shū)
- 八年級(jí)英語(yǔ)下冊(cè) Unit 10 單元綜合測(cè)試卷(人教版 2025年春)
- 2024-2025學(xué)年黑龍江省佳木斯市富錦市第十小學(xué)四年級(jí)(上)期末數(shù)學(xué)試卷
- 2025道德與法治九年級(jí)第二學(xué)期中考教學(xué)工作計(jì)劃
- 鄂州市梁子湖區(qū)八年級(jí)上冊(cè)語(yǔ)文名著導(dǎo)讀《紅星照耀中國(guó)》
- 七年級(jí)上學(xué)期歷史試卷
- 江蘇省蘇州市2024-2025學(xué)年高三上學(xué)期1月期末生物試題(有答案)
- 銷(xiāo)售與銷(xiāo)售目標(biāo)管理制度
- 特殊教育學(xué)校2024-2025學(xué)年度第二學(xué)期教學(xué)工作計(jì)劃
- 2025年第一次工地開(kāi)工會(huì)議主要議程開(kāi)工大吉模板
- 第16課抗日戰(zhàn)爭(zhēng)課件-人教版高中歷史必修一
- 對(duì)口升學(xué)語(yǔ)文模擬試卷(9)-江西省(解析版)
- 無(wú)人機(jī)運(yùn)營(yíng)方案
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計(jì)規(guī)范
- NB-T 47013.15-2021 承壓設(shè)備無(wú)損檢測(cè) 第15部分:相控陣超聲檢測(cè)
- 隧道二襯承包合同參考
- 物理專業(yè)常用英語(yǔ)詞匯
評(píng)論
0/150
提交評(píng)論