


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、?软件体系结构?实验:软件体系结构风格之应用、 实 验目的通过KWIC实例分析,理解和掌握软件体系结构风格设计与实现。二、实验容多种软件风格设计与实现之KWIC实例:1. 采用主/子程序体系结构风格实现 KWIC关键词索引系统2. 采用面向对象体系架构风格实现 KWIC关键词索引系统3采用管道过滤体系架 构风格实现KWIC关键词索引系统4采用事件过程调用体系架构风格实现 KWIC关键词索引系统三、实验要求与实验环境熟练棠握基于主/子程序体系结构风格的KWIC关键词索引系统,在此根底 上, 完成基于面向对象体系架构风格的 KWIC关键词索引系统设计与实现。选做基于 管道过 滤体系架构风格的KWI
2、C关键词索引系统;选做基于事件过程调用体系架构风格的KWIC 关键词索引系统。实验课前完成实验报告的实验目的、实验环境、实验容、实验操作过程等 容;实验 课中独立/团队操作完成实验报告的实验操作、实验结果及结论等容;每人一台PC机,所需软件 Win200 歹 XP、UML 工具(EclipseUML/ Rose/Visio/StartUML/# Eclipse/MyEclipse> JDK6.0等。四、实验操作1、采用主 / 子程序体系结构风格实现 KWIC 关键词索引系统主程序/子程序风格(Main Program/Subroutine Style)将系统组织成层次结 构,包括一个主程
3、序和一系列子程序。主程序是系统的控制器,负责调度各子程 序的执行。各子程序乂是一个局部的控制器,调度其子程序的执行。设计词汇 表:主程序main()z子程序shiftf), sort()方法,方法的调用,返回构件和连接件类型:构件:各类子程序,如shift(),sort()连接件:方法的调用根本的计算模型:子程序有shift()z sort()方法,shift()对单词进行?移位,sort()方法对单词进行 排序风格的根本不变性:主程序有顺序地调用子程序,单线程控制I/O MediumMaster Control(Main)inputCircular ShifterAlphabetizerou
4、tput1 長1KWIC的主/子程序体系结构风格示意图如下所示:口 Moudles (Functions)主程序/子程序风格的重要设计决策与约束有:?基于声明-使用(程序调用)关系建立连接件,以层次分解的方式建立系统部件,共同组成层次结构。?每一个上层部件可以“使用下层部件,但下层部件不能“使用上层部件,即不允许逆方向调用。?系统应该是单线程执行。主程序部件拥有最初的执行控制权,并在“使用中将控制权转移给下层子程序。下层的?子程序只能够通过上层转移來获得控制权,可以在执行中将控制权转交给子子程序,并在自身执行完成之后必须将控制权还交给上层部件。KWIC主程序/子程序风格的Java语言实现见附件
5、。主程序 / 子程序风格的主要实现机制是模块实现,它将每个子程序都实现为一 个模 块,主程序实现为整个系统的起始模块。依照抽象规格的层次关系,实现模 块也被组织 为相应的层次机构,通过导入 / 导出关系相连接。需要强调的是,虽然主程序 / 子程序风格非常类似于结构化程序的结构,但是 主程 序/ 子程序风格是基于部件与连接件建立的高层结构。它的部件不同于程序, 而是更加 粗粒度的模块。而且,在部件的实现模块部,可以使用结构化方法,也 可以使用面向对 象方法,这并不阻碍整个系统的高层结构符合主程序 / 子程序风格 的约定。主程序 / 子程序风格的优点有: 流程清晰,易于理解。强控制性。严格的层次分
6、解和严格的控制权转移使得 主程序/ 子程序风格对程序的实际执行过程具备很强的控制能力,这带來了一个特点:如果一个子程序所连接的子子程序是正确的, 那么就很容易保证该子程序的 “正确性。所以, 主程序 / 子程序风格比其他常见风格更能控制程序的“正确 性。2、采用面向对象体系结构风格实现 KWIC 关键词索引系统 面向对象式风格,需要强调说明的是它的“对象是部件,属于高层结构的 元素, 虽然名称相同,但它并不是面向对象方法中所述的“对象实体。“面向 对象式风格 的命名是因为它借鉴了面向对象方法的思想,而不是因为它使用面 向对象方法实现体系 结构,这也是在该风格名称中有一个“式字的原因。面向对象式
7、风格的主要实现机制是模块实现,它将每个对象部件实例都实现 为一个 模块。存在连接的对象部件实例之间会存在模块的导入 / 导出关系。每个模块部可以是基于面向对象方法的实现,也可以是基于结构化方法的实现设计词汇表: in put, output, shift, sort, main 类shift, sort, output对象 对象间的消息传递构件和连接件类型(1)构件类型:对象连接件的类型:为对象间的消息传递CircMWerShiffi呷LineStorageOutput MediumAlphabetizer utputKWIC的面向对象程序体系结构风格示意图如下所示eLegendModulei
8、XObje cis)PublicMtrthodIrri? oc? tionInpuVI/O MediumSystem I/OIn put Medium根本的计算模型:In put模块从文本文件in put.txt中一行一行读取单Shift模块用于将单词移位。Sort模块将单词进行排序。Output模块将最终结果写到文本文件 output.txt中KWIC面向对象风格的Java语言实现见附件。面向对象式风格的优点有:部实现的可修改性。因为面向对象式风格要求封装部数据,隐藏部实现,所以它可以在不影响外界的情况下,变更其部实现。易开发、易理解、易复用的结构组织。面向对象式风格将系统组织为一系列 平等
9、、 自治的单位,每个单位负责自身的“正确性,不同单位之间仅仅是通过 方法调用相连 接,这非常契合模块化思想,能够建立一个易开发、易理解、易复 用的实现结构。3、采用管道和过滤器体系结构风格实现 KWIC 关键词索引系统管道- 过滤器风格将系统的功能逻辑建立为部件集合。每个部件实例完成一个对数据流的独立功能处理,它接收数据流输入,进行转换和增量后进行数据流输 出。连接件 是管道机制,它将前一个过滤器的数据流输出传递给后一个过滤器作 为数据流输入。连 接件也可能会进行数据流的功能处理,进行转换或增量,但连 接件进行功能处理的目的 为了适配前一个过滤器的输出和后一个过滤器的输入, 而不是为了直接承载
10、软件系统的 需求。各个过滤器可以并发执行。每个过滤器都可以在数据输入不完备的情况下就 开始进 行处理,每次接到一局部数据流输入就处理和产生一局部输出。这样,整 个的过滤器网 络就形成了一条流水线。设计词汇表:Pipe, Filter构件和连接件类型构件: Filter连接件: PipeKWIC的管道过滤器体系结构风格示意图如下所示:根本的计算模型:过滤器读管道输出流,过滤器写管道输入流,过滤器通过对输入流的增量计算 來完成风格的根本不变性:过滤器是独立的实体,它们之间通过管道传递数据管道-过滤器风格可以为所有过滤器部件实例建立模块实现,每个过滤器部件 实例 被实现为一个单独的模块,可以为所有简
11、单的管道连接件建立一个通用的模 块实现,为 每个复杂的管道连接件建立一个单独的模块实现,相关联过滤器部件 的实现模块要导入 管道实现模块。因为管道-过滤器风格需要并发执行,所以管道-过滤器风格需要为所有过滤器 部件 实例和复杂连接件实例建立进程实现,每个过滤器部件实例和复杂连接件实 例被实现为 一个进程。如果操作系统能够提供管道机制,那么进程实现时的简单管道可以利用操作 系统提 供的机制來实现。此时,所有的实现进程都需要部署在同一个物理节点。 如果有中间件 平台能够提供管道机制,那么进程实现时的简单管道可以利用中间 件平台提供的机制來 实现。此时,各个实现进程可以被部署在不同的网络节点。KWI
12、C基于管道过滤器风格的JAVA语言实现见附件实验结果:输入文件:Hello WDrld TTils is Paul Ing输出文件:mykwi c_out.txt - |文件D歸格式COWV帮助但Hello WorldThis is Pauli ng Pauli ng This is World Hello is Pauli ng This五、实验总结通过本次实验认识到软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。软件体系结构设计的一个核心问题是能否使用重复的体系结构模式,即能到达体系结构级的软件重用。也就是说,能否在不同的软件系统中, 使用同 一体系结构。主/ 子程序体系结
13、构风格、面向对象体系架构风格、管道过滤体系架构风格、用事件过程调用体系架构风格是四种常用的软件体系结构风格,对于实现同一种 功能的软件 可以分别采用以上的这四种风格。在建立体系结构过程中,不断明确 设计词汇表、构建 和连接件的类型、 可容许的结构模式、 根本的计算类型、 风格 的根本不变形、 常用例子、 优缺点。通过明确这些问题,可以理解一种体系结构 的根本特征,从而为实现体系结构 重用提供可能。通过对KWIC进行建模和实现,让我动手把简单的软件体系结构代码实现, 在程序 里表达体系结构的根本思想,拓展了数据结构的根本知识,将软件设计思 想表达在编码 环节,为以后的体系结构设计提供根底。KWI
14、C主程序/ f程序风格的Java诰言实现:public static void alphabetize()toArray(tmpArray);String tmpArray = new StringshiftedLinelndexes ? size(); shiftedLinelndexes Arrays ? sort(tmpArray);sortedLinelndexes=tmpArray;public static void Output(String outputAddress)FileWriter fw = null;try fw = new FileWriter(outputAddr
15、ess); catch (IOException e) e.printStackTrace();bwe.n?ew?Lipnrein(p)t;rSintatStackTcrkaTcreace/ TODO Auto-generated catch blockBufferedWriter bw=new BufferedWriter(fvj); for(int i=0;i<sortedLinelndexes ? length;i+)try bw.write(sortedLinelndexesi); catch (IOException e) / TODO Auto-generated catch
16、 block try bw.close(); catch (IOException e) / TODO Auto-generated catch blockpublic static void Input(StringiFile) FileReader f r=null;try fr=new FileReader(iFile); catch (FileNotFoundException e) e.printStackTrace();BufferedReader br=new BufferedReader(fr); textLi ArrayList<String>();try whi
17、le(br. ready()textLines ? add(br.readLine(); catch (IOException e) public static void CircularShift() ArrayList<String>(); i=0;i<textLines.size();i+) e=textLi nes sarray=orinLine.split(e.printStackTrace();get (i); "for(int j=0;j<sarray ? length;j+) newLine 二 sanrayj;if(j=sarray ? le
18、ngth-l)shiftedLinelndexes=new for(intStringStr ingString if(sarray ? length>l)for(int k=0;k<(sarray.length-1);k+) newLine 二 newLine+" H+sarrayk;elsefor(int k=j+l;k<sarray ? length;k+) newLine 二 newLine+" H+sarrayk;newLine=newLine+"for(int m=0;m<j;m+)H+sarraym;shiftedLineln
19、dexes ? add(newLine); KWIC面向对象风格的Java语言实现:/I 门戸 11 七 5 七 0 厂 6? java importjava ? io.BufferedReader; importjava ? io.FileNotFoundException; importjava ? io.匚 1.10 只 63?|0 厂;importjava ? io.IOException; importjava ? uti1? ArrayList; public classInputStore publicArrayList<String> Is;public Input
20、Store(ArrayList<String> ls) this ? ls=ls; public void input(StringinputFile)FileReader 仆=门 1|11;try fn=new FileReader(inputFile); catch(FileNotFoundException e) / TODO Autogenerated catch block R.printStackTraceC);BufferedReader br=new BufferedReader(fr); try while(br.ready()Is ? add(br ? read
21、Line(); catch (IOException e) / TODOAuto-genegated catch block e ? pri 门七 5 七 3。1<丁厂 8?0 ( ); /Output importjava ? io.BufferedWriter; importjava ? io.importjava ? io.IOException; import java ? uti1? ArrayList; public class Output public ArrayList<String> Is;public Output(ArrayList<String
22、> ls) this? ?public void output(String outputAddress)FileWriter fw = null; try fw = new FileWriter(outputAddress); catch (IOException e) / TODO Autogenerated catch block e.printStackTrace();BufferedWriter bw 二 new BufferedWriter(fw);for(int i=0;i<ls.size();i+)try bw ? write(Is.get(i); bw ? new
23、Line(); catch (IOException e) / TODO Auto-generated catch blocke? pri 门七 5 七 3 心 1<丁厂 8?0();try bw.close(); catch (IOException e) / TODO Auto-genewted catch blocke. printStackTraceC );/Alphabetizer ? java importjava ? uti1? ArrayList; import java ? uti1? Arrays; public class Alphabetizer public A
24、rrayList<String> Is; publicAlphabetizer(ArrayList<String>ls) this ? ls=ls;public void alpha()String tmpArray = new StringIs.size();Is ? toArray(tmpArray);Arrays ? sort(tmpArray); for(inti=0;i<ls?size();i+)(i, tmpArrayi);Is ? set/CircularShifter ? jmva importjava ? uti1? ArrayList; pub
25、lic class CircularShifter public ArrayList<String> Is; public CircularShifter(ArrayList<String> ls) this ? ls=ls;public void shift()ArrayList<String> shiftedLinelndexes 二 new ArrayList<String>(); i=0;i<ls?size();i+)String orAinLine=ls ? get(i);String sarray =orinLine, spli
26、t();for(intfor(int j=0; j<sarray ? length; j+)String newLine 二 j ;if(sarray ? length>l)if(j=sarray ? length-l)k=0;k<(sarray.length-1);k+)newLine 二 newLine+" "+sarrayk;elsefor(int k=j+1 ;k<sarray ? length;k+) newLine 二 newLine+" "+sarrayk;for(intfor(int m=0;m<j;m+)n
27、ewLine 二 newLine+""+sarraym;shiftedLinelndexes ? add(newLine);ls=shiftedLinelndexes;/Main? java import java ? uti1? ArrayList; public class Main public static void main(String args) / TODO Auto-generated method stubArrayList<String>ls=new ArrayList<String>();InputStore inputSto
28、re=new InputStore(ls); inputStore ? input("inputCircularShifter cs=new CircularShifter(ls); cs ? shift();Alphabetizer alp 二 new Alphabetizer(cs ? ls); alp ? alphm();Output output=new Output(alp ? ls);output ? output("output ? txt"); KWIC基于管道过滤器风格的JAVA语言实现/Main 类 package kwic_pipe; imp
29、ort java ? io.File; import java ? util? Seanner;public class Main public static void main(String args) File infile = newFile("e:mykwic_in ? txt");File outfile = new File("e:mykwic_out.txt");Seannerin putf ile = new outputfile =/ 定义三个Seannen inputfile;outputfile;trySeanner(infile)
30、;new Seanner(outfile);管道Pipe pipel = new Pipe();Pipe pipe2 = new Pipe();Pipe pipe3 = new Pipe(); / 定义四种过滤器In put in put = new In put(i nfia pipel);Shift shift = new Shift(pipel ? pipe2);Output output = new OutputCpipeSA outfile);/ 启动四种过滤器的线程input? tra 门打。皿 ()shift? transform ();output ? transform ()
31、;/ 直接输出结果System.out ? println( ? hasNextLine() str = inputfile ? nextLine(); System.out ? pristr);System.out ? println("input end H); Thread.sleep(3000);System.out ? println( infileoutfile"); String str = null; while (inputfile") ;(outputfile ? hasNextLine( ) ) ? out.printIn(stn);clos
32、e(); outputfile ? close();whileSysteminputfile ?catche.getMessag(Exception e) e();/Filter 类 package kwic_pipe; import java ? io ? IOException; public abstract class Filter / 定义输入管逍protected Pipe in put; / 定义输出管道 protected Pipe output; private boolean isStart = false;Filter(Pipe in putA Pipeoutput)th
33、is ? input = input;this ? output = output;/ 防止屡次调用,调用之后线程开始执 行 public void start()if(!isStart)isStart = true;Thread thread = new Thread(); thread ? start();/ 线程的 wn 方法public void run()trythis ? 七厂 3nsformC);catch (IOExceptione)R ? getMessage(); 将输入数据转换为所需数据并写入输出管道/ 由子类实现抽象方法 protected abstract void
34、trathrows IOException; Pipe 类package kwic_pipe;import java ? io.IOException;import java ? io ? PipedReader;import java ? io ? PipedWriter;import java ? io ? Pri 门七 0: 1 七 6“;import java ? util.Seanner;public class Pipe 输入管道private Seannen pipereader;输出管道private PrAintWriter pipewriter;public Pipe()P
35、ipedWriter pw = new PipedWriter();PipedReader pr = new PipedReader();trypw.connect(pr); catch (IOException e)e.getMessage();pipewriter = new PnintWriter(pvj); pipereader = new SeannerApr);/ 读入一行数据到管道/return 读入的数据 public String readerLine() throwsIOException return pipereader ? nextLine();/ 从管道输出一行数据
36、public void writerLine(String strline) throws IOExceptionpipewriter ? println(strline);将读管道关闭,调用该方法后,不能再从管道中读数据/ 如不能关闭那么抛岀异public void closeReader() throwsIOException pipereader ? close();/ 先刷新数据,在将写管道关闭,调用该方法后,不能向管道中写数据 如不能关闭那么抛岀异常 public void closeWriter() throwsIOException pipewriter.flush(); pip
37、ewriter ? close(); Alphabetizer 类package kwic_pipe;import java ? io.IOException; importjava ? uti1? ArrayList; importjava ? uti1? Collections; public classAlphabetizer extends Filterprivate ArrayList<String> al = new ArrayList<String>();Alphabetizer(Pipe in putA Pipeoutput)super(input ?
38、output);/ 对读入的数据进行排序protected void transfo m() throws IOException String tempiine = null;读入数据while( (templi ne = in put ?03?|0 厂 1_匚 ne() !=nul1)al? add(templine);/按字母表排序Collectio ns.sort(al);对排序后的数据进行输出for(int i = 0; i < al ? size();i+) in putoutput ? writerLine(al ? get(i); closeReader();output
39、 ? closeWriter(); Shift 类 packagekwic_pipe;import java ? io ? IOException; impontjava ? util ? ArrayList; public classShift exte nds Filter单词的列表private ArrayListvStri ng> wordlist = new ArrayListvStri ng>();/重组后的行的列表private ArrayListvString> linelist = new ArrayListvString>();Shift(Pipe
40、in putA Pipe output)super(input ? output);Overrideprotected void transfo m() throws lOException Stri ng templi ne =""将数据拆分为不同单词/读数据while( (tempi ine = in put ?63?|0 厂 1_匚 ne() ! = nu 11)this ? lin eSplitWor'dCtempli ne);将单词重组为句子this ? recomb in ati on();/输出重组结果for(int i = 0; i < linelist ? size();i+)output ?ne(l in elist ? ge/ 淸空 wordlist x linelist 和 templine wordlist ? clear();lin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 畜牧养殖场环境治理与保护技术的研发与推广考核试卷
- 私募智能穿戴设备考核试卷
- 礼仪用品企业法律风险防范考核试卷
- 碳中性设计策略考核试卷
- 电机在电力行业能源政策与法规制定与实施的应用考核试卷
- 上海欧华职业技术学院《化工过程开发与设计》2023-2024学年第二学期期末试卷
- 天津医学高等专科学校《人文科学概论》2023-2024学年第二学期期末试卷
- 上海师范大学《仿真优化与分析》2023-2024学年第二学期期末试卷
- 徐州幼儿师范高等专科学校《学前儿童艺术教育II(美术)》2023-2024学年第一学期期末试卷
- 梧州职业学院《表面复合材料》2023-2024学年第二学期期末试卷
- 饰品干货知识培训课件
- 2024-2030年中国高纯铜行业发展监测及发展趋势预测报告
- 2022城市道路照明设施养护维修服务规范
- 企业员工环保培训
- 2024年9月21日浙江省事业单位统考《职业能力倾向测验》真题及答案
- 兽医病理学基础试题及答案
- 2025届金丽衢十二校高三语文第二次联考考场高分作文点评:“效率至上”与“深度求索”
- T-CNSAIA 005-2024 纯钛真空杯标准
- 转正述职报告与工作展望
- 抖音来客本地生活服务餐饮商家代运营策划方案
- 《乡村治理理论与实践》课件第五章 乡村治理的机制
评论
0/150
提交评论