资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,软件体系结构风格,软件框架设计的核心问题是:能否复用已经成型的体系结构,方案,不同系统的设计方案存在着许多共性问题,把这些共性部分抽取出来,就形成了具有代表性的和可广泛接受的体系结构风格,什么是软件体系结构风格?,软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用,模式。,软件体系结构风格的作用是什么?,1.,指导,如何将各个模块和子系统有效地组织成一个完整的,系统。,2.,有关风格的使用带来了设计者的交流形式。关于设计元素的词汇促进了设计者理解和交流,。,3.,使用风格能够使代码的重用性得到提高。当用不同的系统时,基本的架构代码风格不需要修改,它能够用于不同的系统中。,体系结构风格,对于高质量的软件产品而言,首先要为其选择合适的体系结构风格,这样就能够更好地重用已有的设计方案和实现,方案,体系结构,风格最关键的四要素,提供一个词汇表,定义一套配置规则,定义一套语义解释原则,定义对基于这种风格的系统所进行的分析,体系结构的风格有哪些?,管道,-,过滤器风格,面向对象风格,事件驱动风格,分层风格,数据共享风格,解释器风格,反馈控制环风格,特点:,1.,每个构件都有输入输出,构件完成对输入数据的处理产生输出。,2.,构件之间相对独立,相互之间无交互状态,非邻近过滤器不共享任何,信息。,3.,整个体系结构的最终输出与格构件执行的顺序无关。,词汇:,过滤器:构件,管道:连接,管道,-,过滤器风格,优点,使得,软构件具有良好的隐蔽性和高内聚、低耦合的特点;,允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成;,支持软件重用。只要提供适合在两个过滤器之间传送的数据,任何两个过滤器都可被连接起来;,系统维护和增强系统性能简单。新的过滤器可以添加到现有系统中来;旧的可以被改进的过滤器替换掉;,允许对一些如吞吐量、死锁等属性的分析;,支持并行执行。每个过滤器是作为一个单独的任务完成,因此可与其它任务并行执行。,缺点,通常导致进程成为批处理的结构。这是因为虽然过滤器可增量式地处理数据,但它们是独立的,所以设计者必须将每个过滤器看成一个完整的从输入到输出的转换。,不适合处理交互的应用。当需要增量地显示改变时,这个问题尤为严重。,因为在数据传输上没有通用的标准,每个过滤器都增加了解析和合成数据的工作,这样就导致了系统性能下降,并增加了编写过滤器的复杂性,。,难以进行错误处理,管道,/,过滤器结构的固有特性,决定了很难制定错误处理的一般性策略,实例:,传统的编译器是管道,/,过滤器体系结构风格的一个实例,这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。,特点:,1.,对象是构件。,2.,在对象和对象之间,通过函数调用和过程调用来进行,交互。,面向对象风格,优点,一个对象对外界隐藏了自己的详细信息,改变一个对象的表示,不会影响系统的其它,部分,继承和封装方法为对象复用提供了技术支持,。,对象将数据和操作封装在一起,提高了系统内聚性,减小了模块之间的耦合程度,使系统更容易分解为既相互作用又相互独立的对象集合,缺点:,如果,一个对象要调用另一个对象,则必须知道它的标识和名称,会,产生连锁反应,如果一个对象的标识发生改变,那么必须修改所有显式调用它的其它对象,并消除由此引发的副作用,构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其它构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用,。,特点:,1.,构件是模块,模块可以是过程也可以是事件的集合。,2.,连接件:,往往是以过程之间的隐式调用,(Implicit Invocation),来实现的,事件驱动风格,例:观察者模式,public interface Subjectpublic void,attach,(Observer,observer);public void,detach,(Observer,observer);,void,notifyObservers,();,public class,ConcreteSubject,implements Subject,public void attach(Observer observer),observersVector.addElement,(observer);,public void detach(Observer observer),observersVector.removeElement,(observer);public void,notifyObservers,()Enumeration,enumeration,=observers();while(,enumeration.hasMoreElements,()(Observer),enumeration.nextElement,().update();public Enumeration observers()return(,(,Vector),observersVector.clone,().elements();private Vector,observersVector,=new,java.util.Vector,();,public interface Observervoid update();,public static void main(String args),Subject s=new ConcreteSubject();,s.attach(new Observer()public void update(),System.out.println(ok);,);,s.notifyer();,优点:,事件,声明者不需要知道哪些构件会响应事件,因此,不能确定构件处理的先后顺序,甚至不能确定事件会引发哪些过程调用,提高,了软件复用能力,只要在系统事件中注册构件的过程,就可以将该构件集成到系统中,便于,系统升级,只要构件名和事件中所注册的过程名保持不变,原有构件就可以被新构件所替代,缺点:,构件放弃了对系统计算的控制。一个构件触发一个事件时,不能确定其它构件是否会响应它。而且即使它知道事件注册了哪些构件的构成,它也不能保证这些过程被调用的顺序。,数据交换的问题。有时数据可被一个事件传递,但另一些情况下,基于事件的系统必须依靠一个共享的仓库进行交互。在这些情况下,全局性能和资源管理便成了问题,实例:,1.Debugger,2.,在用户界面中分离数据和表示,特点:,分层系统采用多个层次组织,每一层必须起两个作用:,(,1,)使用下层提供的功能。,(,2,)为上层提供服务。,分层风格,public,interface,StudentDAO,(),List,selectAll,(),Student Select(,int,id),void update(Student s),void delete(,int,id),void add(Student s),public class,StudentDAOImpl,(),.,public class,StudentBusiness,StudentDao,dao,;,public Student(,StudentDao,dao,),this.dao,=,dao,public list,studentChoice,(List ids),List list=new,ArrayList,();,for(,int,i=0;i,ids.size,();i+),int,id=,list.get,(i);,Student s=,dao.select,(id);,list.add,(s);,return list;,优点,支持,基于抽象程度递增的系统设计,使设计者可以把一个复杂系统按递增的步骤进行分解;,支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻的上下层;,支持重用。只要提供的服务接口定义不变,同一层的不同实现可以交换使用。这样,就可以定义一组标准的接口,而允许各种不同的实现方法,。,缺点:,并不是每个系统都可以很容易地划分为分层的模式,甚至即使一个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把一些低级或高级的功能综合起来;,很难找到一个合适的、正确的层次抽象方法。,实例:,操作系统、数据库系统、计算机网络协议组,数据共享风格也称为仓库风格,有两种不同类型的软件元素:,一种是中央数据单元,也称为资源库,用于表示系统的当前状态,另一种是相互依赖的构件组,中央数据单元和构件之间可以进行信息交换,这是数据共享体系结构的技术实现基础,数据共享体系结构风格,根据所使用的控制策略不同,数据共享体系结构可以分为两种类型:,一种是传统的数据库,另一种是黑板,如果由输入流中的事件来驱动系统进行信息处理,把执行结果存储到中央数据单元中,则这个系统就是数据库应用系统,如果由中央数据单元的当前状态来驱动系统运行,则这个系统就是黑板应用系统,一个典型的黑板型数据共享系统包括以下三个部分:,知识源:知识源中包含独立的、与应用程序相关的知识,知识源之间不直接进行通讯,它们之间的交互只通过黑板来完成。,黑板数据结构:黑板数据是按照与应用程序相关的层次来组织的解决问题的数据,知识源通过不断地改变黑板数据来解决问题。,控制:控制完全由黑板的状态驱动,黑板状态的改变决定使用的特定知识。,黑板模式对于无确定性求解策略的问题比较有用,在专家系统中,这种模式应用的比较广泛。,例:问题:设字符转换规则,ABC,ACD,BCG,BEF,DE,已知:,A,,,B,求:,F,一、综合数据库,x,,其中,x,为字符,二、规则集,1,,,IF AB THEN C,2,,,IF AC THEN D,3,,,IF BC THEN G,4,,,IF BE THEN F,5,,,IF D THEN E,三、控制策略,顺序排队,四、初始条件,A,,,B,五、结束条件,Fx,综合数据库,可触发规则,被触发规则,A,,,B,(,1,),(,1,),A,,,B,,,C,(,2,)(,3,),(,2,),A,,,B,,,C,,,D,(,3,)(,5,),(,3,),A,,,B,,,C,,,D,,,G,(,5,),(,5,),A,,,B,,,C,,,D,,,G,,,E,(,4,),(,4,),A,,,B,,,C,,,D,,,G,,,E,,,F,1,,,IF AB THEN C 2,,,IF AC THEN D,3,,,IF BC THEN G 4,,,IF BE THEN F,5,,,IF D THEN E,求解过程,例:传教士与野人问题(,M-C,问题),问题:,N,个传教士,,N,个野人,一条船,可同时乘坐,k,个人,要求在任何时刻,在河的两岸及船上,传教士人数不能少于野人的人数。,问:,如何过河。,以,N=3,,,k=2,为例求解。,1.,解决问题的多方法性:,对于一个专家系统,针对于要解决的问题,如果在其领域中没有独立的方法存在,而且对解空间的完全搜索也是不可行的,在黑板模式中可以用多种不同的算法来进行试验,并且也允许用不同的控制方法。,2.,具有可更改性和可维护性:,因为在黑板模式中每个知识源是独立的,彼此之间的通信通过黑板来完成,所以这使整个系统更具有可更改性和可维护性。,优点:,3,.,有可重用的知识源:,由于每个知识源在黑板系统中都是独立的,如果知识源和所基于的黑板系统有理解相同的协议和数据,我们就可以重用知识源。,4.,支持容错性和健壮性:,在黑板模式中所有的结果都是假设的,并且只有那些被数据和其它假设强烈支持的才能够生存。这对于噪声数据和不确定的结论有很强的容错性。,1.,测试困难:,由于黑板模式的系统有中央数据构件来描述系统的体现系统的状态,所以系统的执行没有确定的顺序,其结果的可再现性比较差,难于测试。,2.,不能保证有好的求解方案:,一个黑板模式的系统所提供给我们的往往是所解决问题的一个百分比,而不是最佳的解决方案。,3.,效率低:,黑板模式的系统在拒绝错误假设的时候要承受多余的计算开销,所以导致效率比较低。,缺点,4.,开发成本高:,绝大部分黑板模式的系统需要用几年的时间来进化,所以开发成本较高。,5.,缺少对并行机的支持:,黑板模式要求黑板上的中心数据同步并发访问,所以缺少对不并行机的支持。,数据共享风格实例:专家系统、语音识别等,在开发具有人机界面的软件系统时,比较适合使用模型,-,视图,-,控制器体系结构,在,MVC,结构中,主要包括模型、视图和控制器:,模型,是应用程序的核心,封装了问题的核心数据、逻辑关系和计算功能,提供了处理问题的操作过程,视图,是模型的表示,提供了交互界面,为用户显示模型信息,控制器,负责处理用户与系统之间的交互,为用户提供操作接口,MVC体系结构风格,MVC,体系结构具有以下优点:,多个视图与一个模型相对应,变化,-,传播机制确保了所有相关视图都能够及时地获取模型变化信息,从而使所有视图和控制器同步,便于维护,具有良好的移植性,由于模型独立于视图,因此,可以方便地实现不同部分的移植,系统被分割为三个独立的部分,当功能发生变化时,改变其中的一个部分就能够满足要求,MVC,体系结构风格也存在着一些问题:,增加了系统设计和运行复杂性,视图与控制器连接过于紧密,妨碍了二者的独立重用,视图访问模型的效率比较低,package,mypack,;,import com.opensymphony.xwork2.ActionSupport,;,public class,UserAction,extends,ActionSupport,private String username;,private String,userpass,;,public String,getUsername,(),return username;,public void,setUsername,(String username),this.username,=username;,public String,getUserpass,(),return,userpass,;,public void,setUserpass,(String,userpass,),this.userpass,=,userpass,;,Override,public String execute()throws Exception,if(,Mike.equals,(username)&123.equals(,userpass,),|,张三,.equals(username)&,abc,.equals(,userpass,),return success;,else,return error;,/,Success.jsp,/,Error.jsp,struts2,org.apache.struts2.dispatcher.FilterDispatcher,struts2,/*,用户名,:,密,&,nbsp,;&,nbsp,;,码,:,特征,基于解释器风格的系统核心在于虚拟机。,一个基于解释器风格的系统通常包括:正在被解释执行的伪码和解释引擎;,伪码:由需要被解释执行的源代码和解释引擎分析所得的中间代码组成;,解释引擎包括:语法解释器和解释器当前的运行状态,解释器体系结构风格,解释引擎当前工作状态的数据结构,记录源代码被解释执行的进度的数据结,虚拟机的本质:高层次抽象与低层次抽象之间的屏障。,解释器:高层次抽象与低层次抽象之间的映射。,解释器体系结构具有以下优点:,能够提高应用程序的移植能力和编程语言的跨平台移植能力,可以利用解释器对未实现的硬件进行仿真,解释器体系结构风格也存在着一些问题:,由于使用了特定语言和自定义操作规则,因此增加了系统运行的开销,解释器体系结构有许多现实应用,可以将其作为整个软件系统的一个组成部分,以下是一些具体的应用实例:,Java,和,Smalltalk,的编译器,基于规则的系统,诸如:专家系统领域中的,Prolog,语言,脚本语言,例如:,Awk,和,Perl,反馈控制环是一种特定的数据流结构,传统数据流结构是线性的,控制连续循环过程的体系结构应该是环形的,在反馈控制环系统中,主要包括以下,3,个部分:,过程,指操纵过程变量的相关机制,数据元素,指连续更新的过程变量,包括:输入变量、控制变量、操纵变量和相关参考值,反馈控制环体系结构风格,控制器,通过控制规则来修正变量,收集过程的实际状态和目标状态,调节变量以驱动实际状态朝目标状态前进,反馈控制环结构能够处理复杂的自适应问题,机器学习就是一个典型的实例,将训练样本输入到学习构件中,作为被查询的基本数据和知识源,然后输入真实数据,经过学习构件的分析和计算,输出学习结果,检测构件要检查学习结果与预期结果之间的差异,并反馈给学习构件,所有的体系结构不仅有很紧密的联系,而且在大多数情况下是被一起使用,的,。,对于一个实际的系统,甚至不能判断它是,A,风格、,B,风格还是,C,风格,因为没有足够的理由把它归为任何一种独立的体系结构风格,。这种,系统类型可以被称为复合系统,这种系统的构建模式被称为异构风格的集成。,异构,风格的集成,
展开阅读全文