软件体系结构2

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一、主程序-子程序调用体系结构组件:主程序-子程序连接件:调用返回机制优点:(1)有效地将一个较复杂的程序系统设计分解成许多易于控制和处理的子任务,便于开发和维护。(2)已被证明是成功的设计方法,可以被用于较大程序。缺点:(1)规模:程序超过10万行,表现不好;程序太大,开发太慢,测试越开越困难。(2)可重用性差、数据安全性差,难以开发大型软件和图形界面的应用软件。(3)把数据和处理数据的过程分离为相互独立的实体,当数据结构改变时,所有相关的处理过程都要进行相应的修改。(4)图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也很困难。我的程序:#includeiostream.husingnamespacestdintadd(intx,inty);//函数声明intmain()//主函数或主程序{inta,b;cinab;coutadd(a,b)endl;}intadd(intx,inty)//函数实现,或子函数{returnx+y;}组件:主函数main(),子函数swap()连接件:add(a,b)是对add(x,y)函数的调用return(x+y)是加法结果的实现二、面向对象体系结构组件:类和对象连接件:对象之间通过功能与函数调用实现交互优点:(1)复用和维护:利用封装和聚合提高生产力.因为对象对其他对象隐藏它的表示,所以可以改变一个对象的表示,而不会影响其他的对象。某一组件的算法与数据结构的修改不会影响其他组件,组件之间的依赖性降低,提高了复用度。(2)反映现实世界。(3)容易分解一个系统。缺点:(1)管理大量的对象:怎样确立大量对象的结构。(2)继承引起复杂度,关键系统中慎用。(3)必须知道对象的身份。(4)不是特别适合功能的扩展,为了增加新的功能,要么修改已有的模块,要么加入新的模块,从而影响性能。我的程序:publicclassA{privateintx;publicintXX(intx){returnx;}}publicclassB{publicintadd(Ad,intx){inty=d.XX(4);intz=y+x;returnz;}}publicclassProgram{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubAd=newA();Ba=newB();doubleresult=a.add(d,4);System.out.println(result);}}组件:三个类ABProgram连接件:doubleresult=a.add(d,4);inty=d.XX(4);通过第一个语句实现两个数的加,但是add中的两个参数一个是A的对象d,在add函数内部,现调用了d的函数XX实现返回原数运算,运算后的结果再与4相加,把相加的result结果返回。三、批处理体系结构组件:独立的应用程序连接件:某种类型的媒介优点:把任务分解成一系列固定顺序的计算单元,组件只通过数据传递交互,每一步必须在前一步结束后才能开始,数据必须是完整的,以整体的方式传递。缺点:构件粒度大,延迟高,实时性差。1.无交互性,用户一旦提交作业就失去了对其运行的控制能力。2.作业周转时间长,用户使用不方便。我的程序:程序1:将一批数据以二进制形式存放在磁盘文件中。#includefstreamusingnamespacestd;structpeople{charname[20];intage;charsex;};intmain(){peoplep[3]={Li,18,'f',Fun,19,'m',Wang,17,'f'};ofstreamoutfile(peo.dat,ios::binary);if(!outfile){cerropenerror!endl;abort();//退出程序}for(inti=0;i3;i++)outfile.write((char*)&p[i],sizeof(p[i]));outfile.close();return0;}程序2:将刚才以二进制形式存放在磁盘文件中的数据读入内存并在显示器上显示。#includefstreamusingnamespacestd;structpeople{stringname;intage;charsex;};intmain(){peoplep[3];inti;ifstreaminfile(peo.dat,ios::binary);if(!infile){cerropenerror!endl;abort();}for(i=0;i3;i++)infile.read((char*)&p[i],sizeof(stud[i]));infile.close();for(i=0;i3;i++){coutNO.i+1endl;coutname:p[i].nameendl;coutage:p[i].ageendl;coutsex:p[i].sexendlendl;}return0;}组件:程序1和程序2连接件:文件peo.dat四、管道-过滤器体系结构组件:过滤器连接件:管道优点:(1)使得系统中的构件具有良好的隐蔽性和高内聚、低耦合的特点。支持软件复用,允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成;只要提供适合在两个过滤器之间传送的数据,任何两个过滤器都可被连接起来;系统维护和增强系统性能简单:新的过滤器可以添加到现有系统中来,旧的可以被改进的过滤器替换掉;(2)允许对一些如吞吐量、死锁等属性的分析;(3)支持并行执行:每个过滤器是作为一个单独的任务完成,因此可与其它任务并行执行。缺点:(1)通常导致进程成为批处理的结构(2)不适合处理交互的应用(3)因为在数据传输上没有通用的标准,每个过滤器都增加了解析和合成数据的工作,这样就导致了系统性能下降,并增加了编写过滤器的复杂性。我的程序:importjava.io.*;importjava.util.*;publicclassTestPiped{publicstaticvoidmain(String[]args){senders=newsender();receiverr=newreceiver();PipedOutputStreamout=s.getOut();PipedInputStreamin=r.getIn();try{in.connect(out);s.start();r.start();}catch(Exceptione){e.printStackTrace();}}}classsenderextendsThread{PipedOutputStreamout=newPipedOutputStream();publicPipedOutputStreamgetOut(){returnout;}publicvoidrun(){Stringstr=发送;try{out.write(str.getBytes());out.close();}catch(Exceptione){e.printStackTrace();}}}classreceiverextendsThread{PipedInputStreamin=newPipedInputStream();publicPipedInputStreamgetIn(){returnin;}publicvoidrun(){byte[]buf=newbyte[1024];try{intlen=in.read(buf);System.out.println(从发送得到+newString(buf,0,len));in.close();}catch(Exceptione){e.printStackTrace();}}}组件:senderreceiver连接件:PipedOutputStreamout=s.getOut();PipedInputStreamin=r.getIn();in.connect(out);五.基于事件的隐式调用体系结构(1)组件是什么?连接件是什么?优点,缺点分别是什么?(2)编程实现一个基于事件的隐式调用体系结构的软件(功能不限,语言不限),并说明程序中的组件和连接件。答:(1)组件:对象或过程,并分类为以下更小的构件—过程或函数,充当事件源或事件处理器的角色—事件连接件:事件—过程绑定事件—事件绑定:在某些情况下,一个事件也可能触发其他事件,形成事件链优点:1为软件复用提供了强大的支持,功能扩展比较容易2为系统动态演化带来了方便3健壮性:一个构件出错将不会影响其他构件。4支持实现交互式系统(用户输入/网络通讯)5异步执行,不必同步等待执行结果6对事件的并发处理将提高系统性能缺点:1分布式的控制方式使得系统的同步、验证和调试变得异常困难:—组件放弃了对系统计算的控制,难以控制各模块之间的处理次序—关于正确性的推理难以保证—传统的基于先验和后验条件的验证变得不可能2数据交换的问题:—数据可通过事件直接在系统间传递(无调度模块时),但在具有独立调度模块的事件系统中,数据则需要经过调度模块的传递。在这些情况下,全局性能和资源管理成为了系统的瓶颈3使用更多的存储空间我的程序:publicclassbuttonextendsActivityimplementsOnClickListener{privateButtonbutton;protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_button1);button=(Button)findViewById(R.id.button1);button.setOnClickListener(this);}publicvoidonClick(Viewv){switch(v.getId()){caseR.id.button1:Toast.makeText(ButtonActivity.this,调用了隐式,Toast.LENGTH_SHORT).show();break;default:Toast.makeText(ButtonActivity.this,没有调用,Toast.LENGTH_SHORT).show();break;}}}参考别人的android自己稍微修改以上程序的组件:ButtonbuttononClickView以上程序的连接件:implementsOnClickListenerbutton.setOnClickListener(this);靠点击事件的调用六层次体系结构组件:各层次内部包含的构件连接件:层间的交互协议优点:(1)支持基于抽象程度递增的系统设计,有利于设计者对一个复杂系统进行分解;(2)局部依赖性,因为每一层至多和相邻的上下层交互,因此功能的改变通常影响相邻的上下层;(3)可复用性,如果某独立层保证了功能的完整性并且提供了文档化的接口,便可在多个语境中复用。(4)可替换性,只要提供的服务接口定义不变,同一层的不同实现可以交换使用。这样,就可以定义一组标准的接口,而允许各种不同的实现方法。(5)对标准化的支持。清晰定义并且广泛接受的抽象层次能够促进实现标准化的任务和接口开发,同样接口的不同实现能够互换使用。(6)可测试性。具有定义明确的层接口以及交换层接口的各个实现的能力提高了可测试性。缺点:(1)并不是每个系统都可以很容易地划分为分层的模式,甚至即使一个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把一些低级或高级的功能综合起来;(2)效率的降低(3)很难找到合适的、正确的层次抽象方法我的程序:Servlet:BuyServlet:packagecom.yxq.servlet;importjava.io

1 / 30
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功